foundry-design 0.2.0-beta.2 → 0.2.0-beta.20

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 (48) hide show
  1. package/README.md +163 -16
  2. package/dist/companion.d.ts +24 -0
  3. package/dist/companion.d.ts.map +1 -0
  4. package/dist/companion.js +89 -0
  5. package/dist/companion.js.map +1 -0
  6. package/dist/delivery-export.d.ts +27 -0
  7. package/dist/delivery-export.d.ts.map +1 -0
  8. package/dist/delivery-export.js +200 -0
  9. package/dist/delivery-export.js.map +1 -0
  10. package/dist/doctor.d.ts +24 -0
  11. package/dist/doctor.d.ts.map +1 -0
  12. package/dist/doctor.js +206 -0
  13. package/dist/doctor.js.map +1 -0
  14. package/dist/index.js +442 -120
  15. package/dist/index.js.map +1 -1
  16. package/dist/indexer.d.ts.map +1 -1
  17. package/dist/indexer.js +649 -27
  18. package/dist/indexer.js.map +1 -1
  19. package/dist/installer.d.ts +31 -0
  20. package/dist/installer.d.ts.map +1 -1
  21. package/dist/installer.js +551 -100
  22. package/dist/installer.js.map +1 -1
  23. package/dist/project.d.ts +8 -0
  24. package/dist/project.d.ts.map +1 -1
  25. package/dist/project.js +46 -1
  26. package/dist/project.js.map +1 -1
  27. package/dist/proxy.d.ts +7 -0
  28. package/dist/proxy.d.ts.map +1 -0
  29. package/dist/proxy.js +106 -0
  30. package/dist/proxy.js.map +1 -0
  31. package/dist/release.d.ts +5 -0
  32. package/dist/release.d.ts.map +1 -0
  33. package/dist/release.js +12 -0
  34. package/dist/release.js.map +1 -0
  35. package/dist/skill/foundry-design-control/SKILL.md +34 -11
  36. package/dist/skill/foundry-design-control/references/apply-run-contract.md +9 -4
  37. package/dist/skill/foundry-design-control/references/change-contract.md +2 -0
  38. package/dist/skill/foundry-design-control/references/component-workshop.md +46 -0
  39. package/dist/skill/foundry-design-control/references/design-branches.md +47 -0
  40. package/dist/skill/foundry-design-control/references/design-system-intelligence.md +40 -0
  41. package/dist/skill/foundry-design-control/references/motion-studio.md +101 -0
  42. package/dist/skill/foundry-design-control/references/portable-branch-records.md +38 -0
  43. package/dist/skill/foundry-design-control/references/responsive-design-lab.md +34 -0
  44. package/dist/skill/foundry-design-control/references/typography-studio.md +14 -0
  45. package/dist/skill/foundry-design-control/references/visual-agent-conversation.md +14 -0
  46. package/dist/skill/foundry-design-control/references/visual-workbench.md +27 -4
  47. package/dist/skill/foundry-design-control/scripts/foundry.sh +1 -5
  48. package/package.json +3 -3
@@ -0,0 +1,24 @@
1
+ import { SessionStore } from 'foundry-design-runtime';
2
+ export type DoctorStatus = 'passed' | 'warning' | 'failed';
3
+ export interface DoctorCheck {
4
+ id: 'project' | 'platform' | 'config' | 'project-connection' | 'integration' | 'instrumentation' | 'agent-configured' | 'agent-config-valid' | 'agent-version' | 'legacy-project-agent' | 'preview' | 'runtime' | 'agent-listening';
5
+ label: string;
6
+ status: DoctorStatus;
7
+ detail: string;
8
+ }
9
+ export interface DoctorReport {
10
+ version: string;
11
+ projectRoot: string;
12
+ checkedAt: string;
13
+ ready: boolean;
14
+ checks: DoctorCheck[];
15
+ configuredAgentFiles: string[];
16
+ activeSessionId?: string;
17
+ }
18
+ export interface DoctorOptions {
19
+ home?: string;
20
+ store?: SessionStore;
21
+ fetcher?: typeof fetch;
22
+ }
23
+ export declare function collectDoctorReport(projectRoot: string, options?: DoctorOptions): Promise<DoctorReport>;
24
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,EAAE,EACE,SAAS,GACT,UAAU,GACV,QAAQ,GACR,oBAAoB,GACpB,aAAa,GACb,iBAAiB,GACjB,kBAAkB,GAClB,oBAAoB,GACpB,eAAe,GACf,sBAAsB,GACtB,SAAS,GACT,SAAS,GACT,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAaD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAyNvB"}
package/dist/doctor.js ADDED
@@ -0,0 +1,206 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { join, resolve } from 'node:path';
4
+ import { SessionStore } from 'foundry-design-runtime';
5
+ import { detectPlatform } from './project.js';
6
+ import { FOUNDRY_MCP_PACKAGE_SPEC, FOUNDRY_VERSION } from './release.js';
7
+ async function text(path) {
8
+ return readFile(path, 'utf8').catch(() => '');
9
+ }
10
+ async function available(fetcher, url) {
11
+ if (!url)
12
+ return false;
13
+ return fetcher(url)
14
+ .then((response) => response.ok)
15
+ .catch(() => false);
16
+ }
17
+ export async function collectDoctorReport(projectRoot, options = {}) {
18
+ const root = resolve(projectRoot);
19
+ const home = options.home ?? homedir();
20
+ const fetcher = options.fetcher ?? fetch;
21
+ const store = options.store ?? new SessionStore();
22
+ const platform = await detectPlatform(root);
23
+ const configPath = join(root, '.foundry', 'foundry.config.json');
24
+ const config = await text(configPath).then((content) => {
25
+ try {
26
+ return JSON.parse(content);
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ });
32
+ const manifest = await text(join(root, '.foundry', 'install-manifest.json')).then((content) => {
33
+ try {
34
+ return JSON.parse(content);
35
+ }
36
+ catch {
37
+ return undefined;
38
+ }
39
+ });
40
+ const hostAgentFiles = [
41
+ ...new Set([
42
+ join(home, '.codex', 'config.toml'),
43
+ join(home, '.cursor', 'mcp.json'),
44
+ join(home, '.claude.json'),
45
+ ]),
46
+ ];
47
+ const projectAgentFiles = [
48
+ join(root, '.codex', 'config.toml'),
49
+ join(root, '.cursor', 'mcp.json'),
50
+ join(root, '.mcp.json'),
51
+ ].filter((path) => !hostAgentFiles.includes(path));
52
+ const schemaCheckedAgentFiles = [
53
+ ...new Set([
54
+ join(root, '.cursor', 'mcp.json'),
55
+ join(root, '.mcp.json'),
56
+ join(home, '.cursor', 'mcp.json'),
57
+ join(home, '.mcp.json'),
58
+ ]),
59
+ ];
60
+ const invalidAgentFiles = (await Promise.all(schemaCheckedAgentFiles.map(async (path) => {
61
+ const content = await text(path);
62
+ if (!content)
63
+ return undefined;
64
+ try {
65
+ const parsed = JSON.parse(content);
66
+ return parsed.mcpServers && typeof parsed.mcpServers === 'object' ? undefined : path;
67
+ }
68
+ catch {
69
+ return path;
70
+ }
71
+ }))).filter((path) => Boolean(path));
72
+ const agentFiles = (await Promise.all(hostAgentFiles.map(async (path) => ({ path, content: await text(path) })))).filter(({ content }) => content.includes('foundry-design-control'));
73
+ const legacyAgentFiles = (await Promise.all(projectAgentFiles.map(async (path) => ({ path, content: await text(path) })))).filter(({ content }) => content.includes('foundry-design-control'));
74
+ const exactAgentFiles = agentFiles.filter(({ content }) => content.includes(FOUNDRY_MCP_PACKAGE_SPEC));
75
+ const staleAgentFiles = agentFiles.filter(({ content }) => !content.includes(FOUNDRY_MCP_PACKAGE_SPEC));
76
+ const runtimeHealthy = await available(fetcher, 'http://127.0.0.1:4387/v1/health');
77
+ const sessions = await store.list().catch(() => []);
78
+ const activeSession = [...sessions]
79
+ .filter((session) => session.changeSet.context.projectRoot === root)
80
+ .sort((left, right) => right.changeSet.updatedAt.localeCompare(left.changeSet.updatedAt))[0];
81
+ let listening = false;
82
+ let listenerDetail = 'No live agent listener for this project session.';
83
+ if (runtimeHealthy && activeSession) {
84
+ const stored = await store.read(activeSession.changeSet.sessionId).catch(() => undefined);
85
+ if (stored) {
86
+ const response = await fetcher(`http://127.0.0.1:4387/v1/sessions/${activeSession.changeSet.sessionId}/agent-presence`, { headers: { 'x-foundry-token': stored.token } }).catch(() => undefined);
87
+ const presence = response?.ok
88
+ ? (await response.json())
89
+ : undefined;
90
+ listening = presence?.connected === true;
91
+ if (listening) {
92
+ listenerDetail = `${presence?.presence?.agent?.name ?? 'Agent'} is listening until ${presence?.presence?.expiresAt ?? 'the current lease expires'}.`;
93
+ }
94
+ }
95
+ }
96
+ const checks = [
97
+ { id: 'project', label: 'Project', status: 'passed', detail: root },
98
+ { id: 'platform', label: 'Detected platform', status: 'passed', detail: platform },
99
+ {
100
+ id: 'config',
101
+ label: 'Foundry configuration',
102
+ status: config ? 'passed' : 'failed',
103
+ detail: config ? configPath : 'Not configured.',
104
+ },
105
+ {
106
+ id: 'project-connection',
107
+ label: 'Project connection',
108
+ status: config && (config.connection?.mode === 'global' || manifest?.connectionMode === 'global')
109
+ ? 'passed'
110
+ : config
111
+ ? 'warning'
112
+ : 'failed',
113
+ detail: config?.connection?.mode === 'global' || manifest?.connectionMode === 'global'
114
+ ? 'Lightweight project connection using the shared agent bridge.'
115
+ : config
116
+ ? 'Legacy project connection. Run doctor --repair to migrate it.'
117
+ : 'Not connected.',
118
+ },
119
+ {
120
+ id: 'integration',
121
+ label: 'Managed integration',
122
+ status: manifest?.generatorVersion === FOUNDRY_VERSION
123
+ ? 'passed'
124
+ : manifest?.generatorVersion
125
+ ? 'warning'
126
+ : 'failed',
127
+ detail: manifest?.generatorVersion ?? 'Not installed.',
128
+ },
129
+ {
130
+ id: 'instrumentation',
131
+ label: 'Instrumentation',
132
+ status: config?.instrumented ? 'passed' : 'warning',
133
+ detail: config?.instrumented
134
+ ? `${config.framework ?? config.platform}`
135
+ : 'Integration pending.',
136
+ },
137
+ {
138
+ id: 'agent-configured',
139
+ label: 'Agent configured',
140
+ status: agentFiles.length ? 'passed' : 'failed',
141
+ detail: agentFiles.length ? agentFiles.map(({ path }) => path).join(', ') : 'Not configured.',
142
+ },
143
+ {
144
+ id: 'agent-config-valid',
145
+ label: 'Agent configuration schema',
146
+ status: invalidAgentFiles.length ? 'failed' : 'passed',
147
+ detail: invalidAgentFiles.length
148
+ ? `Invalid MCP configuration: ${invalidAgentFiles.join(', ')}.`
149
+ : 'All detected MCP configuration files have an mcpServers record.',
150
+ },
151
+ {
152
+ id: 'agent-version',
153
+ label: 'Agent package version',
154
+ status: exactAgentFiles.length === agentFiles.length && agentFiles.length
155
+ ? 'passed'
156
+ : agentFiles.length
157
+ ? 'warning'
158
+ : 'failed',
159
+ detail: staleAgentFiles.length
160
+ ? `Expected ${FOUNDRY_MCP_PACKAGE_SPEC}. Update: ${staleAgentFiles.map(({ path }) => path).join(', ')}`
161
+ : exactAgentFiles.length
162
+ ? FOUNDRY_MCP_PACKAGE_SPEC
163
+ : `Expected ${FOUNDRY_MCP_PACKAGE_SPEC}.`,
164
+ },
165
+ {
166
+ id: 'legacy-project-agent',
167
+ label: 'Project-scoped agent configuration',
168
+ status: legacyAgentFiles.length ? 'warning' : 'passed',
169
+ detail: legacyAgentFiles.length
170
+ ? `Foundry can migrate these legacy paths: ${legacyAgentFiles.map(({ path }) => path).join(', ')}`
171
+ : 'None. Agent integration is owned at machine level.',
172
+ },
173
+ {
174
+ id: 'preview',
175
+ label: 'Project preview',
176
+ status: platform !== 'web' || (config?.targetUrl && (await available(fetcher, config.targetUrl)))
177
+ ? 'passed'
178
+ : config?.targetUrl
179
+ ? 'warning'
180
+ : 'failed',
181
+ detail: config?.targetUrl ?? (platform === 'web' ? 'Not configured.' : 'Not required.'),
182
+ },
183
+ {
184
+ id: 'runtime',
185
+ label: 'Runtime',
186
+ status: runtimeHealthy ? 'passed' : 'warning',
187
+ detail: runtimeHealthy ? 'Healthy on 127.0.0.1:4387.' : 'Not running.',
188
+ },
189
+ {
190
+ id: 'agent-listening',
191
+ label: 'Active agent listener',
192
+ status: listening ? 'passed' : 'warning',
193
+ detail: listenerDetail,
194
+ },
195
+ ];
196
+ return {
197
+ version: FOUNDRY_VERSION,
198
+ projectRoot: root,
199
+ checkedAt: new Date().toISOString(),
200
+ ready: checks.every((check) => check.status !== 'failed') && listening,
201
+ checks,
202
+ configuredAgentFiles: agentFiles.map(({ path }) => path),
203
+ activeSessionId: activeSession?.changeSet.sessionId,
204
+ };
205
+ }
206
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}