tryassay 0.1.2 → 0.3.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 +37 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/runtime.d.ts +23 -0
- package/dist/commands/runtime.js +130 -0
- package/dist/commands/runtime.js.map +1 -0
- package/dist/runtime/agent-loop.d.ts +55 -0
- package/dist/runtime/agent-loop.js +502 -0
- package/dist/runtime/agent-loop.js.map +1 -0
- package/dist/runtime/audit-log.d.ts +35 -0
- package/dist/runtime/audit-log.js +115 -0
- package/dist/runtime/audit-log.js.map +1 -0
- package/dist/runtime/config-loader.d.ts +41 -0
- package/dist/runtime/config-loader.js +116 -0
- package/dist/runtime/config-loader.js.map +1 -0
- package/dist/runtime/control-server.d.ts +25 -0
- package/dist/runtime/control-server.js +83 -0
- package/dist/runtime/control-server.js.map +1 -0
- package/dist/runtime/executor.d.ts +37 -0
- package/dist/runtime/executor.js +518 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/logger.d.ts +20 -0
- package/dist/runtime/logger.js +73 -0
- package/dist/runtime/logger.js.map +1 -0
- package/dist/runtime/observer.d.ts +48 -0
- package/dist/runtime/observer.js +294 -0
- package/dist/runtime/observer.js.map +1 -0
- package/dist/runtime/planner.d.ts +4 -0
- package/dist/runtime/planner.js +299 -0
- package/dist/runtime/planner.js.map +1 -0
- package/dist/runtime/reasoner.d.ts +4 -0
- package/dist/runtime/reasoner.js +238 -0
- package/dist/runtime/reasoner.js.map +1 -0
- package/dist/runtime/reflector.d.ts +67 -0
- package/dist/runtime/reflector.js +393 -0
- package/dist/runtime/reflector.js.map +1 -0
- package/dist/runtime/types.d.ts +321 -0
- package/dist/runtime/types.js +6 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/verifier.d.ts +46 -0
- package/dist/runtime/verifier.js +404 -0
- package/dist/runtime/verifier.js.map +1 -0
- package/package.json +1 -1
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, runtimeInitCommand, runtimeStatusCommand, runtimeStopCommand } from './commands/runtime.js';
|
|
13
14
|
const program = new Command();
|
|
14
15
|
program
|
|
15
16
|
.name('assay')
|
|
@@ -76,5 +77,41 @@ 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
|
+
.option('--control-port <port>', 'HTTP control server port', '3700')
|
|
96
|
+
.option('--json', 'Output structured JSON logs to stdout')
|
|
97
|
+
.option('--max-cost <cents>', 'Max session cost in cents before auto-pause', '500')
|
|
98
|
+
.action(runtimeCommand);
|
|
99
|
+
runtime
|
|
100
|
+
.command('init')
|
|
101
|
+
.description('Generate a default .assay/agent.json config file')
|
|
102
|
+
.argument('[path]', 'Path to the project directory', '.')
|
|
103
|
+
.action(runtimeInitCommand);
|
|
104
|
+
runtime
|
|
105
|
+
.command('status')
|
|
106
|
+
.description('Query the running agent status via HTTP control server')
|
|
107
|
+
.option('--port <port>', 'Control server port', '3700')
|
|
108
|
+
.option('--token <token>', 'Bearer token (printed at agent startup)')
|
|
109
|
+
.action(runtimeStatusCommand);
|
|
110
|
+
runtime
|
|
111
|
+
.command('stop')
|
|
112
|
+
.description('Stop a running agent via HTTP control server')
|
|
113
|
+
.option('--port <port>', 'Control server port', '3700')
|
|
114
|
+
.option('--token <token>', 'Bearer token (printed at agent startup)')
|
|
115
|
+
.action(runtimeStopCommand);
|
|
79
116
|
program.parse();
|
|
80
117
|
//# 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;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
controlPort?: string;
|
|
10
|
+
json?: boolean;
|
|
11
|
+
maxCost?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function runtimeCommand(targetPath: string, opts: RuntimeCommandOptions): Promise<void>;
|
|
14
|
+
export declare function runtimeInitCommand(targetPath: string): Promise<void>;
|
|
15
|
+
export declare function runtimeStatusCommand(opts: {
|
|
16
|
+
port?: string;
|
|
17
|
+
token?: string;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
export declare function runtimeStopCommand(opts: {
|
|
20
|
+
port?: string;
|
|
21
|
+
token?: string;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// CLI Command: tryassay runtime start|init|status|stop <path>
|
|
3
|
+
// Launches and manages the Assay Verified Agent Runtime
|
|
4
|
+
// ============================================================
|
|
5
|
+
import { AgentLoop, buildAgentConfig } from '../runtime/agent-loop.js';
|
|
6
|
+
import { loadAgentConfigFile, mergeConfigFile, generateDefaultConfig } from '../runtime/config-loader.js';
|
|
7
|
+
export async function runtimeCommand(targetPath, opts) {
|
|
8
|
+
console.log('');
|
|
9
|
+
console.log(' Assay Verified Agent Runtime');
|
|
10
|
+
console.log(' ============================');
|
|
11
|
+
console.log('');
|
|
12
|
+
const runtimeOpts = {
|
|
13
|
+
name: opts.name,
|
|
14
|
+
watch: opts.watch,
|
|
15
|
+
webhookPort: opts.webhookPort ? parseInt(opts.webhookPort, 10) : undefined,
|
|
16
|
+
scope: opts.scope,
|
|
17
|
+
commands: opts.commands,
|
|
18
|
+
urls: opts.urls,
|
|
19
|
+
modelId: opts.model,
|
|
20
|
+
controlPort: opts.controlPort ? parseInt(opts.controlPort, 10) : undefined,
|
|
21
|
+
jsonLogs: opts.json,
|
|
22
|
+
maxSessionCostCents: opts.maxCost ? parseInt(opts.maxCost, 10) : undefined,
|
|
23
|
+
};
|
|
24
|
+
// Build default config from CLI args
|
|
25
|
+
let config = buildAgentConfig(targetPath, runtimeOpts);
|
|
26
|
+
// Check for .assay/agent.json and merge if present
|
|
27
|
+
const fileConfig = await loadAgentConfigFile(targetPath);
|
|
28
|
+
if (fileConfig) {
|
|
29
|
+
config = mergeConfigFile(config, fileConfig);
|
|
30
|
+
console.log(' Config: loaded from .assay/agent.json');
|
|
31
|
+
}
|
|
32
|
+
console.log(` Agent: ${config.name}`);
|
|
33
|
+
console.log(` Scope: ${config.scope.allowedDirectories.join(', ')}`);
|
|
34
|
+
console.log(` Model: ${config.modelId}`);
|
|
35
|
+
console.log(` Signals: ${config.signals.map(s => s.type).join(', ')}`);
|
|
36
|
+
console.log(` Experiences: ${config.experienceStorePath}`);
|
|
37
|
+
console.log(` Control port: ${config.controlPort ?? 'disabled'}`);
|
|
38
|
+
console.log(` Cost limit: ${config.limits.maxSessionCostCents ?? 'none'}c`);
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log(' Pipeline: observe -> reason -> plan -> verify -> execute -> reflect');
|
|
41
|
+
console.log(' Press Ctrl+C to stop');
|
|
42
|
+
console.log('');
|
|
43
|
+
const agent = new AgentLoop(config);
|
|
44
|
+
// Log audit events
|
|
45
|
+
agent.on('audit', (_entry) => {
|
|
46
|
+
// Audit events are now persisted by the AuditLog class
|
|
47
|
+
// This hook is for future external integrations
|
|
48
|
+
});
|
|
49
|
+
// Handle approval requests
|
|
50
|
+
agent.on('approval_needed', (info) => {
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log(' !! APPROVAL NEEDED !!');
|
|
53
|
+
console.log(` Plan: ${info.plan.id}`);
|
|
54
|
+
console.log(` Reason: ${info.reason}`);
|
|
55
|
+
console.log(` Escalated steps: ${info.verification.escalatedSteps.length}`);
|
|
56
|
+
console.log(' The agent is paused. Send SIGUSR1 to resume (approve).');
|
|
57
|
+
console.log('');
|
|
58
|
+
});
|
|
59
|
+
// Graceful shutdown on SIGINT/SIGTERM
|
|
60
|
+
const shutdown = async () => {
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(' Shutting down...');
|
|
63
|
+
await agent.stop();
|
|
64
|
+
process.exit(0);
|
|
65
|
+
};
|
|
66
|
+
process.on('SIGINT', shutdown);
|
|
67
|
+
process.on('SIGTERM', shutdown);
|
|
68
|
+
// Resume on SIGUSR1 (approve escalated action)
|
|
69
|
+
process.on('SIGUSR1', () => {
|
|
70
|
+
console.log(' Received SIGUSR1 — resuming agent');
|
|
71
|
+
agent.resume();
|
|
72
|
+
});
|
|
73
|
+
// Start the agent loop (blocks until stopped)
|
|
74
|
+
await agent.start();
|
|
75
|
+
}
|
|
76
|
+
export async function runtimeInitCommand(targetPath) {
|
|
77
|
+
const configPath = await generateDefaultConfig(targetPath);
|
|
78
|
+
console.log(` Generated default agent config: ${configPath}`);
|
|
79
|
+
console.log(' Edit this file to customize your agent, then run: tryassay runtime start .');
|
|
80
|
+
}
|
|
81
|
+
export async function runtimeStatusCommand(opts) {
|
|
82
|
+
const port = opts.port ? parseInt(opts.port, 10) : 3700;
|
|
83
|
+
const token = opts.token;
|
|
84
|
+
if (!token) {
|
|
85
|
+
console.error(' Error: --token is required. The token is printed when the agent starts.');
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const response = await fetch(`http://localhost:${port}/status`, {
|
|
90
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
91
|
+
});
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
console.error(` Error: HTTP ${response.status} ${response.statusText}`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
const state = await response.json();
|
|
97
|
+
console.log(JSON.stringify(state, null, 2));
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
101
|
+
console.error(` Error: Could not connect to agent on port ${port}: ${msg}`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export async function runtimeStopCommand(opts) {
|
|
106
|
+
const port = opts.port ? parseInt(opts.port, 10) : 3700;
|
|
107
|
+
const token = opts.token;
|
|
108
|
+
if (!token) {
|
|
109
|
+
console.error(' Error: --token is required. The token is printed when the agent starts.');
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const response = await fetch(`http://localhost:${port}/stop`, {
|
|
114
|
+
method: 'POST',
|
|
115
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
116
|
+
});
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
console.error(` Error: HTTP ${response.status} ${response.statusText}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
const result = await response.json();
|
|
122
|
+
console.log(` Agent stopping: ${JSON.stringify(result)}`);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
126
|
+
console.error(` Error: Could not connect to agent on port ${port}: ${msg}`);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# 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,55 @@
|
|
|
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 auditLog;
|
|
13
|
+
private logger;
|
|
14
|
+
private controlServer;
|
|
15
|
+
private state;
|
|
16
|
+
private startTime;
|
|
17
|
+
private hourWindow;
|
|
18
|
+
private sessionCostCents;
|
|
19
|
+
private running;
|
|
20
|
+
private paused;
|
|
21
|
+
private pauseResolve;
|
|
22
|
+
constructor(config: AgentConfig);
|
|
23
|
+
start(): Promise<void>;
|
|
24
|
+
stop(): Promise<void>;
|
|
25
|
+
pause(): void;
|
|
26
|
+
resume(): void;
|
|
27
|
+
getCostCents(): number;
|
|
28
|
+
getState(): AgentState;
|
|
29
|
+
private tick;
|
|
30
|
+
private registerAdapters;
|
|
31
|
+
private setPhase;
|
|
32
|
+
private checkHourWindow;
|
|
33
|
+
private trackTokens;
|
|
34
|
+
/** Estimate cost in cents from token usage (rough Sonnet pricing). */
|
|
35
|
+
private trackCost;
|
|
36
|
+
private recordError;
|
|
37
|
+
private audit;
|
|
38
|
+
private describePayload;
|
|
39
|
+
private sleep;
|
|
40
|
+
}
|
|
41
|
+
export interface RuntimeOptions {
|
|
42
|
+
name?: string;
|
|
43
|
+
watch?: string[];
|
|
44
|
+
webhookPort?: number;
|
|
45
|
+
scope?: string[];
|
|
46
|
+
commands?: string[];
|
|
47
|
+
urls?: string[];
|
|
48
|
+
blocked?: string[];
|
|
49
|
+
modelId?: string;
|
|
50
|
+
experiencesPath?: string;
|
|
51
|
+
controlPort?: number;
|
|
52
|
+
jsonLogs?: boolean;
|
|
53
|
+
maxSessionCostCents?: number;
|
|
54
|
+
}
|
|
55
|
+
export declare function buildAgentConfig(targetPath: string, opts?: RuntimeOptions): AgentConfig;
|