mapples 0.2.0-beta.5 → 0.2.0-beta.6
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 +42 -0
- package/dist/api/agent.d.ts +84 -0
- package/dist/api/agent.js +92 -0
- package/dist/api/agent.js.map +1 -0
- package/dist/api/client.d.ts +3 -0
- package/dist/api/client.js +2 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/commit.js +1 -0
- package/dist/api/commit.js.map +1 -1
- package/dist/api/objects.d.ts +12 -0
- package/dist/api/objects.js +2 -0
- package/dist/api/objects.js.map +1 -1
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.js +76 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/create.js +1 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/impl/adoptImpl.js +3 -0
- package/dist/commands/impl/adoptImpl.js.map +1 -1
- package/dist/commands/impl/agentImpl.d.ts +10 -0
- package/dist/commands/impl/agentImpl.js +349 -0
- package/dist/commands/impl/agentImpl.js.map +1 -0
- package/dist/commands/impl/createImpl.js +19 -0
- package/dist/commands/impl/createImpl.js.map +1 -1
- package/dist/commands/impl/initImpl.js +19 -0
- package/dist/commands/impl/initImpl.js.map +1 -1
- package/dist/commands/impl/syncImpl.js +9 -3
- package/dist/commands/impl/syncImpl.js.map +1 -1
- package/dist/commands/init.js +1 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/project/agentState.d.ts +24 -0
- package/dist/project/agentState.js +42 -0
- package/dist/project/agentState.js.map +1 -0
- package/dist/project/secret.d.ts +6 -2
- package/dist/project/secret.js +11 -5
- package/dist/project/secret.js.map +1 -1
- package/dist/services/agentInstall.d.ts +35 -0
- package/dist/services/agentInstall.js +180 -0
- package/dist/services/agentInstall.js.map +1 -0
- package/dist/services/agentLease.d.ts +2 -0
- package/dist/services/agentLease.js +32 -0
- package/dist/services/agentLease.js.map +1 -0
- package/dist/services/clientFactory.d.ts +2 -0
- package/dist/services/clientFactory.js +16 -1
- package/dist/services/clientFactory.js.map +1 -1
- package/dist/services/scaffold.js +4 -0
- package/dist/services/scaffold.js.map +1 -1
- package/dist/services/syncEngine.js +51 -18
- package/dist/services/syncEngine.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/templates/claude/CLAUDE.md +7 -0
- package/templates/claude/mapples.md +118 -0
- package/templates/claude/mcp.json +11 -0
- package/templates/claude/skills/mapples-conventions/SKILL.md +136 -0
- package/templates/claude/skills/mapples-design/SKILL.md +218 -0
- package/templates/claude/skills/mapples-design/reference/component-library.md +128 -0
- package/templates/claude/skills/mapples-design/reference/design-tokens.md +132 -0
- package/templates/claude/skills/mapples-design/reference/layout-contract.md +227 -0
- package/templates/claude/skills/mapples-design/reference/lint-checklist.md +51 -0
- package/templates/claude/skills/mapples-design/reference/plan.md +95 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/empty-states.md +14 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/forms-and-auth.md +22 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/home-dashboard.md +14 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/list-and-detail.md +18 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/microcopy.md +20 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/navigation-chrome.md +21 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/onboarding-flow.md +15 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +37 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/settings-profile.md +16 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/stats-and-progress.md +17 -0
- package/templates/claude/skills/mapples-design/reference/playbooks/visual-hierarchy.md +18 -0
- package/templates/claude/skills/mapples-design/reference/style-guides.md +92 -0
- package/templates/claude/skills/mapples-sync/SKILL.md +92 -0
- package/templates/gitignore +2 -0
- package/templates/package.json +1 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
// `mapples agent …` — the lease driver a Claude Code run calls between its
|
|
2
|
+
// phases. Exit codes: 0 ok · 1 error · 3 lease gone · 4 project busy.
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { AgentSessionError, } from '../../api/agent.js';
|
|
6
|
+
import { isNetworkError } from '../../api/client.js';
|
|
7
|
+
import { agentStatePath, clearAgentState, readAgentState, writeAgentState, } from '../../project/agentState.js';
|
|
8
|
+
import { readConfig } from '../../project/config.js';
|
|
9
|
+
import { resolveApiUrl } from '../../project/env.js';
|
|
10
|
+
import { claudeNextSteps, installClaudeIntegration, parseAgentName, } from '../../services/agentInstall.js';
|
|
11
|
+
import { agentClientForApp } from '../../services/clientFactory.js';
|
|
12
|
+
export const EXIT_LEASE_GONE = 3;
|
|
13
|
+
export const EXIT_BUSY = 4;
|
|
14
|
+
const STEP_STATUSES = [
|
|
15
|
+
'pending',
|
|
16
|
+
'running',
|
|
17
|
+
'done',
|
|
18
|
+
'failed',
|
|
19
|
+
'skipped',
|
|
20
|
+
];
|
|
21
|
+
function emit(opts, json, lines) {
|
|
22
|
+
if (opts.json === true) {
|
|
23
|
+
console.log(JSON.stringify(json, null, 2));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
for (const line of lines)
|
|
27
|
+
console.log(line);
|
|
28
|
+
}
|
|
29
|
+
function requireState(root) {
|
|
30
|
+
const state = readAgentState(root);
|
|
31
|
+
if (!state) {
|
|
32
|
+
throw new Error('no agent session in this checkout — run `mapples agent start` first');
|
|
33
|
+
}
|
|
34
|
+
return state;
|
|
35
|
+
}
|
|
36
|
+
function isAlive(pid) {
|
|
37
|
+
if (!pid)
|
|
38
|
+
return false;
|
|
39
|
+
try {
|
|
40
|
+
process.kill(pid, 0);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// ESRCH: the daemon is gone. EPERM: a process exists but is not ours — alive.
|
|
45
|
+
return err.code === 'EPERM';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function killDaemon(pid) {
|
|
49
|
+
if (!pid)
|
|
50
|
+
return 'absent';
|
|
51
|
+
try {
|
|
52
|
+
process.kill(pid, 'SIGTERM');
|
|
53
|
+
return 'stopped';
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (err.code === 'ESRCH')
|
|
57
|
+
return 'absent';
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** The detached keep-alive: `mapples agent heartbeat --loop` in this checkout. */
|
|
62
|
+
function spawnDaemon(root, opts) {
|
|
63
|
+
const entry = process.argv[1];
|
|
64
|
+
if (!entry)
|
|
65
|
+
throw new Error('cannot locate the CLI entry point to spawn the heartbeat daemon');
|
|
66
|
+
const args = [entry, 'agent', 'heartbeat', '--loop'];
|
|
67
|
+
if (typeof opts.denv === 'string')
|
|
68
|
+
args.push('--denv', opts.denv);
|
|
69
|
+
const child = spawn(process.execPath, args, { cwd: root, detached: true, stdio: 'ignore' });
|
|
70
|
+
child.unref();
|
|
71
|
+
if (child.pid === undefined)
|
|
72
|
+
throw new Error('the heartbeat daemon did not start (no pid)');
|
|
73
|
+
return child.pid;
|
|
74
|
+
}
|
|
75
|
+
function describe(session) {
|
|
76
|
+
const done = session.steps.filter((s) => s.status === 'done').length;
|
|
77
|
+
return [
|
|
78
|
+
` session ${session.uuid} (${session.status})`,
|
|
79
|
+
` label ${session.label ?? '—'}${session.apiKey?.name ? chalk.gray(` · key ${session.apiKey.name}`) : ''}`,
|
|
80
|
+
` since ${session.startedAt}`,
|
|
81
|
+
` heartbeat ${session.lastHeartbeatAt} (expires ${session.expiresAt})`,
|
|
82
|
+
` step ${session.currentStep ?? '—'} · ${done}/${session.steps.length} done`,
|
|
83
|
+
...(session.error ? [` error ${session.error}`] : []),
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
// ---- install ----
|
|
87
|
+
export async function runAgentInstall(opts) {
|
|
88
|
+
const root = process.cwd();
|
|
89
|
+
parseAgentName(opts.agent ?? 'claude');
|
|
90
|
+
const config = readConfig(root);
|
|
91
|
+
const apiUrl = resolveApiUrl({ denv: opts.denv, configuredUrl: config.apiUrl });
|
|
92
|
+
const result = installClaudeIntegration(root, {
|
|
93
|
+
apiUrl,
|
|
94
|
+
force: opts.force === true,
|
|
95
|
+
routesDir: config.routesDir,
|
|
96
|
+
pagesDir: config.pagesDir,
|
|
97
|
+
componentsDir: config.componentsDir,
|
|
98
|
+
});
|
|
99
|
+
emit(opts, { agent: 'claude', ...result }, [
|
|
100
|
+
chalk.bold('\nmapples agent install'),
|
|
101
|
+
...renderInstallOutcomes(result.outcomes),
|
|
102
|
+
...(result.mcpSnippet ? ['', 'Add this to your .mcp.json:', result.mcpSnippet] : []),
|
|
103
|
+
'',
|
|
104
|
+
...claudeNextSteps(null),
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
export function renderInstallOutcomes(outcomes) {
|
|
108
|
+
const icon = {
|
|
109
|
+
created: chalk.green('A'),
|
|
110
|
+
updated: chalk.cyan('M'),
|
|
111
|
+
unchanged: chalk.gray('·'),
|
|
112
|
+
skipped: chalk.yellow('S'),
|
|
113
|
+
appended: chalk.cyan('+'),
|
|
114
|
+
deprecated: chalk.red('D'),
|
|
115
|
+
};
|
|
116
|
+
return outcomes
|
|
117
|
+
.filter((o) => o.action !== 'unchanged')
|
|
118
|
+
.map((o) => ` ${icon[o.action]} ${o.file}${o.detail ? chalk.gray(` — ${o.detail}`) : ''}`);
|
|
119
|
+
}
|
|
120
|
+
// ---- start ----
|
|
121
|
+
export async function runAgentStart(opts) {
|
|
122
|
+
const root = process.cwd();
|
|
123
|
+
const config = readConfig(root);
|
|
124
|
+
const client = agentClientForApp(root, opts);
|
|
125
|
+
const label = typeof opts.label === 'string' && opts.label.length > 0 ? opts.label : 'Claude Code';
|
|
126
|
+
const steps = typeof opts.steps === 'string'
|
|
127
|
+
? opts.steps
|
|
128
|
+
.split(',')
|
|
129
|
+
.map((title) => title.trim())
|
|
130
|
+
.filter((title) => title.length > 0)
|
|
131
|
+
.map((title) => ({ title }))
|
|
132
|
+
: undefined;
|
|
133
|
+
const wantDaemon = opts.daemon !== false;
|
|
134
|
+
// Idempotent re-run: this checkout already holds the live session.
|
|
135
|
+
const existing = readAgentState(root);
|
|
136
|
+
if (existing) {
|
|
137
|
+
const live = await client.current();
|
|
138
|
+
if (live && live.uuid === existing.uuid && live.status === 'active') {
|
|
139
|
+
let pid = existing.heartbeatPid;
|
|
140
|
+
if (wantDaemon && !isAlive(pid)) {
|
|
141
|
+
pid = spawnDaemon(root, opts);
|
|
142
|
+
writeAgentState(root, { ...existing, heartbeatPid: pid });
|
|
143
|
+
}
|
|
144
|
+
emit(opts, { session: live, state: readAgentState(root), resumed: true }, [
|
|
145
|
+
chalk.bold('\nmapples agent start') + chalk.gray(' — already running'),
|
|
146
|
+
...describe(live),
|
|
147
|
+
]);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
clearAgentState(root);
|
|
151
|
+
}
|
|
152
|
+
let session;
|
|
153
|
+
try {
|
|
154
|
+
session = await client.start({
|
|
155
|
+
agent: 'claude-code',
|
|
156
|
+
label,
|
|
157
|
+
...(steps && steps.length > 0 ? { steps } : {}),
|
|
158
|
+
...(opts.takeover === true ? { force: true } : {}),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
if (err instanceof AgentSessionError && err.code === 'SESSION_ACTIVE') {
|
|
163
|
+
const busy = err.session;
|
|
164
|
+
process.exitCode = EXIT_BUSY;
|
|
165
|
+
emit(opts, { busy: true, session: busy, exitCode: EXIT_BUSY }, [
|
|
166
|
+
chalk.yellow.bold('\nproject busy — another agent session holds it'),
|
|
167
|
+
...(busy ? describe(busy) : [` ${err.message}`]),
|
|
168
|
+
chalk.gray(' re-run with --takeover to disconnect it and take the lease'),
|
|
169
|
+
]);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
throw err;
|
|
173
|
+
}
|
|
174
|
+
const state = {
|
|
175
|
+
schema: 1,
|
|
176
|
+
uuid: session.uuid,
|
|
177
|
+
label,
|
|
178
|
+
startedAt: session.startedAt,
|
|
179
|
+
apiUrl: resolveApiUrl({ denv: opts.denv, configuredUrl: config.apiUrl }),
|
|
180
|
+
projectId: config.projectId,
|
|
181
|
+
heartbeatSeconds: session.heartbeatSeconds,
|
|
182
|
+
};
|
|
183
|
+
writeAgentState(root, state);
|
|
184
|
+
if (wantDaemon) {
|
|
185
|
+
state.heartbeatPid = spawnDaemon(root, opts);
|
|
186
|
+
writeAgentState(root, state);
|
|
187
|
+
}
|
|
188
|
+
emit(opts, { session, state, resumed: false }, [
|
|
189
|
+
chalk.bold('\nmapples agent start'),
|
|
190
|
+
...describe(session),
|
|
191
|
+
chalk.gray(wantDaemon
|
|
192
|
+
? ` heartbeat daemon pid ${state.heartbeatPid} every ${session.heartbeatSeconds} s`
|
|
193
|
+
: ' no heartbeat daemon (--no-daemon) — keep the lease alive with `mapples agent heartbeat`'),
|
|
194
|
+
]);
|
|
195
|
+
}
|
|
196
|
+
// ---- step ----
|
|
197
|
+
export async function runAgentStep(opts) {
|
|
198
|
+
const root = process.cwd();
|
|
199
|
+
const state = requireState(root);
|
|
200
|
+
const index = Number(opts.index);
|
|
201
|
+
if (!Number.isInteger(index) || index < 0)
|
|
202
|
+
throw new Error(`--index must be a non-negative integer`);
|
|
203
|
+
const status = opts.status;
|
|
204
|
+
if (!STEP_STATUSES.includes(status)) {
|
|
205
|
+
throw new Error(`--status must be one of ${STEP_STATUSES.join(', ')}`);
|
|
206
|
+
}
|
|
207
|
+
const title = typeof opts.title === 'string' ? opts.title : undefined;
|
|
208
|
+
const detail = typeof opts.detail === 'string' ? opts.detail : undefined;
|
|
209
|
+
const client = agentClientForApp(root, opts);
|
|
210
|
+
let session;
|
|
211
|
+
try {
|
|
212
|
+
session = await client.heartbeat(state.uuid, {
|
|
213
|
+
step: { index, ...(title ? { title } : {}), status, ...(detail ? { detail } : {}) },
|
|
214
|
+
...(status === 'running' && title ? { currentStep: title } : {}),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
if (leaseGone(err, root, state, opts))
|
|
219
|
+
return;
|
|
220
|
+
throw err;
|
|
221
|
+
}
|
|
222
|
+
const reported = session.steps.find((s) => s.index === index);
|
|
223
|
+
writeAgentState(root, {
|
|
224
|
+
...state,
|
|
225
|
+
lastStep: { index, title: reported?.title ?? title ?? `step ${index}`, status },
|
|
226
|
+
});
|
|
227
|
+
emit(opts, { session, step: reported ?? null }, [
|
|
228
|
+
`${chalk.bold('mapples agent step')} ${index} ${reported?.title ?? title ?? ''} → ${status}`,
|
|
229
|
+
]);
|
|
230
|
+
}
|
|
231
|
+
/** SESSION_GONE handling shared by step/heartbeat/stop: exit 3, clear local state, stop the daemon. */
|
|
232
|
+
function leaseGone(err, root, state, opts) {
|
|
233
|
+
if (!(err instanceof AgentSessionError) || err.code !== 'SESSION_GONE')
|
|
234
|
+
return false;
|
|
235
|
+
killDaemon(state.heartbeatPid);
|
|
236
|
+
clearAgentState(root);
|
|
237
|
+
process.exitCode = EXIT_LEASE_GONE;
|
|
238
|
+
emit(opts, { leaseGone: true, session: state.uuid, reason: err.message, exitCode: EXIT_LEASE_GONE }, [
|
|
239
|
+
chalk.red(`agent session ${state.uuid} is no longer active (${err.message}) — local state cleared`),
|
|
240
|
+
]);
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
// ---- heartbeat ----
|
|
244
|
+
export async function runAgentHeartbeat(opts) {
|
|
245
|
+
const root = process.cwd();
|
|
246
|
+
if (opts.loop === true) {
|
|
247
|
+
process.exitCode = await heartbeatLoop(root, opts);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const state = requireState(root);
|
|
251
|
+
const client = agentClientForApp(root, opts);
|
|
252
|
+
try {
|
|
253
|
+
const session = await client.heartbeat(state.uuid);
|
|
254
|
+
emit(opts, { session }, [
|
|
255
|
+
`${chalk.bold('mapples agent heartbeat')} ok (${session.lastHeartbeatAt})`,
|
|
256
|
+
]);
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
if (leaseGone(err, root, state, opts))
|
|
260
|
+
return;
|
|
261
|
+
throw err;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
265
|
+
/**
|
|
266
|
+
* The daemon body. Stops (exit 0) when the state file is gone or names
|
|
267
|
+
* another session, after --max-minutes; exit 3 when the server says the
|
|
268
|
+
* lease is gone. Network errors are retried on the next tick.
|
|
269
|
+
*/
|
|
270
|
+
async function heartbeatLoop(root, opts) {
|
|
271
|
+
const initial = readAgentState(root);
|
|
272
|
+
if (!initial)
|
|
273
|
+
return 0;
|
|
274
|
+
const maxMinutes = Number(opts.maxMinutes ?? 180);
|
|
275
|
+
const deadline = Date.now() + maxMinutes * 60_000;
|
|
276
|
+
let client = agentClientForApp(root, opts);
|
|
277
|
+
let intervalMs = Math.max(1, initial.heartbeatSeconds) * 1000;
|
|
278
|
+
while (Date.now() < deadline) {
|
|
279
|
+
const state = readAgentState(root);
|
|
280
|
+
if (!state || state.uuid !== initial.uuid)
|
|
281
|
+
return 0;
|
|
282
|
+
try {
|
|
283
|
+
const session = await client.heartbeat(state.uuid);
|
|
284
|
+
intervalMs = Math.max(1, session.heartbeatSeconds) * 1000;
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
if (err instanceof AgentSessionError && err.code === 'SESSION_GONE')
|
|
288
|
+
return EXIT_LEASE_GONE;
|
|
289
|
+
if (!(err instanceof AgentSessionError) && !isNetworkError(err))
|
|
290
|
+
throw err;
|
|
291
|
+
// Refused for another reason or unreachable: keep trying — the lease
|
|
292
|
+
// has 90 s and the next tick may land.
|
|
293
|
+
client = agentClientForApp(root, opts);
|
|
294
|
+
}
|
|
295
|
+
await sleep(intervalMs);
|
|
296
|
+
}
|
|
297
|
+
return 0;
|
|
298
|
+
}
|
|
299
|
+
// ---- stop ----
|
|
300
|
+
export async function runAgentStop(opts) {
|
|
301
|
+
const root = process.cwd();
|
|
302
|
+
const state = readAgentState(root);
|
|
303
|
+
if (!state) {
|
|
304
|
+
emit(opts, { released: false, reason: 'no local agent session' }, [
|
|
305
|
+
chalk.gray('no agent session in this checkout — nothing to stop'),
|
|
306
|
+
]);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const status = opts.status === 'failed' ? 'failed' : 'done';
|
|
310
|
+
if (opts.status !== undefined && opts.status !== 'done' && opts.status !== 'failed') {
|
|
311
|
+
throw new Error('--status must be done or failed');
|
|
312
|
+
}
|
|
313
|
+
const error = typeof opts.error === 'string' ? opts.error : undefined;
|
|
314
|
+
const client = agentClientForApp(root, opts);
|
|
315
|
+
let session = null;
|
|
316
|
+
let note = null;
|
|
317
|
+
try {
|
|
318
|
+
session = await client.release(state.uuid, { status, ...(error ? { error } : {}) });
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
if (!(err instanceof AgentSessionError) || err.code !== 'SESSION_GONE')
|
|
322
|
+
throw err;
|
|
323
|
+
note = `session ${state.uuid} was already gone (${err.message})`;
|
|
324
|
+
}
|
|
325
|
+
const daemon = killDaemon(state.heartbeatPid);
|
|
326
|
+
clearAgentState(root);
|
|
327
|
+
emit(opts, { released: session !== null, session, daemon, note }, [
|
|
328
|
+
chalk.bold('\nmapples agent stop'),
|
|
329
|
+
...(session ? describe(session) : [` ${note}`]),
|
|
330
|
+
chalk.gray(` heartbeat daemon ${daemon}; ${agentStatePath(root).slice(root.length + 1)} removed`),
|
|
331
|
+
]);
|
|
332
|
+
}
|
|
333
|
+
// ---- status ----
|
|
334
|
+
export async function runAgentStatus(opts) {
|
|
335
|
+
const root = process.cwd();
|
|
336
|
+
readConfig(root);
|
|
337
|
+
const state = readAgentState(root);
|
|
338
|
+
const session = await agentClientForApp(root, opts).current();
|
|
339
|
+
const daemonAlive = state ? isAlive(state.heartbeatPid) : false;
|
|
340
|
+
const holdsLease = state !== null && session !== null && session.uuid === state.uuid;
|
|
341
|
+
emit(opts, { session, state, holdsLease, daemonAlive }, [
|
|
342
|
+
chalk.bold('\nmapples agent status'),
|
|
343
|
+
...(session ? describe(session) : [' no agent session on this project']),
|
|
344
|
+
state
|
|
345
|
+
? chalk.gray(` local ${state.uuid}${holdsLease ? ' (this checkout holds the lease)' : ' (stale — run `mapples agent stop`)'}; daemon ${daemonAlive ? `alive (pid ${state.heartbeatPid})` : 'not running'}`)
|
|
346
|
+
: chalk.gray(' local no session state in this checkout'),
|
|
347
|
+
]);
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=agentImpl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/agentImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,12 @@ import { resolveProject } from '../../api/auth.js';
|
|
|
7
7
|
import { DEFAULT_PAGES_DIR, writeConfig } from '../../project/config.js';
|
|
8
8
|
import { assetUrlFor, resolveApiUrl } from '../../project/env.js';
|
|
9
9
|
import { writeSecret } from '../../project/secret.js';
|
|
10
|
+
import { claudeNextSteps, installClaudeIntegration, parseAgentName, } from '../../services/agentInstall.js';
|
|
10
11
|
import { scaffoldApp } from '../../services/scaffold.js';
|
|
11
12
|
import { runSyncEngine } from '../../services/syncEngine.js';
|
|
12
13
|
import { renderReport } from '../../ui/report.js';
|
|
13
14
|
import { cliOrigin } from '../../version.js';
|
|
15
|
+
import { renderInstallOutcomes } from './agentImpl.js';
|
|
14
16
|
export async function askSecret(opts) {
|
|
15
17
|
if (typeof opts.secret === 'string' && opts.secret.length > 0)
|
|
16
18
|
return opts.secret;
|
|
@@ -29,6 +31,7 @@ export async function runCreate(app, opts) {
|
|
|
29
31
|
if (existsSync(target) && readdirSync(target).length > 0) {
|
|
30
32
|
throw new Error(`${target} already exists and is not empty`);
|
|
31
33
|
}
|
|
34
|
+
const agent = parseAgentName(opts.agent);
|
|
32
35
|
const secret = await askSecret(opts);
|
|
33
36
|
const apiUrl = resolveApiUrl({ apiUrl: opts.apiUrl, denv: opts.denv });
|
|
34
37
|
const { projectId, name } = await resolveProject(apiUrl, secret);
|
|
@@ -50,6 +53,17 @@ export async function runCreate(app, opts) {
|
|
|
50
53
|
for (const file of written)
|
|
51
54
|
console.log(` ${chalk.green('A')} ${file}`);
|
|
52
55
|
console.log(` ${chalk.green('A')} .mapples/secret ${chalk.gray('(gitignored)')}`);
|
|
56
|
+
let mcpSnippet = null;
|
|
57
|
+
if (agent === 'claude') {
|
|
58
|
+
const install = installClaudeIntegration(target, {
|
|
59
|
+
apiUrl,
|
|
60
|
+
routesDir: 'app',
|
|
61
|
+
pagesDir: DEFAULT_PAGES_DIR,
|
|
62
|
+
});
|
|
63
|
+
for (const line of renderInstallOutcomes(install.outcomes))
|
|
64
|
+
console.log(line);
|
|
65
|
+
mcpSnippet = install.mcpSnippet;
|
|
66
|
+
}
|
|
53
67
|
// First sync pulls the whole project (tolerates being offline).
|
|
54
68
|
const client = new JpatchClient({
|
|
55
69
|
baseUrl: apiUrl,
|
|
@@ -74,5 +88,10 @@ export async function runCreate(app, opts) {
|
|
|
74
88
|
' yarn install (or npm install)',
|
|
75
89
|
' npx expo start',
|
|
76
90
|
].join('\n'));
|
|
91
|
+
if (agent === 'claude') {
|
|
92
|
+
if (mcpSnippet)
|
|
93
|
+
console.log(['', 'Add this to your .mcp.json:', mcpSnippet].join('\n'));
|
|
94
|
+
console.log(['', ...claudeNextSteps(app)].join('\n'));
|
|
95
|
+
}
|
|
77
96
|
}
|
|
78
97
|
//# sourceMappingURL=createImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/createImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"createImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/createImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,cAAc,GACf,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAA6B;IAC3D,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IAClF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,mDAAmD;KAC7D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAA4B,CAAC;IACnD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAA6B;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,kCAAkC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,WAAW,CAAC,MAAM,EAAE;QAClB,SAAS;QACT,MAAM;QACN,QAAQ,EAAE,iBAAiB;QAC3B,qEAAqE;QACrE,uEAAuE;QACvE,4DAA4D;QAC5D,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC7F,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACnF,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,EAAE;YAC/C,MAAM;YACN,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,iBAAiB;SAC5B,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9E,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAClC,CAAC;IAED,gEAAgE;IAChE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC;QAClC,SAAS;QACT,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,SAAS,EAAE;KACpB,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,mEAAmE,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,CAAC,GAAG,CACT;QACE,EAAE;QACF,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;QACzB,QAAQ,GAAG,EAAE;QACb,iCAAiC;QACjC,kBAAkB;KACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACF,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,6BAA6B,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
|
|
@@ -6,10 +6,12 @@ import { resolveProject } from '../../api/auth.js';
|
|
|
6
6
|
import { DEFAULT_PAGES_DIR, DEFAULT_ROUTES_DIR, writeConfig, configPath, } from '../../project/config.js';
|
|
7
7
|
import { assetUrlFor, resolveApiUrl } from '../../project/env.js';
|
|
8
8
|
import { writeSecret } from '../../project/secret.js';
|
|
9
|
+
import { claudeNextSteps, installClaudeIntegration, parseAgentName, } from '../../services/agentInstall.js';
|
|
9
10
|
import { ensureBabelPlugin, writeSidTypes } from '../../services/scaffold.js';
|
|
10
11
|
import { runSyncEngine } from '../../services/syncEngine.js';
|
|
11
12
|
import { renderReport } from '../../ui/report.js';
|
|
12
13
|
import { cliOrigin } from '../../version.js';
|
|
14
|
+
import { renderInstallOutcomes } from './agentImpl.js';
|
|
13
15
|
import { askSecret } from './createImpl.js';
|
|
14
16
|
export async function runInit(opts) {
|
|
15
17
|
const root = process.cwd();
|
|
@@ -19,6 +21,7 @@ export async function runInit(opts) {
|
|
|
19
21
|
if (existsSync(configPath(root))) {
|
|
20
22
|
throw new Error('this app is already linked (.mapples/config.json exists) — run `mapples sync`');
|
|
21
23
|
}
|
|
24
|
+
const agent = parseAgentName(opts.agent);
|
|
22
25
|
const secret = await askSecret(opts);
|
|
23
26
|
const apiUrl = resolveApiUrl({ apiUrl: opts.apiUrl, denv: opts.denv });
|
|
24
27
|
const { projectId, name } = await resolveProject(apiUrl, secret);
|
|
@@ -42,6 +45,17 @@ export async function runInit(opts) {
|
|
|
42
45
|
console.log(chalk.yellow(` ⚠ add 'babel-plugin-mapples-sid' to the plugins of your babel.config.js (not edited automatically)`));
|
|
43
46
|
}
|
|
44
47
|
console.log(chalk.gray(` ℹ ensure mapples/sid.d.ts is included by your tsconfig (add it to "include" if needed)`));
|
|
48
|
+
let mcpSnippet = null;
|
|
49
|
+
if (agent === 'claude') {
|
|
50
|
+
const install = installClaudeIntegration(root, {
|
|
51
|
+
apiUrl,
|
|
52
|
+
routesDir: DEFAULT_ROUTES_DIR,
|
|
53
|
+
pagesDir: DEFAULT_PAGES_DIR,
|
|
54
|
+
});
|
|
55
|
+
for (const line of renderInstallOutcomes(install.outcomes))
|
|
56
|
+
console.log(line);
|
|
57
|
+
mcpSnippet = install.mcpSnippet;
|
|
58
|
+
}
|
|
45
59
|
const client = new JpatchClient({
|
|
46
60
|
baseUrl: apiUrl,
|
|
47
61
|
assetsBaseUrl: assetUrlFor(apiUrl),
|
|
@@ -58,5 +72,10 @@ export async function runInit(opts) {
|
|
|
58
72
|
throw err;
|
|
59
73
|
console.log(chalk.yellow(' offline — run `mapples sync` once you are online'));
|
|
60
74
|
}
|
|
75
|
+
if (agent === 'claude') {
|
|
76
|
+
if (mcpSnippet)
|
|
77
|
+
console.log(['', 'Add this to your .mcp.json:', mcpSnippet].join('\n'));
|
|
78
|
+
console.log(['', ...claudeNextSteps(null)].join('\n'));
|
|
79
|
+
}
|
|
61
80
|
}
|
|
62
81
|
//# sourceMappingURL=initImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/initImpl.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"initImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/initImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { runSyncEngine } from '../../services/syncEngine.js';
|
|
3
|
+
import { touchAgentLease } from '../../services/agentLease.js';
|
|
3
4
|
import { clientForApp } from '../../services/clientFactory.js';
|
|
4
5
|
import { readHead } from '../../project/head.js';
|
|
5
6
|
import { emptyReport, renderReport } from '../../ui/report.js';
|
|
@@ -7,6 +8,8 @@ export async function runSync(opts) {
|
|
|
7
8
|
const root = process.cwd();
|
|
8
9
|
const client = clientForApp(root, opts);
|
|
9
10
|
const adopt = opts.adopt !== false;
|
|
11
|
+
const leaseNotes = emptyReport();
|
|
12
|
+
await touchAgentLease(root, leaseNotes, opts);
|
|
10
13
|
// Adoption goes first once the project has a base: a new component file
|
|
11
14
|
// and the managed page that already uses it then link in the same run
|
|
12
15
|
// (the merge tags the usage as an instance of the component just adopted).
|
|
@@ -28,13 +31,16 @@ export async function runSync(opts) {
|
|
|
28
31
|
const { proposeAdoptions } = await import('../../services/adoptService.js');
|
|
29
32
|
await proposeAdoptions({ root, client, report, yes: opts.yes === true });
|
|
30
33
|
}
|
|
34
|
+
await touchAgentLease(root, leaseNotes, opts);
|
|
35
|
+
report.notes.push(...leaseNotes.notes);
|
|
36
|
+
const exitCode = report.conflicts.length > 0 ? 2 : 0;
|
|
37
|
+
if (exitCode !== 0)
|
|
38
|
+
process.exitCode = exitCode;
|
|
31
39
|
if (opts.json === true) {
|
|
32
|
-
console.log(JSON.stringify(report, null, 2));
|
|
40
|
+
console.log(JSON.stringify({ ...report, exitCode }, null, 2));
|
|
33
41
|
return;
|
|
34
42
|
}
|
|
35
43
|
console.log(chalk.bold('\nmapples sync'));
|
|
36
44
|
console.log(renderReport(report));
|
|
37
|
-
if (report.conflicts.length > 0)
|
|
38
|
-
process.exitCode = 2;
|
|
39
45
|
}
|
|
40
46
|
//# sourceMappingURL=syncImpl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/syncImpl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAEhF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA6B;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"syncImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/syncImpl.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -5,6 +5,7 @@ export function registerInit(program) {
|
|
|
5
5
|
.description('Link an existing Expo app to a Mapples project')
|
|
6
6
|
.option('--secret <secret>', 'project API secret (Creator: Project → Settings)')
|
|
7
7
|
.option('--api-url <url>', 'Mapples API base URL')
|
|
8
|
+
.option('--agent <name>', 'also set up an AI agent (claude = Claude Code skills + .mcp.json)')
|
|
8
9
|
.addOption(new Option('--denv <env>').hideHelp()) // internal: dev|staging|prod
|
|
9
10
|
.option('--json', 'machine-readable output')
|
|
10
11
|
.action(async (opts) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;SACjD,SAAS,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,6BAA6B;SAC9E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAE,EAAE;QAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;SACjD,MAAM,CAAC,gBAAgB,EAAE,mEAAmE,CAAC;SAC7F,SAAS,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,6BAA6B;SAC9E,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAE,EAAE;QAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACvD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,16 +6,27 @@ import { registerInit } from './commands/init.js';
|
|
|
6
6
|
import { registerSync } from './commands/sync.js';
|
|
7
7
|
import { registerAdopt } from './commands/adopt.js';
|
|
8
8
|
import { registerDoctor } from './commands/doctor.js';
|
|
9
|
+
import { registerAgent } from './commands/agent.js';
|
|
9
10
|
const program = new Command();
|
|
10
11
|
program
|
|
11
12
|
.name('mapples')
|
|
12
13
|
.description('Mapples CLI — two-way code sync between Mapples Creator and your Expo project')
|
|
13
|
-
.version(cliVersion())
|
|
14
|
+
.version(cliVersion())
|
|
15
|
+
.addHelpText('after', [
|
|
16
|
+
'',
|
|
17
|
+
'Exit codes:',
|
|
18
|
+
' 0 ok',
|
|
19
|
+
' 1 error',
|
|
20
|
+
' 2 sync finished with conflicts (files deprecated, never overwritten)',
|
|
21
|
+
' 3 agent lease gone (session expired, released or disconnected in Creator)',
|
|
22
|
+
' 4 project busy (another agent session holds it — `agent start --takeover`)',
|
|
23
|
+
].join('\n'));
|
|
14
24
|
registerCreate(program);
|
|
15
25
|
registerInit(program);
|
|
16
26
|
registerSync(program);
|
|
17
27
|
registerAdopt(program);
|
|
18
28
|
registerDoctor(program);
|
|
29
|
+
registerAgent(program);
|
|
19
30
|
program.parseAsync(process.argv).catch((err) => {
|
|
20
31
|
// Top-level failure surface: print and exit non-zero. Never swallow.
|
|
21
32
|
console.error(err instanceof Error ? err.message : String(err));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,+EAA+E,CAAC;KAC5F,OAAO,CAAC,UAAU,EAAE,CAAC;KACrB,WAAW,CACV,OAAO,EACP;IACE,EAAE;IACF,aAAa;IACb,SAAS;IACT,YAAY;IACZ,yEAAyE;IACzE,8EAA8E;IAC9E,+EAA+E;CAChF,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AAEJ,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AAEvB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,qEAAqE;IACrE,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AgentStepStatus } from '../api/agent.js';
|
|
2
|
+
export interface AgentState {
|
|
3
|
+
schema: 1;
|
|
4
|
+
uuid: string;
|
|
5
|
+
label: string;
|
|
6
|
+
startedAt: string;
|
|
7
|
+
apiUrl: string;
|
|
8
|
+
projectId: string;
|
|
9
|
+
heartbeatSeconds: number;
|
|
10
|
+
heartbeatPid?: number;
|
|
11
|
+
lastStep?: {
|
|
12
|
+
index: number;
|
|
13
|
+
title: string;
|
|
14
|
+
status: AgentStepStatus;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare const AGENT_STATE_FILE = "agent.json";
|
|
18
|
+
export declare const AGENT_STATE_GITIGNORE = ".mapples/agent.json";
|
|
19
|
+
export declare function agentStatePath(root: string): string;
|
|
20
|
+
export declare function readAgentState(root: string): AgentState | null;
|
|
21
|
+
export declare function writeAgentState(root: string, state: AgentState): void;
|
|
22
|
+
export declare function clearAgentState(root: string): boolean;
|
|
23
|
+
/** The commit summary Creator's history shows for syncs made during a run. */
|
|
24
|
+
export declare function agentCommitSummary(state: AgentState): string;
|