@trenchwork/erosolar 1.1.28 → 1.1.29

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.

Potentially problematic release.


This version of @trenchwork/erosolar might be problematic. Click here for more details.

Files changed (94) hide show
  1. package/SECURITY.md +35 -0
  2. package/dist/bin/deepseek.js +14 -8
  3. package/dist/bin/deepseek.js.map +1 -1
  4. package/dist/capabilities/index.d.ts +6 -0
  5. package/dist/capabilities/index.d.ts.map +1 -1
  6. package/dist/capabilities/index.js +6 -0
  7. package/dist/capabilities/index.js.map +1 -1
  8. package/dist/capabilities/interactionCapability.d.ts +6 -0
  9. package/dist/capabilities/interactionCapability.d.ts.map +1 -0
  10. package/dist/capabilities/interactionCapability.js +17 -0
  11. package/dist/capabilities/interactionCapability.js.map +1 -0
  12. package/dist/capabilities/mcpCapability.d.ts.map +1 -1
  13. package/dist/capabilities/mcpCapability.js +4 -2
  14. package/dist/capabilities/mcpCapability.js.map +1 -1
  15. package/dist/capabilities/monitorCapability.d.ts +6 -0
  16. package/dist/capabilities/monitorCapability.d.ts.map +1 -0
  17. package/dist/capabilities/monitorCapability.js +19 -0
  18. package/dist/capabilities/monitorCapability.js.map +1 -0
  19. package/dist/capabilities/planModeCapability.d.ts +6 -0
  20. package/dist/capabilities/planModeCapability.d.ts.map +1 -0
  21. package/dist/capabilities/planModeCapability.js +16 -0
  22. package/dist/capabilities/planModeCapability.js.map +1 -0
  23. package/dist/capabilities/scheduleCapability.d.ts +6 -0
  24. package/dist/capabilities/scheduleCapability.d.ts.map +1 -0
  25. package/dist/capabilities/scheduleCapability.js +16 -0
  26. package/dist/capabilities/scheduleCapability.js.map +1 -0
  27. package/dist/capabilities/triggerCapability.d.ts +6 -0
  28. package/dist/capabilities/triggerCapability.d.ts.map +1 -0
  29. package/dist/capabilities/triggerCapability.js +16 -0
  30. package/dist/capabilities/triggerCapability.js.map +1 -0
  31. package/dist/capabilities/worktreeCapability.d.ts +6 -0
  32. package/dist/capabilities/worktreeCapability.d.ts.map +1 -0
  33. package/dist/capabilities/worktreeCapability.js +16 -0
  34. package/dist/capabilities/worktreeCapability.js.map +1 -0
  35. package/dist/contracts/agent-schemas.json +1 -1
  36. package/dist/core/projectTracker.d.ts +96 -0
  37. package/dist/core/projectTracker.d.ts.map +1 -0
  38. package/dist/core/projectTracker.js +275 -0
  39. package/dist/core/projectTracker.js.map +1 -0
  40. package/dist/headless/interactiveShell.js +35 -0
  41. package/dist/headless/interactiveShell.js.map +1 -1
  42. package/dist/plugins/tools/mcp/mcpClient.d.ts +10 -0
  43. package/dist/plugins/tools/mcp/mcpClient.d.ts.map +1 -1
  44. package/dist/plugins/tools/mcp/mcpClient.js +6 -0
  45. package/dist/plugins/tools/mcp/mcpClient.js.map +1 -1
  46. package/dist/runtime/node.d.ts +2 -0
  47. package/dist/runtime/node.d.ts.map +1 -1
  48. package/dist/runtime/node.js +28 -28
  49. package/dist/runtime/node.js.map +1 -1
  50. package/dist/runtime/profileGates.d.ts +19 -0
  51. package/dist/runtime/profileGates.d.ts.map +1 -0
  52. package/dist/runtime/profileGates.js +23 -0
  53. package/dist/runtime/profileGates.js.map +1 -0
  54. package/dist/tools/interactionTools.d.ts +16 -0
  55. package/dist/tools/interactionTools.d.ts.map +1 -0
  56. package/dist/tools/interactionTools.js +207 -0
  57. package/dist/tools/interactionTools.js.map +1 -0
  58. package/dist/tools/monitorTools.d.ts +16 -0
  59. package/dist/tools/monitorTools.d.ts.map +1 -0
  60. package/dist/tools/monitorTools.js +159 -0
  61. package/dist/tools/monitorTools.js.map +1 -0
  62. package/dist/tools/planModeTools.d.ts +32 -0
  63. package/dist/tools/planModeTools.d.ts.map +1 -0
  64. package/dist/tools/planModeTools.js +200 -0
  65. package/dist/tools/planModeTools.js.map +1 -0
  66. package/dist/tools/scheduleTools.d.ts +39 -0
  67. package/dist/tools/scheduleTools.d.ts.map +1 -0
  68. package/dist/tools/scheduleTools.js +182 -0
  69. package/dist/tools/scheduleTools.js.map +1 -0
  70. package/dist/tools/triggerTools.d.ts +28 -0
  71. package/dist/tools/triggerTools.d.ts.map +1 -0
  72. package/dist/tools/triggerTools.js +210 -0
  73. package/dist/tools/triggerTools.js.map +1 -0
  74. package/dist/tools/worktreeTools.d.ts +21 -0
  75. package/dist/tools/worktreeTools.d.ts.map +1 -0
  76. package/dist/tools/worktreeTools.js +158 -0
  77. package/dist/tools/worktreeTools.js.map +1 -0
  78. package/dist/ui/ink/App.d.ts.map +1 -1
  79. package/dist/ui/ink/App.js +2 -1
  80. package/dist/ui/ink/App.js.map +1 -1
  81. package/dist/ui/ink/ChatStatic.d.ts.map +1 -1
  82. package/dist/ui/ink/ChatStatic.js +7 -6
  83. package/dist/ui/ink/ChatStatic.js.map +1 -1
  84. package/dist/ui/ink/StatusLine.d.ts.map +1 -1
  85. package/dist/ui/ink/StatusLine.js +2 -1
  86. package/dist/ui/ink/StatusLine.js.map +1 -1
  87. package/dist/ui/theme.d.ts.map +1 -1
  88. package/dist/ui/theme.js +31 -29
  89. package/dist/ui/theme.js.map +1 -1
  90. package/dist/utils/lambdaClient.d.ts +35 -0
  91. package/dist/utils/lambdaClient.d.ts.map +1 -0
  92. package/dist/utils/lambdaClient.js +81 -0
  93. package/dist/utils/lambdaClient.js.map +1 -0
  94. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planModeTools.js","sourceRoot":"","sources":["../../src/tools/planModeTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ScheduleWakeup + Cron* — Claude-Code-parity scheduling tools.
3
+ *
4
+ * ScheduleWakeup: in-process self-pacing. The agent calls this to
5
+ * resume itself after N seconds, e.g. while waiting for a build to
6
+ * finish or polling for an external state change. The wake-up arrives
7
+ * as a virtual user message at the scheduled time.
8
+ *
9
+ * CronCreate / CronList / CronDelete: persisted recurring schedule.
10
+ * Records are written to <workingDir>/.erosolar/cron.json. The
11
+ * portal mirrors them to Firestore for cross-device visibility, and
12
+ * a server-side worker (AWS Lambda EventBridge) actually fires them.
13
+ *
14
+ * The CLI does not run the cron loop itself — it only manages the
15
+ * schedule entries. Treat this tool as the registration surface.
16
+ */
17
+ import type { ToolDefinition } from '../core/toolRuntime.js';
18
+ export interface CronEntry {
19
+ id: string;
20
+ prompt: string;
21
+ schedule: string;
22
+ enabled: boolean;
23
+ createdAt: string;
24
+ updatedAt: string;
25
+ lastRunAt?: string;
26
+ notes?: string;
27
+ }
28
+ interface PendingWakeup {
29
+ id: string;
30
+ delaySeconds: number;
31
+ reason: string;
32
+ scheduledAt: string;
33
+ }
34
+ export declare function isPlausibleCron(spec: string): boolean;
35
+ export declare function getPendingWakeups(): readonly PendingWakeup[];
36
+ export declare function clearPendingWakeups(): void;
37
+ export declare function createScheduleTools(workingDir: string): ToolDefinition[];
38
+ export {};
39
+ //# sourceMappingURL=scheduleTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduleTools.d.ts","sourceRoot":"","sources":["../../src/tools/scheduleTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAkCD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED,wBAAgB,iBAAiB,IAAI,SAAS,aAAa,EAAE,CAE5D;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAiHxE"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * ScheduleWakeup + Cron* — Claude-Code-parity scheduling tools.
3
+ *
4
+ * ScheduleWakeup: in-process self-pacing. The agent calls this to
5
+ * resume itself after N seconds, e.g. while waiting for a build to
6
+ * finish or polling for an external state change. The wake-up arrives
7
+ * as a virtual user message at the scheduled time.
8
+ *
9
+ * CronCreate / CronList / CronDelete: persisted recurring schedule.
10
+ * Records are written to <workingDir>/.erosolar/cron.json. The
11
+ * portal mirrors them to Firestore for cross-device visibility, and
12
+ * a server-side worker (AWS Lambda EventBridge) actually fires them.
13
+ *
14
+ * The CLI does not run the cron loop itself — it only manages the
15
+ * schedule entries. Treat this tool as the registration surface.
16
+ */
17
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
18
+ import { join } from 'node:path';
19
+ import { callLambda } from '../utils/lambdaClient.js';
20
+ const PENDING_WAKEUPS = new Map();
21
+ function cronStorePath(workingDir) {
22
+ return join(workingDir, '.erosolar', 'cron.json');
23
+ }
24
+ function readCron(workingDir) {
25
+ const path = cronStorePath(workingDir);
26
+ if (!existsSync(path))
27
+ return [];
28
+ try {
29
+ const data = JSON.parse(readFileSync(path, 'utf-8'));
30
+ if (!Array.isArray(data))
31
+ return [];
32
+ return data;
33
+ }
34
+ catch {
35
+ return [];
36
+ }
37
+ }
38
+ function writeCron(workingDir, entries) {
39
+ const dir = join(workingDir, '.erosolar');
40
+ if (!existsSync(dir))
41
+ mkdirSync(dir, { recursive: true });
42
+ writeFileSync(cronStorePath(workingDir), JSON.stringify(entries, null, 2), 'utf-8');
43
+ }
44
+ function safeId(input, prefix) {
45
+ const s = typeof input === 'string' ? input.trim() : '';
46
+ if (!s)
47
+ return `${prefix}-${Date.now().toString(36)}`;
48
+ return s.replace(/[^a-zA-Z0-9_-]/g, '-').slice(0, 96);
49
+ }
50
+ const CRON_FIELD_RE = /^(\*|[0-9*/,-]+)$/;
51
+ export function isPlausibleCron(spec) {
52
+ const fields = spec.trim().split(/\s+/);
53
+ if (fields.length !== 5 && fields.length !== 6)
54
+ return false;
55
+ return fields.every((f) => CRON_FIELD_RE.test(f));
56
+ }
57
+ export function getPendingWakeups() {
58
+ return Array.from(PENDING_WAKEUPS.values());
59
+ }
60
+ export function clearPendingWakeups() {
61
+ PENDING_WAKEUPS.clear();
62
+ }
63
+ export function createScheduleTools(workingDir) {
64
+ return [
65
+ {
66
+ name: 'ScheduleWakeup',
67
+ description: 'Schedule the agent to resume itself after a delay (60..3600 seconds). ' +
68
+ 'Use during long-running waits — polling a build, watching for state ' +
69
+ 'changes — instead of busy-loops. The runtime fires the next turn at ' +
70
+ 'the scheduled time with `prompt` as the resumed input.',
71
+ parameters: {
72
+ type: 'object',
73
+ properties: {
74
+ delaySeconds: { type: 'number', description: 'Seconds to sleep, 60..3600.' },
75
+ reason: { type: 'string', description: 'Short telemetry-friendly reason.' },
76
+ prompt: { type: 'string', description: 'Prompt to fire on wake.' },
77
+ },
78
+ required: ['delaySeconds', 'reason', 'prompt'],
79
+ },
80
+ handler: async (args) => {
81
+ const delay = Math.max(60, Math.min(3600, Number(args['delaySeconds']) || 0));
82
+ const reason = String(args['reason'] ?? '').trim().slice(0, 200);
83
+ const prompt = String(args['prompt'] ?? '').trim();
84
+ if (!prompt)
85
+ return 'ScheduleWakeup requires a non-empty prompt.';
86
+ const id = `wake-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
87
+ PENDING_WAKEUPS.set(id, {
88
+ id,
89
+ delaySeconds: delay,
90
+ reason,
91
+ scheduledAt: new Date(Date.now() + delay * 1000).toISOString(),
92
+ });
93
+ return `Wakeup "${id}" scheduled for ${delay}s (reason: ${reason || 'n/a'}).`;
94
+ },
95
+ },
96
+ {
97
+ name: 'CronCreate',
98
+ description: 'Register a recurring scheduled prompt. The schedule is a 5- or ' +
99
+ '6-field cron expression (min hour dom mon dow [year]). The actual ' +
100
+ 'firing happens server-side via AWS EventBridge once the entry is ' +
101
+ 'synced to Firestore from the portal — the CLI just writes the spec.',
102
+ parameters: {
103
+ type: 'object',
104
+ properties: {
105
+ id: { type: 'string', description: 'Stable id (alnum/-/_, ≤96 chars).' },
106
+ schedule: { type: 'string', description: 'Cron expression (5 or 6 fields).' },
107
+ prompt: { type: 'string', description: 'Prompt that fires on each tick.' },
108
+ enabled: { type: 'boolean', description: 'Defaults to true.' },
109
+ notes: { type: 'string' },
110
+ },
111
+ required: ['schedule', 'prompt'],
112
+ },
113
+ handler: async (args) => {
114
+ const schedule = String(args['schedule'] ?? '').trim();
115
+ if (!isPlausibleCron(schedule)) {
116
+ return `CronCreate rejected: "${schedule}" is not a valid 5/6-field cron expression.`;
117
+ }
118
+ const prompt = String(args['prompt'] ?? '').trim();
119
+ if (!prompt)
120
+ return 'CronCreate requires a non-empty prompt.';
121
+ const id = safeId(args['id'], 'cron');
122
+ const entries = readCron(workingDir);
123
+ const idx = entries.findIndex((e) => e.id === id);
124
+ const now = new Date().toISOString();
125
+ const enabled = args['enabled'] === undefined ? true : Boolean(args['enabled']);
126
+ const notes = typeof args['notes'] === 'string' ? args['notes'] : undefined;
127
+ const entry = idx >= 0
128
+ ? { ...entries[idx], schedule, prompt, enabled, updatedAt: now, ...(notes !== undefined ? { notes } : {}) }
129
+ : { id, schedule, prompt, enabled, createdAt: now, updatedAt: now, ...(notes ? { notes } : {}) };
130
+ if (idx >= 0)
131
+ entries[idx] = entry;
132
+ else
133
+ entries.push(entry);
134
+ writeCron(workingDir, entries);
135
+ // Best-effort mirror to Firestore via Lambda so the server-side
136
+ // tick (cliCronTick) can fire entries even when the CLI is offline.
137
+ // A failure here is non-fatal: the local entry is still authoritative.
138
+ const mirror = await callLambda('cliCronUpsert', {
139
+ id, schedule, prompt, enabled, ...(notes !== undefined ? { notes } : {}),
140
+ });
141
+ const mirrorMsg = mirror.ok ? ' (mirrored to backend)' : ` (local-only: ${mirror.error ?? 'unauthenticated'})`;
142
+ return `Cron "${id}" ${idx >= 0 ? 'updated' : 'created'}: ${schedule} — ${prompt.slice(0, 60)}${mirrorMsg}`;
143
+ },
144
+ },
145
+ {
146
+ name: 'CronList',
147
+ description: 'List registered cron entries (does not include external/portal-only entries).',
148
+ parameters: { type: 'object', properties: {} },
149
+ handler: async () => {
150
+ const entries = readCron(workingDir);
151
+ if (entries.length === 0)
152
+ return 'No cron entries.';
153
+ return entries
154
+ .map((e) => `${e.id} [${e.enabled ? 'on' : 'off'}] ${e.schedule} — ${e.prompt.slice(0, 80)}`)
155
+ .join('\n');
156
+ },
157
+ },
158
+ {
159
+ name: 'CronDelete',
160
+ description: 'Delete a cron entry by id.',
161
+ parameters: {
162
+ type: 'object',
163
+ properties: { id: { type: 'string' } },
164
+ required: ['id'],
165
+ },
166
+ handler: async (args) => {
167
+ const id = String(args['id'] ?? '').trim();
168
+ if (!id)
169
+ return 'CronDelete requires id.';
170
+ const entries = readCron(workingDir);
171
+ const next = entries.filter((e) => e.id !== id);
172
+ if (next.length === entries.length)
173
+ return `No cron entry "${id}".`;
174
+ writeCron(workingDir, next);
175
+ const mirror = await callLambda('cliCronDelete', { id });
176
+ const mirrorMsg = mirror.ok ? ' (backend updated)' : ` (local-only: ${mirror.error ?? 'unauthenticated'})`;
177
+ return `Cron "${id}" deleted${mirrorMsg}.`;
178
+ },
179
+ },
180
+ ];
181
+ }
182
+ //# sourceMappingURL=scheduleTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduleTools.js","sourceRoot":"","sources":["../../src/tools/scheduleTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * RemoteTrigger — Claude-Code-parity webhook ingest.
3
+ *
4
+ * The agent calls RemoteTriggerCreate to register a deliverable
5
+ * trigger; the user (or any external caller) can POST to the
6
+ * portal-relayed URL with a JSON body, which lands in
7
+ * <workingDir>/.erosolar/triggers/<id>.json. RemoteTriggerWait blocks
8
+ * the agent until the file appears (or a timeout is hit). Used for
9
+ * "page me when this CI finishes" / "wake me when the user clicks".
10
+ *
11
+ * The actual external-facing URL is provisioned by AWS Lambda; the
12
+ * CLI's role is to register the trigger id + description and to
13
+ * watch the local drop file. Synthetic local-only triggers (for
14
+ * tests and offline use) just rely on a file write.
15
+ */
16
+ import type { ToolDefinition } from '../core/toolRuntime.js';
17
+ export interface TriggerRecord {
18
+ id: string;
19
+ description?: string;
20
+ createdAt: string;
21
+ payload?: unknown;
22
+ delivered: boolean;
23
+ deliveredAt?: string;
24
+ }
25
+ export declare function listTriggers(workingDir: string): TriggerRecord[];
26
+ export declare function deliverTrigger(workingDir: string, id: string, payload: unknown): TriggerRecord;
27
+ export declare function createTriggerTools(workingDir: string): ToolDefinition[];
28
+ //# sourceMappingURL=triggerTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggerTools.d.ts","sourceRoot":"","sources":["../../src/tools/triggerTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAU7D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAyBD,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE,CAahE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAgB9F;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAsIvE"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * RemoteTrigger — Claude-Code-parity webhook ingest.
3
+ *
4
+ * The agent calls RemoteTriggerCreate to register a deliverable
5
+ * trigger; the user (or any external caller) can POST to the
6
+ * portal-relayed URL with a JSON body, which lands in
7
+ * <workingDir>/.erosolar/triggers/<id>.json. RemoteTriggerWait blocks
8
+ * the agent until the file appears (or a timeout is hit). Used for
9
+ * "page me when this CI finishes" / "wake me when the user clicks".
10
+ *
11
+ * The actual external-facing URL is provisioned by AWS Lambda; the
12
+ * CLI's role is to register the trigger id + description and to
13
+ * watch the local drop file. Synthetic local-only triggers (for
14
+ * tests and offline use) just rely on a file write.
15
+ */
16
+ import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
17
+ import { join } from 'node:path';
18
+ import { callLambda } from '../utils/lambdaClient.js';
19
+ function triggerStore(workingDir) {
20
+ return join(workingDir, '.erosolar', 'triggers');
21
+ }
22
+ function triggerPath(workingDir, id) {
23
+ return join(triggerStore(workingDir), `${id}.json`);
24
+ }
25
+ function safeId(input) {
26
+ const s = typeof input === 'string' ? input.trim() : '';
27
+ if (!s)
28
+ return `trig-${Date.now().toString(36)}`;
29
+ return s.replace(/[^a-zA-Z0-9_-]/g, '-').slice(0, 96);
30
+ }
31
+ function ensureStore(workingDir) {
32
+ const dir = triggerStore(workingDir);
33
+ if (!existsSync(dir))
34
+ mkdirSync(dir, { recursive: true });
35
+ }
36
+ function nowIso() {
37
+ return new Date().toISOString();
38
+ }
39
+ export function listTriggers(workingDir) {
40
+ const dir = triggerStore(workingDir);
41
+ if (!existsSync(dir))
42
+ return [];
43
+ const out = [];
44
+ for (const name of readdirSync(dir)) {
45
+ if (!name.endsWith('.json'))
46
+ continue;
47
+ try {
48
+ out.push(JSON.parse(readFileSync(join(dir, name), 'utf-8')));
49
+ }
50
+ catch {
51
+ // Skip malformed.
52
+ }
53
+ }
54
+ return out.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
55
+ }
56
+ export function deliverTrigger(workingDir, id, payload) {
57
+ ensureStore(workingDir);
58
+ const path = triggerPath(workingDir, id);
59
+ const existing = existsSync(path)
60
+ ? JSON.parse(readFileSync(path, 'utf-8'))
61
+ : { id, createdAt: nowIso() };
62
+ const record = {
63
+ id: existing.id ?? id,
64
+ description: existing.description,
65
+ createdAt: existing.createdAt ?? nowIso(),
66
+ payload,
67
+ delivered: true,
68
+ deliveredAt: nowIso(),
69
+ };
70
+ writeFileSync(path, JSON.stringify(record, null, 2), 'utf-8');
71
+ return record;
72
+ }
73
+ export function createTriggerTools(workingDir) {
74
+ return [
75
+ {
76
+ name: 'RemoteTriggerCreate',
77
+ description: 'Register a webhook-style trigger. Returns a stable id; an external ' +
78
+ 'caller can deliver a payload by writing JSON to ' +
79
+ '`.erosolar/triggers/<id>.json` (or POSTing through the AWS Lambda ' +
80
+ 'webhook relay if configured). RemoteTriggerWait blocks until the ' +
81
+ 'payload arrives.',
82
+ parameters: {
83
+ type: 'object',
84
+ properties: {
85
+ id: { type: 'string', description: 'Stable id (alnum/-/_, ≤96 chars).' },
86
+ description: { type: 'string', description: 'Why this trigger exists.' },
87
+ },
88
+ },
89
+ handler: async (args) => {
90
+ ensureStore(workingDir);
91
+ const id = safeId(args['id']);
92
+ const path = triggerPath(workingDir, id);
93
+ if (!existsSync(path)) {
94
+ const record = {
95
+ id,
96
+ description: typeof args['description'] === 'string' ? args['description'] : undefined,
97
+ createdAt: nowIso(),
98
+ delivered: false,
99
+ };
100
+ writeFileSync(path, JSON.stringify(record, null, 2), 'utf-8');
101
+ }
102
+ const mirror = await callLambda('cliTriggerRegister', {
103
+ id,
104
+ description: typeof args['description'] === 'string' ? args['description'] : undefined,
105
+ });
106
+ const remoteMsg = mirror.ok
107
+ ? `\nWebhook URL: POST ${process.env['EROSOLAR_LAMBDA_BASE'] ?? 'https://cfqeqx4lt9.execute-api.us-east-1.amazonaws.com'}/api/cliWebhook with body { uid, triggerId: "${id}", payload: ... }`
108
+ : `\nRemote registration unavailable (${mirror.error ?? 'unauthenticated'}). Local drop file remains active.`;
109
+ return `Trigger "${id}" registered. Local drop: .erosolar/triggers/${id}.json${remoteMsg}`;
110
+ },
111
+ },
112
+ {
113
+ name: 'RemoteTriggerWait',
114
+ description: 'Wait for a trigger payload to arrive. Polls the local drop file; ' +
115
+ 'returns the payload as soon as `delivered: true` appears, or times ' +
116
+ 'out after `timeoutSeconds` (default 60, max 1800).',
117
+ parameters: {
118
+ type: 'object',
119
+ properties: {
120
+ id: { type: 'string' },
121
+ timeoutSeconds: { type: 'number', description: '1..1800. Default 60.' },
122
+ pollMs: { type: 'number', description: 'Poll interval, default 1000.' },
123
+ },
124
+ required: ['id'],
125
+ },
126
+ handler: async (args) => {
127
+ const id = safeId(args['id']);
128
+ const path = triggerPath(workingDir, id);
129
+ const timeout = Math.max(1, Math.min(1800, Number(args['timeoutSeconds']) || 60)) * 1000;
130
+ const interval = Math.max(100, Math.min(10000, Number(args['pollMs']) || 1000));
131
+ const deadline = Date.now() + timeout;
132
+ while (Date.now() < deadline) {
133
+ // Path 1: local drop file (test fixtures, offline runs).
134
+ if (existsSync(path)) {
135
+ try {
136
+ const stat = statSync(path);
137
+ if (stat.size > 0) {
138
+ const record = JSON.parse(readFileSync(path, 'utf-8'));
139
+ if (record.delivered) {
140
+ return JSON.stringify({ id, payload: record.payload, deliveredAt: record.deliveredAt, source: 'local' });
141
+ }
142
+ }
143
+ }
144
+ catch {
145
+ // Ignore transient read errors during polling.
146
+ }
147
+ }
148
+ // Path 2: Lambda relay (webhook delivered to Firestore).
149
+ const remote = await callLambda('cliTriggerPoll', { id });
150
+ if (remote.ok && remote.result?.found && remote.result.delivered) {
151
+ // Mirror the delivered payload to local for parity.
152
+ try {
153
+ writeFileSync(path, JSON.stringify({
154
+ id,
155
+ createdAt: nowIso(),
156
+ payload: remote.result.payload,
157
+ delivered: true,
158
+ deliveredAt: remote.result.deliveredAt
159
+ ? new Date(remote.result.deliveredAt).toISOString()
160
+ : nowIso(),
161
+ }, null, 2), 'utf-8');
162
+ }
163
+ catch {
164
+ // Mirror is best-effort; the JSON return below is the source of truth.
165
+ }
166
+ return JSON.stringify({
167
+ id,
168
+ payload: remote.result.payload,
169
+ deliveredAt: remote.result.deliveredAt,
170
+ source: 'webhook',
171
+ });
172
+ }
173
+ await new Promise((r) => setTimeout(r, interval));
174
+ }
175
+ return `RemoteTriggerWait timed out after ${timeout / 1000}s for "${id}".`;
176
+ },
177
+ },
178
+ {
179
+ name: 'RemoteTriggerList',
180
+ description: 'List registered triggers (delivered and pending).',
181
+ parameters: { type: 'object', properties: {} },
182
+ handler: async () => {
183
+ const items = listTriggers(workingDir);
184
+ if (items.length === 0)
185
+ return 'No triggers.';
186
+ return items
187
+ .map((t) => `${t.id} [${t.delivered ? 'delivered' : 'pending'}] ${t.description ?? ''}`)
188
+ .join('\n');
189
+ },
190
+ },
191
+ {
192
+ name: 'RemoteTriggerDelete',
193
+ description: 'Delete a trigger record.',
194
+ parameters: {
195
+ type: 'object',
196
+ properties: { id: { type: 'string' } },
197
+ required: ['id'],
198
+ },
199
+ handler: async (args) => {
200
+ const id = safeId(args['id']);
201
+ const path = triggerPath(workingDir, id);
202
+ if (!existsSync(path))
203
+ return `No trigger "${id}".`;
204
+ unlinkSync(path);
205
+ return `Trigger "${id}" deleted.`;
206
+ },
207
+ },
208
+ ];
209
+ }
210
+ //# sourceMappingURL=triggerTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggerTools.js","sourceRoot":"","sources":["../../src/tools/triggerTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * EnterWorktree / ExitWorktree — Claude-Code-parity isolation tools.
3
+ *
4
+ * Creates a temporary git worktree the agent can work in without
5
+ * disturbing the user's checkout, then cleans it up. Used by the
6
+ * sub-agent flow when `isolation: "worktree"` is requested, and
7
+ * directly by the agent for risky multi-file changes that should
8
+ * land as a single PR.
9
+ *
10
+ * Worktrees are created under <repoRoot>/.erosolar/worktrees/<id>/.
11
+ * The branch follows `erosolar/worktree/<id>` so a stale tree is
12
+ * easy to spot in `git branch`.
13
+ */
14
+ import type { ToolDefinition } from '../core/toolRuntime.js';
15
+ export declare function getWorktreeRegistry(): ReadonlyMap<string, {
16
+ path: string;
17
+ branch: string;
18
+ }>;
19
+ export declare function clearWorktreeRegistry(): void;
20
+ export declare function createWorktreeTools(workingDir: string): ToolDefinition[];
21
+ //# sourceMappingURL=worktreeTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktreeTools.d.ts","sourceRoot":"","sources":["../../src/tools/worktreeTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAwB7D,wBAAgB,mBAAmB,IAAI,WAAW,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAE3F;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAqHxE"}