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.
- package/README.md +163 -16
- package/dist/companion.d.ts +24 -0
- package/dist/companion.d.ts.map +1 -0
- package/dist/companion.js +89 -0
- package/dist/companion.js.map +1 -0
- package/dist/delivery-export.d.ts +27 -0
- package/dist/delivery-export.d.ts.map +1 -0
- package/dist/delivery-export.js +200 -0
- package/dist/delivery-export.js.map +1 -0
- package/dist/doctor.d.ts +24 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +206 -0
- package/dist/doctor.js.map +1 -0
- package/dist/index.js +442 -120
- package/dist/index.js.map +1 -1
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +649 -27
- package/dist/indexer.js.map +1 -1
- package/dist/installer.d.ts +31 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +551 -100
- package/dist/installer.js.map +1 -1
- package/dist/project.d.ts +8 -0
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +46 -1
- package/dist/project.js.map +1 -1
- package/dist/proxy.d.ts +7 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +106 -0
- package/dist/proxy.js.map +1 -0
- package/dist/release.d.ts +5 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +12 -0
- package/dist/release.js.map +1 -0
- package/dist/skill/foundry-design-control/SKILL.md +34 -11
- package/dist/skill/foundry-design-control/references/apply-run-contract.md +9 -4
- package/dist/skill/foundry-design-control/references/change-contract.md +2 -0
- package/dist/skill/foundry-design-control/references/component-workshop.md +46 -0
- package/dist/skill/foundry-design-control/references/design-branches.md +47 -0
- package/dist/skill/foundry-design-control/references/design-system-intelligence.md +40 -0
- package/dist/skill/foundry-design-control/references/motion-studio.md +101 -0
- package/dist/skill/foundry-design-control/references/portable-branch-records.md +38 -0
- package/dist/skill/foundry-design-control/references/responsive-design-lab.md +34 -0
- package/dist/skill/foundry-design-control/references/typography-studio.md +14 -0
- package/dist/skill/foundry-design-control/references/visual-agent-conversation.md +14 -0
- package/dist/skill/foundry-design-control/references/visual-workbench.md +27 -4
- package/dist/skill/foundry-design-control/scripts/foundry.sh +1 -5
- package/package.json +3 -3
package/dist/doctor.d.ts
ADDED
|
@@ -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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"}
|