mapples 0.2.0-beta.5 → 0.2.0-beta.7

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 (84) hide show
  1. package/README.md +42 -0
  2. package/dist/api/agent.d.ts +84 -0
  3. package/dist/api/agent.js +92 -0
  4. package/dist/api/agent.js.map +1 -0
  5. package/dist/api/client.d.ts +3 -0
  6. package/dist/api/client.js +2 -0
  7. package/dist/api/client.js.map +1 -1
  8. package/dist/api/commit.js +1 -0
  9. package/dist/api/commit.js.map +1 -1
  10. package/dist/api/errors.js +4 -2
  11. package/dist/api/errors.js.map +1 -1
  12. package/dist/api/objects.d.ts +12 -0
  13. package/dist/api/objects.js +2 -0
  14. package/dist/api/objects.js.map +1 -1
  15. package/dist/commands/agent.d.ts +2 -0
  16. package/dist/commands/agent.js +76 -0
  17. package/dist/commands/agent.js.map +1 -0
  18. package/dist/commands/create.js +1 -0
  19. package/dist/commands/create.js.map +1 -1
  20. package/dist/commands/impl/adoptImpl.js +3 -0
  21. package/dist/commands/impl/adoptImpl.js.map +1 -1
  22. package/dist/commands/impl/agentImpl.d.ts +10 -0
  23. package/dist/commands/impl/agentImpl.js +349 -0
  24. package/dist/commands/impl/agentImpl.js.map +1 -0
  25. package/dist/commands/impl/createImpl.js +19 -0
  26. package/dist/commands/impl/createImpl.js.map +1 -1
  27. package/dist/commands/impl/initImpl.js +19 -0
  28. package/dist/commands/impl/initImpl.js.map +1 -1
  29. package/dist/commands/impl/syncImpl.js +9 -3
  30. package/dist/commands/impl/syncImpl.js.map +1 -1
  31. package/dist/commands/init.js +1 -0
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/index.js +12 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/project/agentState.d.ts +24 -0
  36. package/dist/project/agentState.js +42 -0
  37. package/dist/project/agentState.js.map +1 -0
  38. package/dist/project/secret.d.ts +6 -2
  39. package/dist/project/secret.js +11 -5
  40. package/dist/project/secret.js.map +1 -1
  41. package/dist/services/agentInstall.d.ts +35 -0
  42. package/dist/services/agentInstall.js +180 -0
  43. package/dist/services/agentInstall.js.map +1 -0
  44. package/dist/services/agentLease.d.ts +2 -0
  45. package/dist/services/agentLease.js +32 -0
  46. package/dist/services/agentLease.js.map +1 -0
  47. package/dist/services/clientFactory.d.ts +2 -0
  48. package/dist/services/clientFactory.js +16 -1
  49. package/dist/services/clientFactory.js.map +1 -1
  50. package/dist/services/scaffold.js +4 -0
  51. package/dist/services/scaffold.js.map +1 -1
  52. package/dist/services/syncEngine.js +51 -18
  53. package/dist/services/syncEngine.js.map +1 -1
  54. package/dist/style/theme.js +17 -1
  55. package/dist/style/theme.js.map +1 -1
  56. package/dist/types.d.ts +2 -0
  57. package/dist/types.js.map +1 -1
  58. package/package.json +3 -3
  59. package/templates/app.json +0 -1
  60. package/templates/claude/CLAUDE.md +7 -0
  61. package/templates/claude/mapples.md +118 -0
  62. package/templates/claude/mcp.json +11 -0
  63. package/templates/claude/skills/mapples-conventions/SKILL.md +136 -0
  64. package/templates/claude/skills/mapples-design/SKILL.md +218 -0
  65. package/templates/claude/skills/mapples-design/reference/component-library.md +128 -0
  66. package/templates/claude/skills/mapples-design/reference/design-tokens.md +132 -0
  67. package/templates/claude/skills/mapples-design/reference/layout-contract.md +227 -0
  68. package/templates/claude/skills/mapples-design/reference/lint-checklist.md +51 -0
  69. package/templates/claude/skills/mapples-design/reference/plan.md +95 -0
  70. package/templates/claude/skills/mapples-design/reference/playbooks/empty-states.md +14 -0
  71. package/templates/claude/skills/mapples-design/reference/playbooks/forms-and-auth.md +22 -0
  72. package/templates/claude/skills/mapples-design/reference/playbooks/home-dashboard.md +14 -0
  73. package/templates/claude/skills/mapples-design/reference/playbooks/list-and-detail.md +18 -0
  74. package/templates/claude/skills/mapples-design/reference/playbooks/microcopy.md +20 -0
  75. package/templates/claude/skills/mapples-design/reference/playbooks/navigation-chrome.md +21 -0
  76. package/templates/claude/skills/mapples-design/reference/playbooks/onboarding-flow.md +15 -0
  77. package/templates/claude/skills/mapples-design/reference/playbooks/screen-flow-wiring.md +37 -0
  78. package/templates/claude/skills/mapples-design/reference/playbooks/settings-profile.md +16 -0
  79. package/templates/claude/skills/mapples-design/reference/playbooks/stats-and-progress.md +17 -0
  80. package/templates/claude/skills/mapples-design/reference/playbooks/visual-hierarchy.md +18 -0
  81. package/templates/claude/skills/mapples-design/reference/style-guides.md +92 -0
  82. package/templates/claude/skills/mapples-sync/SKILL.md +93 -0
  83. package/templates/gitignore +2 -0
  84. package/templates/package.json +12 -10
@@ -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":"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"}
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;IAEnC,wEAAwE;IACxE,sEAAsE;IACtE,2EAA2E;IAC3E,iEAAiE;IACjE,IAAI,QAAQ,GAAsB,IAAI,CAAC;IACvC,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC5E,QAAQ,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAErD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC;IACzC,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QACjB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC5E,MAAM,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"syncImpl.js","sourceRoot":"","sources":["../../../src/commands/impl/syncImpl.ts"],"names":[],"mappings":"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"}
@@ -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;AAEtD,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,CAAC;AAEzB,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;AAExB,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"}
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;