mapples 0.2.0-beta.7 → 0.2.0-beta.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 +35 -14
- package/dist/api/agent.d.ts +2 -1
- package/dist/api/agent.js.map +1 -1
- package/dist/commands/agent.js +14 -3
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/create.js +1 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/impl/agentImpl.d.ts +13 -0
- package/dist/commands/impl/agentImpl.js +88 -11
- package/dist/commands/impl/agentImpl.js.map +1 -1
- package/dist/commands/impl/createImpl.js +10 -6
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +10 -6
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/merge/diff.d.ts +19 -0
- package/dist/merge/diff.js +47 -0
- package/dist/merge/diff.js.map +1 -1
- package/dist/merge/threeWay.js +36 -4
- package/dist/merge/threeWay.js.map +1 -1
- package/dist/project/agentState.d.ts +6 -0
- package/dist/project/agentState.js +1 -1
- package/dist/project/agentState.js.map +1 -1
- package/dist/services/agentInstall.d.ts +55 -10
- package/dist/services/agentInstall.js +206 -77
- package/dist/services/agentInstall.js.map +1 -1
- package/dist/services/scaffold.js +1 -1
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.js +12 -6
- package/dist/services/syncEngine.js.map +1 -1
- package/package.json +1 -1
- package/templates/agent/agents-md/AGENTS.md +8 -0
- package/templates/agent/claude/settings.json +26 -0
- package/templates/agent/codex/config.toml +6 -0
- package/templates/agent/codex/hooks.json +26 -0
- package/templates/agent/cursor/hooks.json +9 -0
- package/templates/agent/cursor/mcp.json +10 -0
- package/templates/{claude → agent}/mapples.md +11 -5
- package/templates/{claude → agent}/skills/mapples-conventions/SKILL.md +1 -1
- package/templates/{claude → agent}/skills/mapples-design/SKILL.md +44 -27
- package/templates/{claude → agent}/skills/mapples-sync/SKILL.md +1 -1
- /package/templates/{claude → agent/claude}/CLAUDE.md +0 -0
- /package/templates/{claude → agent/claude}/mcp.json +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/component-library.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/design-tokens.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/layout-contract.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/lint-checklist.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/plan.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/empty-states.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/forms-and-auth.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/home-dashboard.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/list-and-detail.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/microcopy.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/navigation-chrome.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/onboarding-flow.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/settings-profile.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/stats-and-progress.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/playbooks/visual-hierarchy.md +0 -0
- /package/templates/{claude → agent}/skills/mapples-design/reference/style-guides.md +0 -0
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
// `--agent
|
|
2
|
-
// (templates/
|
|
3
|
-
//
|
|
1
|
+
// `--agent <name>` / `mapples agent install`: puts the agent bundle
|
|
2
|
+
// (templates/agent) into an app — project-local skills, the conventions
|
|
3
|
+
// file, a pointer in the agent's instructions file, and the read-only MCP
|
|
4
|
+
// entry — in the places each agent reads them:
|
|
5
|
+
//
|
|
6
|
+
// claude .claude/skills, .claude/mapples.md, CLAUDE.md, .mcp.json
|
|
7
|
+
// cursor .cursor/skills, .cursor/mapples.md, AGENTS.md, .cursor/mcp.json
|
|
8
|
+
// codex .agents/skills, .agents/mapples.md, AGENTS.md, .codex/config.toml
|
|
9
|
+
//
|
|
4
10
|
// Files the CLI generated are refreshed in place (recognised by their
|
|
5
11
|
// GENERATED header); a file the user edited is never overwritten — it is
|
|
6
12
|
// skipped, or with --force deprecated (`_depr_<ts>_…old`) and regenerated.
|
|
13
|
+
// An instructions file or MCP config the user already has is never rewritten:
|
|
14
|
+
// the pointer line is appended once, the MCP entry is printed for them to add.
|
|
7
15
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
|
|
8
16
|
import { dirname, join } from 'node:path';
|
|
9
17
|
import { deprecateFile } from '../merge/deprecate.js';
|
|
@@ -12,21 +20,112 @@ import { DEFAULT_COMPONENTS_DIR, DEFAULT_PAGES_DIR, DEFAULT_ROUTES_DIR, } from '
|
|
|
12
20
|
import { ensureGitignored } from '../project/secret.js';
|
|
13
21
|
import { cliVersion } from '../version.js';
|
|
14
22
|
import { templatesDir } from './scaffold.js';
|
|
15
|
-
export const SUPPORTED_AGENTS = ['claude'];
|
|
16
|
-
/**
|
|
23
|
+
export const SUPPORTED_AGENTS = ['claude', 'cursor', 'codex'];
|
|
24
|
+
/** `--agent` spellings that name the same agent (ChatGPT's coding agent is Codex). */
|
|
25
|
+
const AGENT_ALIASES = { chatgpt: 'codex' };
|
|
26
|
+
/** The `agent` a lease is started with, per installed agent (Creator labels sessions by it). */
|
|
27
|
+
export const SESSION_AGENTS = ['claude-code', 'cursor', 'codex'];
|
|
28
|
+
export const AGENT_PROFILES = {
|
|
29
|
+
claude: {
|
|
30
|
+
name: 'claude',
|
|
31
|
+
label: 'Claude Code',
|
|
32
|
+
sessionAgent: 'claude-code',
|
|
33
|
+
skillsDir: '.claude/skills',
|
|
34
|
+
conventionsPath: '.claude/mapples.md',
|
|
35
|
+
designCommand: '/mapples-design',
|
|
36
|
+
instructions: {
|
|
37
|
+
file: 'CLAUDE.md',
|
|
38
|
+
template: 'claude/CLAUDE.md',
|
|
39
|
+
pointer: '@.claude/mapples.md',
|
|
40
|
+
},
|
|
41
|
+
mcp: { file: '.mcp.json', template: 'claude/mcp.json', marker: '"mapples"' },
|
|
42
|
+
hooks: {
|
|
43
|
+
file: '.claude/settings.json',
|
|
44
|
+
template: 'claude/settings.json',
|
|
45
|
+
marker: 'agent hook prompt',
|
|
46
|
+
},
|
|
47
|
+
restart: 'MAPPLES_SECRET=$(cat .mapples/secret) claude',
|
|
48
|
+
},
|
|
49
|
+
cursor: {
|
|
50
|
+
name: 'cursor',
|
|
51
|
+
label: 'Cursor',
|
|
52
|
+
sessionAgent: 'cursor',
|
|
53
|
+
skillsDir: '.cursor/skills',
|
|
54
|
+
conventionsPath: '.cursor/mapples.md',
|
|
55
|
+
designCommand: '/mapples-design',
|
|
56
|
+
instructions: {
|
|
57
|
+
file: 'AGENTS.md',
|
|
58
|
+
template: 'agents-md/AGENTS.md',
|
|
59
|
+
pointer: '- Cursor: read `.cursor/mapples.md`.',
|
|
60
|
+
},
|
|
61
|
+
mcp: { file: '.cursor/mcp.json', template: 'cursor/mcp.json', marker: '"mapples"' },
|
|
62
|
+
hooks: {
|
|
63
|
+
file: '.cursor/hooks.json',
|
|
64
|
+
template: 'cursor/hooks.json',
|
|
65
|
+
marker: 'agent hook prompt',
|
|
66
|
+
},
|
|
67
|
+
restart: 'MAPPLES_SECRET=$(cat .mapples/secret) cursor .',
|
|
68
|
+
},
|
|
69
|
+
codex: {
|
|
70
|
+
name: 'codex',
|
|
71
|
+
label: 'Codex',
|
|
72
|
+
sessionAgent: 'codex',
|
|
73
|
+
skillsDir: '.agents/skills',
|
|
74
|
+
conventionsPath: '.agents/mapples.md',
|
|
75
|
+
designCommand: '$mapples-design',
|
|
76
|
+
instructions: {
|
|
77
|
+
file: 'AGENTS.md',
|
|
78
|
+
template: 'agents-md/AGENTS.md',
|
|
79
|
+
pointer: '- Codex: read `.agents/mapples.md`.',
|
|
80
|
+
},
|
|
81
|
+
mcp: {
|
|
82
|
+
file: '.codex/config.toml',
|
|
83
|
+
template: 'codex/config.toml',
|
|
84
|
+
marker: '[mcp_servers.mapples]',
|
|
85
|
+
},
|
|
86
|
+
hooks: { file: '.codex/hooks.json', template: 'codex/hooks.json', marker: 'agent hook prompt' },
|
|
87
|
+
restart: 'MAPPLES_SECRET=$(cat .mapples/secret) codex',
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
/** The agent a `--agent` spelling names (aliases resolved), or null. */
|
|
91
|
+
function agentNameOf(value) {
|
|
92
|
+
if (typeof value !== 'string')
|
|
93
|
+
return null;
|
|
94
|
+
const name = value.toLowerCase();
|
|
95
|
+
if (SUPPORTED_AGENTS.includes(name))
|
|
96
|
+
return name;
|
|
97
|
+
return AGENT_ALIASES[name] ?? null;
|
|
98
|
+
}
|
|
99
|
+
/** Validates the `--agent` option; undefined when not given. */
|
|
17
100
|
export function parseAgentName(value) {
|
|
18
101
|
if (value === undefined)
|
|
19
102
|
return undefined;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
103
|
+
const name = agentNameOf(value);
|
|
104
|
+
if (name)
|
|
105
|
+
return name;
|
|
106
|
+
throw new Error(`unknown --agent "${String(value)}" — supported: ${SUPPORTED_AGENTS.join(', ')} (chatgpt = codex)`);
|
|
107
|
+
}
|
|
108
|
+
/** Validates `agent start --agent`; the session agent recorded for Creator. */
|
|
109
|
+
export function parseSessionAgent(value) {
|
|
110
|
+
if (value === undefined)
|
|
111
|
+
return 'claude-code';
|
|
112
|
+
if (typeof value === 'string' && SESSION_AGENTS.includes(value)) {
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
const installed = agentNameOf(value);
|
|
116
|
+
if (installed)
|
|
117
|
+
return AGENT_PROFILES[installed].sessionAgent;
|
|
118
|
+
throw new Error(`unknown session agent "${String(value)}" — supported: ${SESSION_AGENTS.join(', ')}`);
|
|
119
|
+
}
|
|
120
|
+
/** The default session label for a session agent. */
|
|
121
|
+
export function sessionAgentLabel(agent) {
|
|
122
|
+
return Object.values(AGENT_PROFILES).find((p) => p.sessionAgent === agent).label;
|
|
23
123
|
}
|
|
24
124
|
/** The marker every generated Markdown file carries (line 1, or right after its frontmatter). */
|
|
25
125
|
export const GENERATED_HEADER = /^<!--\s*GENERATED by Mapples\b/;
|
|
26
|
-
export const CLAUDE_MD_POINTER = '@.claude/mapples.md';
|
|
27
126
|
/**
|
|
28
127
|
* Whether the CLI generated this file: the header opens the file, or — for
|
|
29
|
-
* skills, whose YAML frontmatter must be the first thing
|
|
128
|
+
* skills, whose YAML frontmatter must be the first thing the agent reads —
|
|
30
129
|
* it is the first line after the frontmatter block.
|
|
31
130
|
*/
|
|
32
131
|
export function isGeneratedFile(content) {
|
|
@@ -41,27 +140,40 @@ export function isGeneratedFile(content) {
|
|
|
41
140
|
const afterFrontmatter = lines.slice(close + 1).find((line) => line.trim() !== '');
|
|
42
141
|
return GENERATED_HEADER.test(afterFrontmatter ?? '');
|
|
43
142
|
}
|
|
44
|
-
export function
|
|
45
|
-
return join(templatesDir(), '
|
|
143
|
+
export function agentTemplatesDir() {
|
|
144
|
+
return join(templatesDir(), 'agent');
|
|
46
145
|
}
|
|
47
|
-
function substitute(content, opts) {
|
|
146
|
+
function substitute(content, profile, opts) {
|
|
48
147
|
return content
|
|
49
148
|
.replaceAll('__CLI_VERSION__', cliVersion())
|
|
50
149
|
.replaceAll('__API_URL__', opts.apiUrl.replace(/\/+$/, ''))
|
|
51
150
|
.replaceAll('__ROUTES_DIR__', opts.routesDir)
|
|
52
151
|
.replaceAll('__PAGES_DIR__', opts.pagesDir)
|
|
53
|
-
.replaceAll('__COMPONENTS_DIR__', opts.componentsDir)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
});
|
|
152
|
+
.replaceAll('__COMPONENTS_DIR__', opts.componentsDir)
|
|
153
|
+
.replaceAll('__SKILLS_DIR__', profile.skillsDir)
|
|
154
|
+
.replaceAll('__CONVENTIONS_PATH__', profile.conventionsPath)
|
|
155
|
+
.replaceAll('__DESIGN_COMMAND__', profile.designCommand)
|
|
156
|
+
.replaceAll('__AGENT_LABEL__', profile.label)
|
|
157
|
+
.replaceAll('__AGENT_ID__', profile.sessionAgent)
|
|
158
|
+
.replaceAll('__AGENT_FLAG__', profile.name)
|
|
159
|
+
.replaceAll('__AGENT_RESTART__', profile.restart)
|
|
160
|
+
.replaceAll('__AGENTS_MD_POINTER__', profile.instructions.pointer);
|
|
63
161
|
}
|
|
64
|
-
|
|
162
|
+
function resolveOptions(options) {
|
|
163
|
+
return {
|
|
164
|
+
apiUrl: options.apiUrl,
|
|
165
|
+
force: options.force === true,
|
|
166
|
+
routesDir: options.routesDir ?? DEFAULT_ROUTES_DIR,
|
|
167
|
+
pagesDir: options.pagesDir ?? DEFAULT_PAGES_DIR,
|
|
168
|
+
componentsDir: options.componentsDir ?? DEFAULT_COMPONENTS_DIR,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/** The agent's MCP config for this API, as the installer writes it. */
|
|
172
|
+
export function mcpConfigFor(agent, apiUrl) {
|
|
173
|
+
const profile = AGENT_PROFILES[agent];
|
|
174
|
+
return substitute(readFileSync(join(agentTemplatesDir(), profile.mcp.template), 'utf8'), profile, resolveOptions({ apiUrl }));
|
|
175
|
+
}
|
|
176
|
+
/** Write a generated file, honouring the header handshake. */
|
|
65
177
|
function placeGenerated(root, rel, content, force, outcomes) {
|
|
66
178
|
const abs = join(root, rel);
|
|
67
179
|
if (existsSync(abs)) {
|
|
@@ -96,6 +208,30 @@ function placeGenerated(root, rel, content, force, outcomes) {
|
|
|
96
208
|
writeFileSync(abs, content);
|
|
97
209
|
outcomes.push({ file: rel, action: 'created' });
|
|
98
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* A config file the agent reads whole (MCP servers, hooks): created when
|
|
213
|
+
* absent, left alone when it already carries our entry, and otherwise never
|
|
214
|
+
* rewritten — the snippet comes back for the user to merge.
|
|
215
|
+
*/
|
|
216
|
+
function placeConfigOnce(root, target, content, outcomes, what) {
|
|
217
|
+
const abs = join(root, target.file);
|
|
218
|
+
if (!existsSync(abs)) {
|
|
219
|
+
mkdirSync(dirname(abs), { recursive: true });
|
|
220
|
+
writeFileSync(abs, content);
|
|
221
|
+
outcomes.push({ file: target.file, action: 'created' });
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
if (readFileSync(abs, 'utf8').includes(target.marker)) {
|
|
225
|
+
outcomes.push({ file: target.file, action: 'unchanged' });
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
outcomes.push({
|
|
229
|
+
file: target.file,
|
|
230
|
+
action: 'skipped',
|
|
231
|
+
detail: `exists — add ${what} yourself (snippet printed below)`,
|
|
232
|
+
});
|
|
233
|
+
return content;
|
|
234
|
+
}
|
|
99
235
|
function walk(dir, rel = '') {
|
|
100
236
|
const out = [];
|
|
101
237
|
for (const entry of readdirSync(join(dir, rel), { withFileTypes: true })) {
|
|
@@ -107,74 +243,67 @@ function walk(dir, rel = '') {
|
|
|
107
243
|
}
|
|
108
244
|
return out.sort();
|
|
109
245
|
}
|
|
110
|
-
export function
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
routesDir: options.routesDir ?? DEFAULT_ROUTES_DIR,
|
|
115
|
-
pagesDir: options.pagesDir ?? DEFAULT_PAGES_DIR,
|
|
116
|
-
componentsDir: options.componentsDir ?? DEFAULT_COMPONENTS_DIR,
|
|
117
|
-
};
|
|
118
|
-
const src = claudeTemplatesDir();
|
|
246
|
+
export function installAgentIntegration(root, agent, options) {
|
|
247
|
+
const profile = AGENT_PROFILES[agent];
|
|
248
|
+
const opts = resolveOptions(options);
|
|
249
|
+
const src = agentTemplatesDir();
|
|
119
250
|
const outcomes = [];
|
|
120
|
-
const read = (rel) => substitute(readFileSync(join(src, rel), 'utf8'), opts);
|
|
121
|
-
// Skills: templates/
|
|
251
|
+
const read = (rel) => substitute(readFileSync(join(src, rel), 'utf8'), profile, opts);
|
|
252
|
+
// Skills: templates/agent/skills/** -> <skillsDir>/**
|
|
122
253
|
for (const rel of walk(join(src, 'skills'))) {
|
|
123
|
-
placeGenerated(root, join(
|
|
254
|
+
placeGenerated(root, join(profile.skillsDir, rel), read(join('skills', rel)), opts.force, outcomes);
|
|
124
255
|
}
|
|
125
|
-
// Conventions: templates/
|
|
126
|
-
placeGenerated(root,
|
|
127
|
-
//
|
|
128
|
-
// pointer line is appended — the user's instructions are theirs.
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
256
|
+
// Conventions: templates/agent/mapples.md -> <conventionsPath>
|
|
257
|
+
placeGenerated(root, profile.conventionsPath, read('mapples.md'), opts.force, outcomes);
|
|
258
|
+
// Instructions file: created from the template when absent; otherwise only
|
|
259
|
+
// the pointer line is appended — the user's instructions are theirs.
|
|
260
|
+
const instructions = join(root, profile.instructions.file);
|
|
261
|
+
const pointer = profile.instructions.pointer;
|
|
262
|
+
if (!existsSync(instructions)) {
|
|
263
|
+
writeFileSync(instructions, read(profile.instructions.template));
|
|
264
|
+
outcomes.push({ file: profile.instructions.file, action: 'created' });
|
|
133
265
|
}
|
|
134
266
|
else {
|
|
135
|
-
const current = readFileSync(
|
|
136
|
-
if (current.split('\n').some((line) => line.trim() ===
|
|
137
|
-
outcomes.push({ file:
|
|
267
|
+
const current = readFileSync(instructions, 'utf8');
|
|
268
|
+
if (current.split('\n').some((line) => line.trim() === pointer)) {
|
|
269
|
+
outcomes.push({ file: profile.instructions.file, action: 'unchanged' });
|
|
138
270
|
}
|
|
139
271
|
else {
|
|
140
|
-
writeFileSync(
|
|
141
|
-
|
|
142
|
-
`\n${CLAUDE_MD_POINTER}\n`);
|
|
143
|
-
outcomes.push({ file: 'CLAUDE.md', action: 'appended', detail: CLAUDE_MD_POINTER });
|
|
272
|
+
writeFileSync(instructions, current + (current.endsWith('\n') || current === '' ? '' : '\n') + `\n${pointer}\n`);
|
|
273
|
+
outcomes.push({ file: profile.instructions.file, action: 'appended', detail: pointer });
|
|
144
274
|
}
|
|
145
275
|
}
|
|
146
|
-
//
|
|
147
|
-
// have other servers there) — the snippet
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const
|
|
151
|
-
if (!existsSync(mcp)) {
|
|
152
|
-
writeFileSync(mcp, mcpContent);
|
|
153
|
-
outcomes.push({ file: '.mcp.json', action: 'created' });
|
|
154
|
-
}
|
|
155
|
-
else if (readFileSync(mcp, 'utf8').includes('"mapples"')) {
|
|
156
|
-
outcomes.push({ file: '.mcp.json', action: 'unchanged' });
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
mcpSnippet = mcpContent;
|
|
160
|
-
outcomes.push({
|
|
161
|
-
file: '.mcp.json',
|
|
162
|
-
action: 'skipped',
|
|
163
|
-
detail: 'exists — add the "mapples" server yourself (snippet printed below)',
|
|
164
|
-
});
|
|
165
|
-
}
|
|
276
|
+
// MCP config and lease hooks: written once; an existing file is never
|
|
277
|
+
// touched (the user may have other servers or hooks there) — the snippet
|
|
278
|
+
// is returned for them to merge.
|
|
279
|
+
const mcpSnippet = placeConfigOnce(root, profile.mcp, read(profile.mcp.template), outcomes, 'the "mapples" server');
|
|
280
|
+
const hooksSnippet = placeConfigOnce(root, profile.hooks, read(profile.hooks.template), outcomes, 'the Mapples lease hooks');
|
|
166
281
|
if (ensureGitignored(root, [AGENT_STATE_GITIGNORE])) {
|
|
167
282
|
outcomes.push({ file: '.gitignore', action: 'appended', detail: AGENT_STATE_GITIGNORE });
|
|
168
283
|
}
|
|
169
|
-
return { outcomes, mcpSnippet };
|
|
284
|
+
return { agent, outcomes, mcpSnippet, hooksSnippet };
|
|
170
285
|
}
|
|
171
|
-
/** The lines printed after create/init/install with `--agent
|
|
172
|
-
export function
|
|
286
|
+
/** The lines printed after create/init/install with `--agent <name>`. */
|
|
287
|
+
export function agentNextSteps(agent, appDir) {
|
|
288
|
+
const profile = AGENT_PROFILES[agent];
|
|
173
289
|
const cd = appDir ? `cd ${appDir} && ` : '';
|
|
290
|
+
const where = {
|
|
291
|
+
claude: 'then type',
|
|
292
|
+
cursor: 'then in Agent chat type',
|
|
293
|
+
codex: 'trust the project when Codex asks and approve its hooks with /hooks (they load from .codex/), then type',
|
|
294
|
+
};
|
|
174
295
|
return [
|
|
175
|
-
|
|
176
|
-
` ${cd}
|
|
177
|
-
|
|
296
|
+
`${profile.label} is set up. Start it with the project key in the environment:`,
|
|
297
|
+
` ${cd}${profile.restart}`,
|
|
298
|
+
`${where[agent]} ${profile.designCommand} and describe your app.`,
|
|
178
299
|
];
|
|
179
300
|
}
|
|
301
|
+
/** The line that introduces a printed MCP snippet. */
|
|
302
|
+
export function mcpSnippetHeading(agent) {
|
|
303
|
+
return `Add this to your ${AGENT_PROFILES[agent].mcp.file}:`;
|
|
304
|
+
}
|
|
305
|
+
/** The line that introduces a printed hooks snippet. */
|
|
306
|
+
export function hooksSnippetHeading(agent) {
|
|
307
|
+
return `Add these hooks to your ${AGENT_PROFILES[agent].hooks.file} (they show the agent as working in Creator):`;
|
|
308
|
+
}
|
|
180
309
|
//# sourceMappingURL=agentInstall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentInstall.js","sourceRoot":"","sources":["../../src/services/agentInstall.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agentInstall.js","sourceRoot":"","sources":["../../src/services/agentInstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export function templatesDir() {
|
|
|
9
9
|
}
|
|
10
10
|
const RENAMES = { gitignore: '.gitignore' };
|
|
11
11
|
/** Template subtrees that are not part of the app shell (installed by their own service). */
|
|
12
|
-
const NOT_APP_SHELL = new Set(['
|
|
12
|
+
const NOT_APP_SHELL = new Set(['agent']);
|
|
13
13
|
/** Copy the app-shell templates into `target`, substituting __APP_NAME__. Never overwrites. */
|
|
14
14
|
export function scaffoldApp(target, appName) {
|
|
15
15
|
const written = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/services/scaffold.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,UAAU,YAAY;IAC1B,+CAA+C;IAC/C,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,OAAO,GAA2B,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACpE,6FAA6F;AAC7F,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/services/scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ import { emitComponent, emitPage, withoutRouteMarker } from '../codegen/emit.js'
|
|
|
22
22
|
import { importNeedsFor } from '../codegen/imports.js';
|
|
23
23
|
import { instanceLinker } from '../codegen/instances.js';
|
|
24
24
|
import { deprecateFile } from '../merge/deprecate.js';
|
|
25
|
-
import { diffTree } from '../merge/diff.js';
|
|
25
|
+
import { diffTree, diffTreeStaged } from '../merge/diff.js';
|
|
26
26
|
import { buildMergePatch, deepEqual } from '../merge/mergePatch.js';
|
|
27
27
|
import { threeWayMerge } from '../merge/threeWay.js';
|
|
28
28
|
import { treeToEdits } from '../merge/toEdits.js';
|
|
@@ -122,7 +122,7 @@ export async function runSyncEngine({ root, client }) {
|
|
|
122
122
|
// Planned before anything is sent: a placement group that cannot fit one
|
|
123
123
|
// transaction stops the push here (RFC-0001 §5.2). `pushOps` is the send
|
|
124
124
|
// order, which is what `progress.committedOps` counts against.
|
|
125
|
-
const pushTxs = planTransactions(merged.pushOps);
|
|
125
|
+
const pushTxs = [...planTransactions(merged.pushOps), ...planTransactions(merged.deferredOps)];
|
|
126
126
|
const pushOps = pushTxs.flat();
|
|
127
127
|
// Source text goes out AFTER the node ops (its `$sid`s must be server
|
|
128
128
|
// ids, which the node push mints), as its own transaction(s).
|
|
@@ -391,6 +391,7 @@ async function mergeAndWrite(root, client, config, base, remote, report) {
|
|
|
391
391
|
const pagesMap = readPagesMap(root);
|
|
392
392
|
const componentsMap = readComponentsMap(root);
|
|
393
393
|
const pushOps = [];
|
|
394
|
+
const deferredOps = [];
|
|
394
395
|
const sourceUploads = new Set();
|
|
395
396
|
const mergedBase = {
|
|
396
397
|
pages: new Map(),
|
|
@@ -425,6 +426,7 @@ async function mergeAndWrite(root, client, config, base, remote, report) {
|
|
|
425
426
|
sourcesOut: mergedBase.sources,
|
|
426
427
|
sourceUploads,
|
|
427
428
|
pushOps,
|
|
429
|
+
deferredOps,
|
|
428
430
|
report,
|
|
429
431
|
});
|
|
430
432
|
await mergeFiles({
|
|
@@ -441,6 +443,7 @@ async function mergeAndWrite(root, client, config, base, remote, report) {
|
|
|
441
443
|
sourcesOut: mergedBase.sources,
|
|
442
444
|
sourceUploads,
|
|
443
445
|
pushOps,
|
|
446
|
+
deferredOps,
|
|
444
447
|
report,
|
|
445
448
|
});
|
|
446
449
|
// ---- Non-page entities: style, assets ----
|
|
@@ -450,7 +453,7 @@ async function mergeAndWrite(root, client, config, base, remote, report) {
|
|
|
450
453
|
const assetsResult = await syncAssets(root, client, remote.assets, report);
|
|
451
454
|
pushOps.push(...assetsResult.pushOps);
|
|
452
455
|
mergedBase.assets = assetsResult.mergedAssets;
|
|
453
|
-
return { pushOps, mergedBase, pagesMap, componentsMap, sourceUploads };
|
|
456
|
+
return { pushOps, deferredOps, mergedBase, pagesMap, componentsMap, sourceUploads };
|
|
454
457
|
}
|
|
455
458
|
/**
|
|
456
459
|
* The 3-way file merge for one entity kind: extract the file, merge against
|
|
@@ -458,7 +461,7 @@ async function mergeAndWrite(root, client, config, base, remote, report) {
|
|
|
458
461
|
* deprecate on conflict, and collect the ops that push local changes.
|
|
459
462
|
*/
|
|
460
463
|
async function mergeFiles(args) {
|
|
461
|
-
const { root, kind, base, remote, mapping: mappings, linker, emit, mergedOut, baseSources, remoteSources, sourcesOut, sourceUploads, pushOps, report, } = args;
|
|
464
|
+
const { root, kind, base, remote, mapping: mappings, linker, emit, mergedOut, baseSources, remoteSources, sourcesOut, sourceUploads, pushOps, deferredOps, report, } = args;
|
|
462
465
|
/**
|
|
463
466
|
* The file's text after this sync becomes the next base. It goes to the
|
|
464
467
|
* server when a stored text exists and differs from the file (the file
|
|
@@ -712,8 +715,11 @@ async function mergeFiles(args) {
|
|
|
712
715
|
report.files.push({ file: mapping.file, action: fileExists ? 'regenerated' : 'created' });
|
|
713
716
|
}
|
|
714
717
|
recordSource(id, remoteSource, written, localTextChanged);
|
|
715
|
-
// Push = local changes rebased onto remote.
|
|
716
|
-
|
|
718
|
+
// Push = local changes rebased onto remote. Moves into containers created
|
|
719
|
+
// by this push go in a later transaction, once those have real ids.
|
|
720
|
+
const staged = diffTreeStaged(remoteRoot, merged);
|
|
721
|
+
pushOps.push(...staged.ops);
|
|
722
|
+
deferredOps.push(...staged.deferred);
|
|
717
723
|
const statePatch = buildMergePatch({ state: remoteStates }, { state: mergedStates });
|
|
718
724
|
if (statePatch !== null) {
|
|
719
725
|
pushOps.push({ op: 'update', entity: kind.entity, id, patch: statePatch });
|