tryassay 0.1.2 → 0.2.0

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/dist/cli.js CHANGED
@@ -10,6 +10,7 @@ import { regenerateCommand } from './commands/regenerate.js';
10
10
  import { remediateCommand } from './commands/remediate.js';
11
11
  import { reverseCommand } from './commands/reverse.js';
12
12
  import { assessCommand } from './commands/assess.js';
13
+ import { runtimeCommand } from './commands/runtime.js';
13
14
  const program = new Command();
14
15
  program
15
16
  .name('assay')
@@ -76,5 +77,21 @@ program
76
77
  .option('--concurrency <n>', 'Max parallel routes to process', '5')
77
78
  .option('--api-url <url>', 'API URL for publishing', 'https://tryassay.ai')
78
79
  .action(assessCommand);
80
+ // ── Runtime (Verified Agent Runtime) ─────────────────────────
81
+ const runtime = program
82
+ .command('runtime')
83
+ .description('Assay Verified Agent Runtime — autonomous verified agent loop');
84
+ runtime
85
+ .command('start')
86
+ .description('Start the verified agent runtime')
87
+ .argument('<path>', 'Path to the codebase to watch')
88
+ .option('-n, --name <name>', 'Agent name')
89
+ .option('-w, --watch <paths...>', 'Additional paths to watch for changes')
90
+ .option('-p, --webhook-port <port>', 'Enable webhook signal on this port')
91
+ .option('-s, --scope <dirs...>', 'Allowed directories for agent operations')
92
+ .option('-c, --commands <cmds...>', 'Allowed shell commands')
93
+ .option('-u, --urls <urls...>', 'Allowed URLs for API calls')
94
+ .option('-m, --model <model>', 'Model ID for reasoning', 'claude-sonnet-4-5-20250929')
95
+ .action(runtimeCommand);
79
96
  program.parse();
80
97
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;KAC/C,MAAM,CAAC,eAAe,CAAC,CAAC;AAE3B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,yBAAyB,EAAE,uDAAuD,CAAC;KAC1F,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,EAAE,GAAG,CAAC;KAC1E,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,0EAA0E,CAAC;KACvF,MAAM,CAAC,0BAA0B,EAAE,0DAA0D,CAAC;KAC9F,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7B,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,qFAAqF,CAAC;KAClG,MAAM,CAAC,0BAA0B,EAAE,uCAAuC,CAAC;KAC3E,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,EAAE,GAAG,CAAC;KACrE,MAAM,CAAC,0BAA0B,EAAE,oCAAoC,EAAE,IAAI,CAAC;KAC9E,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,UAAU,EAAE,qCAAqC,CAAC;KAC3D,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;KACpD,MAAM,CAAC,oBAAoB,EAAE,kDAAkD,CAAC;KAChF,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,EAAE,GAAG,CAAC;KAClE,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,CAAC;KAC1E,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface RuntimeCommandOptions {
2
+ name?: string;
3
+ watch?: string[];
4
+ webhookPort?: string;
5
+ scope?: string[];
6
+ commands?: string[];
7
+ urls?: string[];
8
+ model?: string;
9
+ }
10
+ export declare function runtimeCommand(targetPath: string, opts: RuntimeCommandOptions): Promise<void>;
11
+ export {};
@@ -0,0 +1,63 @@
1
+ // ============================================================
2
+ // CLI Command: tryassay runtime start <path>
3
+ // Launches the Assay Verified Agent Runtime
4
+ // ============================================================
5
+ import { AgentLoop, buildAgentConfig } from '../runtime/agent-loop.js';
6
+ export async function runtimeCommand(targetPath, opts) {
7
+ console.log('');
8
+ console.log(' Assay Verified Agent Runtime');
9
+ console.log(' ============================');
10
+ console.log('');
11
+ const runtimeOpts = {
12
+ name: opts.name,
13
+ watch: opts.watch,
14
+ webhookPort: opts.webhookPort ? parseInt(opts.webhookPort, 10) : undefined,
15
+ scope: opts.scope,
16
+ commands: opts.commands,
17
+ urls: opts.urls,
18
+ modelId: opts.model,
19
+ };
20
+ const config = buildAgentConfig(targetPath, runtimeOpts);
21
+ console.log(` Agent: ${config.name}`);
22
+ console.log(` Scope: ${config.scope.allowedDirectories.join(', ')}`);
23
+ console.log(` Model: ${config.modelId}`);
24
+ console.log(` Signals: ${config.signals.map(s => s.type).join(', ')}`);
25
+ console.log(` Experiences: ${config.experienceStorePath}`);
26
+ console.log('');
27
+ console.log(' Pipeline: observe -> reason -> plan -> verify -> execute -> reflect');
28
+ console.log(' Press Ctrl+C to stop');
29
+ console.log('');
30
+ const agent = new AgentLoop(config);
31
+ // Log audit events
32
+ agent.on('audit', (entry) => {
33
+ // Audit events are logged by the agent loop itself
34
+ // This hook is for future persistence (file, database, etc.)
35
+ });
36
+ // Handle approval requests
37
+ agent.on('approval_needed', (info) => {
38
+ console.log('');
39
+ console.log(' !! APPROVAL NEEDED !!');
40
+ console.log(` Plan: ${info.plan.id}`);
41
+ console.log(` Reason: ${info.reason}`);
42
+ console.log(` Escalated steps: ${info.verification.escalatedSteps.length}`);
43
+ console.log(' The agent is paused. Send SIGUSR1 to resume (approve).');
44
+ console.log('');
45
+ });
46
+ // Graceful shutdown on SIGINT/SIGTERM
47
+ const shutdown = async () => {
48
+ console.log('');
49
+ console.log(' Shutting down...');
50
+ await agent.stop();
51
+ process.exit(0);
52
+ };
53
+ process.on('SIGINT', shutdown);
54
+ process.on('SIGTERM', shutdown);
55
+ // Resume on SIGUSR1 (approve escalated action)
56
+ process.on('SIGUSR1', () => {
57
+ console.log(' Received SIGUSR1 — resuming agent');
58
+ agent.resume();
59
+ });
60
+ // Start the agent loop (blocks until stopped)
61
+ await agent.start();
62
+ }
63
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/commands/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { AgentConfig, AgentState } from './types.js';
3
+ export declare class AgentLoop extends EventEmitter {
4
+ private config;
5
+ private observer;
6
+ private reasoner;
7
+ private planner;
8
+ private verifier;
9
+ private executor;
10
+ private reflector;
11
+ private experienceStore;
12
+ private state;
13
+ private startTime;
14
+ private hourWindow;
15
+ private running;
16
+ private paused;
17
+ private pauseResolve;
18
+ constructor(config: AgentConfig);
19
+ start(): Promise<void>;
20
+ stop(): Promise<void>;
21
+ pause(): void;
22
+ resume(): void;
23
+ getState(): AgentState;
24
+ private tick;
25
+ private registerAdapters;
26
+ private setPhase;
27
+ private checkHourWindow;
28
+ private trackTokens;
29
+ private recordError;
30
+ private audit;
31
+ private describePayload;
32
+ private log;
33
+ private sleep;
34
+ }
35
+ export interface RuntimeOptions {
36
+ name?: string;
37
+ watch?: string[];
38
+ webhookPort?: number;
39
+ scope?: string[];
40
+ commands?: string[];
41
+ urls?: string[];
42
+ blocked?: string[];
43
+ modelId?: string;
44
+ experiencesPath?: string;
45
+ }
46
+ export declare function buildAgentConfig(targetPath: string, opts?: RuntimeOptions): AgentConfig;
@@ -0,0 +1,419 @@
1
+ // ============================================================
2
+ // Assay Verified Agent Runtime — Agent Loop
3
+ // Wires Observer → Reasoner → Planner → Verifier → Executor → Reflector
4
+ // into a continuous, verified decision-execution loop.
5
+ // ============================================================
6
+ import { EventEmitter } from 'node:events';
7
+ import { randomUUID } from 'node:crypto';
8
+ import { resolve } from 'node:path';
9
+ import { Observer, FileWatcherAdapter, WebhookAdapter, ScheduleAdapter, } from './observer.js';
10
+ import { Reasoner } from './reasoner.js';
11
+ import { Planner } from './planner.js';
12
+ import { RuntimeVerifier } from './verifier.js';
13
+ import { Executor } from './executor.js';
14
+ import { Reflector, ExperienceStore } from './reflector.js';
15
+ // ── Agent Loop ──────────────────────────────────────────────
16
+ export class AgentLoop extends EventEmitter {
17
+ config;
18
+ observer;
19
+ reasoner;
20
+ planner;
21
+ verifier;
22
+ executor;
23
+ reflector;
24
+ experienceStore;
25
+ state;
26
+ startTime = 0;
27
+ hourWindow = {
28
+ start: 0,
29
+ actions: 0,
30
+ tokens: 0,
31
+ };
32
+ running = false;
33
+ paused = false;
34
+ pauseResolve = null;
35
+ constructor(config) {
36
+ super();
37
+ this.config = config;
38
+ // Initialize components
39
+ this.observer = new Observer();
40
+ this.reasoner = new Reasoner();
41
+ this.planner = new Planner();
42
+ this.verifier = new RuntimeVerifier(config);
43
+ this.executor = new Executor(config.scope);
44
+ this.reflector = new Reflector();
45
+ this.experienceStore = new ExperienceStore(resolve(config.experienceStorePath));
46
+ // Initialize state
47
+ this.state = {
48
+ phase: 'idle',
49
+ currentObservation: null,
50
+ currentDecision: null,
51
+ currentPlan: null,
52
+ queueDepth: 0,
53
+ actionsThisHour: 0,
54
+ tokensThisHour: 0,
55
+ totalExperiences: 0,
56
+ uptime: 0,
57
+ lastActivityTimestamp: new Date().toISOString(),
58
+ errors: [],
59
+ };
60
+ // Register signal adapters from config
61
+ this.registerAdapters(config.signals);
62
+ }
63
+ // ── Lifecycle ──────────────────────────────────────────────
64
+ async start() {
65
+ if (this.running)
66
+ return;
67
+ this.running = true;
68
+ this.startTime = Date.now();
69
+ this.hourWindow = { start: Date.now(), actions: 0, tokens: 0 };
70
+ this.setPhase('observing');
71
+ this.audit('agent_started', { name: this.config.name });
72
+ this.log(`Agent "${this.config.name}" started`);
73
+ this.log(` Watching: ${this.config.scope.allowedDirectories.join(', ')}`);
74
+ this.log(` Signals: ${this.config.signals.map(s => s.type).join(', ')}`);
75
+ await this.observer.start();
76
+ // Main loop
77
+ while (this.running) {
78
+ try {
79
+ await this.tick();
80
+ }
81
+ catch (err) {
82
+ const message = err instanceof Error ? err.message : String(err);
83
+ this.recordError('observing', message, true);
84
+ this.log(`Loop error (recoverable): ${message}`);
85
+ // Brief pause before retrying
86
+ await this.sleep(1000);
87
+ }
88
+ }
89
+ await this.observer.stop();
90
+ this.setPhase('stopped');
91
+ this.audit('agent_stopped', { uptime: Date.now() - this.startTime });
92
+ this.log(`Agent "${this.config.name}" stopped`);
93
+ }
94
+ async stop() {
95
+ this.running = false;
96
+ this.resume(); // unblock pause if paused
97
+ }
98
+ pause() {
99
+ this.paused = true;
100
+ this.setPhase('paused');
101
+ this.log('Agent paused');
102
+ }
103
+ resume() {
104
+ if (!this.paused)
105
+ return;
106
+ this.paused = false;
107
+ if (this.pauseResolve) {
108
+ this.pauseResolve();
109
+ this.pauseResolve = null;
110
+ }
111
+ this.log('Agent resumed');
112
+ }
113
+ getState() {
114
+ return {
115
+ ...this.state,
116
+ queueDepth: this.observer.queueDepth,
117
+ uptime: this.startTime > 0 ? Date.now() - this.startTime : 0,
118
+ actionsThisHour: this.hourWindow.actions,
119
+ tokensThisHour: this.hourWindow.tokens,
120
+ };
121
+ }
122
+ // ── Main Tick ──────────────────────────────────────────────
123
+ async tick() {
124
+ // Wait if paused
125
+ if (this.paused) {
126
+ await new Promise((resolve) => {
127
+ this.pauseResolve = resolve;
128
+ });
129
+ if (!this.running)
130
+ return;
131
+ }
132
+ // Reset hourly counters if needed
133
+ this.checkHourWindow();
134
+ // Check rate limits
135
+ if (this.hourWindow.actions >= this.config.limits.maxActionsPerHour) {
136
+ this.log('Hourly action limit reached, waiting...');
137
+ await this.sleep(60_000);
138
+ return;
139
+ }
140
+ // Phase 1: Observe — wait for next observation
141
+ this.setPhase('observing');
142
+ const observation = await this.observer.dequeue();
143
+ if (!observation)
144
+ return; // stopped or no observation
145
+ this.state.currentObservation = observation;
146
+ this.state.lastActivityTimestamp = new Date().toISOString();
147
+ this.audit('observation_received', {
148
+ id: observation.id,
149
+ source: observation.source,
150
+ urgency: observation.urgency,
151
+ });
152
+ this.log(`Observation: [${observation.urgency}] ${observation.source} — ${this.describePayload(observation)}`);
153
+ // Phase 2: Reason — decide what to do
154
+ this.setPhase('reasoning');
155
+ const decision = await this.reasoner.reason(observation, this.config, this.getState());
156
+ this.state.currentDecision = decision;
157
+ this.trackTokens(decision.modelUsage.inputTokens + decision.modelUsage.outputTokens);
158
+ this.audit('decision_made', {
159
+ id: decision.id,
160
+ action: decision.action,
161
+ confidence: decision.confidence,
162
+ });
163
+ this.log(`Decision: ${decision.action} (confidence: ${decision.confidence.toFixed(2)})`);
164
+ // If ignore or defer, skip the rest
165
+ if (decision.action === 'ignore') {
166
+ this.log(' Action: ignore — skipping');
167
+ return;
168
+ }
169
+ if (decision.action === 'defer') {
170
+ this.log(` Action: defer — "${decision.reasoning}"`);
171
+ return;
172
+ }
173
+ // Phase 3: Plan — decompose into steps
174
+ this.setPhase('planning');
175
+ const plan = await this.planner.plan(decision, this.config);
176
+ this.state.currentPlan = plan;
177
+ this.audit('plan_created', {
178
+ id: plan.id,
179
+ totalSteps: plan.totalSteps,
180
+ overallRisk: plan.overallRisk,
181
+ });
182
+ this.log(`Plan: ${plan.totalSteps} steps, risk: ${plan.overallRisk}`);
183
+ // Phase 4: Verify — pre-execution safety check
184
+ this.setPhase('verifying');
185
+ const verification = await this.verifier.verifyPlan(plan);
186
+ this.audit('verification_completed', {
187
+ planId: plan.id,
188
+ verdict: verification.overallVerdict,
189
+ totalClaims: verification.totalClaims,
190
+ passedClaims: verification.passedClaims,
191
+ failedClaims: verification.failedClaims,
192
+ });
193
+ this.log(`Verification: ${verification.overallVerdict} (${verification.passedClaims}/${verification.totalClaims} claims passed)`);
194
+ // Handle escalation — pause and wait for approval
195
+ if (verification.overallVerdict === 'escalate') {
196
+ this.setPhase('awaiting_approval');
197
+ this.log(' Escalated — waiting for human approval');
198
+ this.audit('approval_requested', {
199
+ planId: plan.id,
200
+ escalatedSteps: verification.escalatedSteps,
201
+ });
202
+ this.emit('approval_needed', {
203
+ plan,
204
+ verification,
205
+ reason: 'Verification escalated — human review required',
206
+ });
207
+ // Pause until resumed (human approves via .resume())
208
+ this.paused = true;
209
+ await new Promise((resolve) => {
210
+ this.pauseResolve = resolve;
211
+ });
212
+ if (!this.running)
213
+ return;
214
+ }
215
+ // Handle failure — skip execution, still reflect
216
+ if (verification.overallVerdict === 'fail') {
217
+ this.log(' Verification FAILED — skipping execution');
218
+ // Still reflect on the failure
219
+ const experience = this.reflector.reflect(observation, decision, plan, verification, {
220
+ planId: plan.id,
221
+ status: 'failure',
222
+ stepExecutions: [],
223
+ completedSteps: 0,
224
+ totalSteps: plan.totalSteps,
225
+ totalDurationMs: 0,
226
+ timestamp: new Date().toISOString(),
227
+ });
228
+ await this.experienceStore.save(experience);
229
+ this.state.totalExperiences++;
230
+ this.audit('experience_stored', {
231
+ id: experience.id,
232
+ outcome: experience.outcome,
233
+ });
234
+ return;
235
+ }
236
+ // Phase 5: Execute — run verified steps
237
+ this.setPhase('executing');
238
+ this.log(' Executing plan...');
239
+ const execution = await this.executor.execute(plan, verification);
240
+ this.hourWindow.actions++;
241
+ this.log(` Execution: ${execution.status} (${execution.completedSteps}/${execution.totalSteps} steps)`);
242
+ for (const se of execution.stepExecutions) {
243
+ const step = plan.steps.find(s => s.id === se.stepId);
244
+ const desc = step?.description ?? se.stepId;
245
+ this.audit('step_executed', {
246
+ stepId: se.stepId,
247
+ status: se.status,
248
+ durationMs: se.durationMs,
249
+ });
250
+ if (se.status !== 'success') {
251
+ this.log(` [${se.status}] ${desc}${se.error ? ': ' + se.error : ''}`);
252
+ }
253
+ else {
254
+ this.log(` [ok] ${desc} (${se.durationMs}ms)`);
255
+ }
256
+ }
257
+ // Invalidate codebase index after code changes
258
+ if (plan.steps.some(s => s.operation.type === 'code_write')) {
259
+ this.verifier.invalidateIndex();
260
+ }
261
+ // Phase 6: Reflect — capture experience
262
+ this.setPhase('reflecting');
263
+ const experience = this.reflector.reflect(observation, decision, plan, verification, execution);
264
+ await this.experienceStore.save(experience);
265
+ this.state.totalExperiences++;
266
+ this.audit('experience_stored', {
267
+ id: experience.id,
268
+ outcome: experience.outcome,
269
+ lessons: experience.lessons,
270
+ });
271
+ this.log(` Experience: ${experience.outcome} — ${experience.lessons.length} lesson(s)`);
272
+ // Clear current state
273
+ this.state.currentObservation = null;
274
+ this.state.currentDecision = null;
275
+ this.state.currentPlan = null;
276
+ }
277
+ // ── Signal Adapter Registration ────────────────────────────
278
+ registerAdapters(signals) {
279
+ for (const signal of signals) {
280
+ switch (signal.type) {
281
+ case 'filesystem':
282
+ this.observer.register(new FileWatcherAdapter(signal));
283
+ break;
284
+ case 'webhook':
285
+ this.observer.register(new WebhookAdapter(signal));
286
+ break;
287
+ case 'schedule':
288
+ this.observer.register(new ScheduleAdapter(signal));
289
+ break;
290
+ // message and api_poll adapters can be added in Phase 2
291
+ }
292
+ }
293
+ }
294
+ // ── Helpers ────────────────────────────────────────────────
295
+ setPhase(phase) {
296
+ this.state.phase = phase;
297
+ this.emit('phase', phase);
298
+ }
299
+ checkHourWindow() {
300
+ const now = Date.now();
301
+ if (now - this.hourWindow.start > 3_600_000) {
302
+ this.hourWindow = { start: now, actions: 0, tokens: 0 };
303
+ }
304
+ }
305
+ trackTokens(tokens) {
306
+ this.hourWindow.tokens += tokens;
307
+ }
308
+ recordError(phase, message, recoverable) {
309
+ const error = {
310
+ phase,
311
+ message,
312
+ timestamp: new Date().toISOString(),
313
+ recoverable,
314
+ };
315
+ this.state.errors.push(error);
316
+ // Keep only last 20 errors
317
+ if (this.state.errors.length > 20) {
318
+ this.state.errors = this.state.errors.slice(-20);
319
+ }
320
+ this.audit('agent_error', { phase, message, recoverable });
321
+ }
322
+ audit(eventType, details) {
323
+ const entry = {
324
+ id: randomUUID(),
325
+ eventType,
326
+ agentName: this.config.name,
327
+ timestamp: new Date().toISOString(),
328
+ details,
329
+ relatedIds: {
330
+ observationId: this.state.currentObservation?.id,
331
+ decisionId: this.state.currentDecision?.id,
332
+ planId: this.state.currentPlan?.id,
333
+ },
334
+ };
335
+ this.emit('audit', entry);
336
+ }
337
+ describePayload(obs) {
338
+ const p = obs.payload;
339
+ switch (p.type) {
340
+ case 'file_change':
341
+ return `${p.event} ${p.path}`;
342
+ case 'webhook':
343
+ return `${p.method} ${p.path}`;
344
+ case 'schedule_tick':
345
+ return `${p.label} tick #${p.tickNumber}`;
346
+ case 'message':
347
+ return `${p.channel}: ${p.content.slice(0, 80)}`;
348
+ case 'api_poll':
349
+ return `${p.url} (${p.statusCode})`;
350
+ }
351
+ }
352
+ log(message) {
353
+ const ts = new Date().toISOString().slice(11, 19);
354
+ console.log(`[${ts}] ${message}`);
355
+ }
356
+ sleep(ms) {
357
+ return new Promise((resolve) => setTimeout(resolve, ms));
358
+ }
359
+ }
360
+ export function buildAgentConfig(targetPath, opts = {}) {
361
+ const rootDir = resolve(targetPath);
362
+ const allowedDirs = opts.scope?.map(d => resolve(d)) ?? [rootDir];
363
+ const watchPaths = opts.watch?.map(p => resolve(p)) ?? [rootDir];
364
+ const signals = [];
365
+ // File watcher signal
366
+ signals.push({
367
+ type: 'filesystem',
368
+ paths: watchPaths,
369
+ ignorePatterns: ['node_modules', '.git', 'dist', '.assay'],
370
+ });
371
+ // Webhook signal (optional)
372
+ if (opts.webhookPort) {
373
+ signals.push({
374
+ type: 'webhook',
375
+ port: opts.webhookPort,
376
+ path: '/webhook',
377
+ });
378
+ }
379
+ // Health check schedule
380
+ signals.push({
381
+ type: 'schedule',
382
+ intervalMs: 300_000, // 5 minutes
383
+ label: 'health-check',
384
+ });
385
+ return {
386
+ name: opts.name ?? `assay-agent-${rootDir.split('/').pop()}`,
387
+ description: `Verified agent runtime watching ${rootDir}`,
388
+ scope: {
389
+ allowedDirectories: allowedDirs,
390
+ allowedCommands: opts.commands ?? [
391
+ 'npm', 'npx', 'node', 'tsc', 'git', 'cat', 'ls', 'echo',
392
+ ],
393
+ allowedUrls: opts.urls ?? [],
394
+ blockedPatterns: opts.blocked ?? [
395
+ '*.env', '.env*', '*secret*', '*credential*',
396
+ 'node_modules', '.git/objects',
397
+ ],
398
+ maxFileSize: 1_048_576, // 1MB
399
+ },
400
+ limits: {
401
+ maxActionsPerHour: 60,
402
+ maxTokensPerHour: 500_000,
403
+ maxConcurrentSteps: 3,
404
+ maxPlanSteps: 10,
405
+ commandTimeoutMs: 30_000,
406
+ },
407
+ signals,
408
+ approvalDefaults: {
409
+ code_write: 'auto',
410
+ code_run: 'single',
411
+ api_call: 'single',
412
+ git: 'auto',
413
+ message: 'auto',
414
+ },
415
+ modelId: opts.modelId ?? 'claude-sonnet-4-5-20250929',
416
+ experienceStorePath: opts.experiencesPath ?? `${rootDir}/.assay/experiences.jsonl`,
417
+ };
418
+ }
419
+ //# sourceMappingURL=agent-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/runtime/agent-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { OperationType, ActionPlan, ActionStep, PlanVerification, PlanExecution, StepExecution, AgentScope } from './types.js';
2
+ export interface ExecutorAdapter {
3
+ readonly type: OperationType;
4
+ execute(step: ActionStep, scope: AgentScope): Promise<StepExecution>;
5
+ }
6
+ export declare class CodeWriteAdapter implements ExecutorAdapter {
7
+ readonly type: OperationType;
8
+ execute(step: ActionStep, scope: AgentScope): Promise<StepExecution>;
9
+ }
10
+ export declare class CodeRunAdapter implements ExecutorAdapter {
11
+ readonly type: OperationType;
12
+ execute(step: ActionStep, scope: AgentScope): Promise<StepExecution>;
13
+ }
14
+ export declare class ApiCallAdapter implements ExecutorAdapter {
15
+ readonly type: OperationType;
16
+ execute(step: ActionStep, scope: AgentScope): Promise<StepExecution>;
17
+ }
18
+ export declare class GitAdapter implements ExecutorAdapter {
19
+ readonly type: OperationType;
20
+ execute(step: ActionStep, scope: AgentScope): Promise<StepExecution>;
21
+ }
22
+ export declare class MessageAdapter implements ExecutorAdapter {
23
+ readonly type: OperationType;
24
+ execute(step: ActionStep): Promise<StepExecution>;
25
+ }
26
+ export declare class Executor {
27
+ private adapters;
28
+ private scope;
29
+ constructor(scope: AgentScope);
30
+ register(adapter: ExecutorAdapter): void;
31
+ execute(plan: ActionPlan, verification: PlanVerification): Promise<PlanExecution>;
32
+ /**
33
+ * Topological sort of steps based on dependsOn relationships.
34
+ * Steps with no dependencies come first.
35
+ */
36
+ private resolveExecutionOrder;
37
+ }