@a5c-ai/agent-mux-harness-mock 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/LICENSE +21 -0
- package/README.md +32 -0
- package/dist/bin/mock-harness.d.ts +33 -0
- package/dist/bin/mock-harness.d.ts.map +1 -0
- package/dist/bin/mock-harness.js +165 -0
- package/dist/bin/mock-harness.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/mock-process.d.ts +47 -0
- package/dist/mock-process.d.ts.map +1 -0
- package/dist/mock-process.js +207 -0
- package/dist/mock-process.js.map +1 -0
- package/dist/probe.d.ts +60 -0
- package/dist/probe.d.ts.map +1 -0
- package/dist/probe.js +168 -0
- package/dist/probe.js.map +1 -0
- package/dist/scenarios/errors.d.ts +22 -0
- package/dist/scenarios/errors.d.ts.map +1 -0
- package/dist/scenarios/errors.js +73 -0
- package/dist/scenarios/errors.js.map +1 -0
- package/dist/scenarios/hooks.d.ts +13 -0
- package/dist/scenarios/hooks.d.ts.map +1 -0
- package/dist/scenarios/hooks.js +61 -0
- package/dist/scenarios/hooks.js.map +1 -0
- package/dist/scenarios/index.d.ts +23 -0
- package/dist/scenarios/index.d.ts.map +1 -0
- package/dist/scenarios/index.js +47 -0
- package/dist/scenarios/index.js.map +1 -0
- package/dist/scenarios/interactive.d.ts +18 -0
- package/dist/scenarios/interactive.d.ts.map +1 -0
- package/dist/scenarios/interactive.js +46 -0
- package/dist/scenarios/interactive.js.map +1 -0
- package/dist/scenarios/per-agent.d.ts +46 -0
- package/dist/scenarios/per-agent.d.ts.map +1 -0
- package/dist/scenarios/per-agent.js +150 -0
- package/dist/scenarios/per-agent.js.map +1 -0
- package/dist/scenarios/wire-format.d.ts +36 -0
- package/dist/scenarios/wire-format.d.ts.map +1 -0
- package/dist/scenarios/wire-format.js +96 -0
- package/dist/scenarios/wire-format.js.map +1 -0
- package/dist/scenarios.d.ts +30 -0
- package/dist/scenarios.d.ts.map +1 -0
- package/dist/scenarios.js +141 -0
- package/dist/scenarios.js.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace.d.ts +53 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +157 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +58 -0
package/dist/types.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the harness mock/simulator.
|
|
3
|
+
*
|
|
4
|
+
* A "harness" is a CLI tool (claude-code, codex, etc.) that agent-mux
|
|
5
|
+
* invokes as a subprocess. This package simulates harness behavior for
|
|
6
|
+
* testing without requiring the real CLI tools to be installed.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkspaceSandbox — isolated filesystem area for mock harness file operations.
|
|
3
|
+
*
|
|
4
|
+
* Creates a temporary directory that the mock harness can read/write to,
|
|
5
|
+
* providing snapshot and diff capabilities for test assertions.
|
|
6
|
+
*/
|
|
7
|
+
import type { FileOperation } from './types.js';
|
|
8
|
+
export interface WorkspaceOptions {
|
|
9
|
+
/** Initial files to seed the workspace with. */
|
|
10
|
+
initialFiles?: Record<string, string>;
|
|
11
|
+
/** Whether to preserve the workspace after dispose() (for debugging). */
|
|
12
|
+
preserve?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare class WorkspaceSandbox {
|
|
15
|
+
/** The root directory of this sandbox. */
|
|
16
|
+
readonly root: string;
|
|
17
|
+
private _disposed;
|
|
18
|
+
private _preserve;
|
|
19
|
+
private _initialSnapshot;
|
|
20
|
+
constructor(options?: WorkspaceOptions);
|
|
21
|
+
/** Resolve a relative path within the sandbox. */
|
|
22
|
+
resolve(relativePath: string): string;
|
|
23
|
+
/** Write a file to the sandbox. */
|
|
24
|
+
writeFile(relativePath: string, content: string): void;
|
|
25
|
+
/** Read a file from the sandbox. */
|
|
26
|
+
readFile(relativePath: string): string;
|
|
27
|
+
/** Check if a file exists in the sandbox. */
|
|
28
|
+
exists(relativePath: string): boolean;
|
|
29
|
+
/** Delete a file from the sandbox. */
|
|
30
|
+
deleteFile(relativePath: string): void;
|
|
31
|
+
/** List all files in the sandbox (relative paths). */
|
|
32
|
+
listFiles(): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Apply a sequence of file operations to the sandbox.
|
|
35
|
+
* Translates absolute paths in the operations to sandbox-relative paths.
|
|
36
|
+
*/
|
|
37
|
+
applyOperations(operations: FileOperation[], basePath?: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get a diff of changes since the workspace was created.
|
|
40
|
+
* Returns arrays of created, modified, and deleted files.
|
|
41
|
+
*/
|
|
42
|
+
diff(): {
|
|
43
|
+
created: string[];
|
|
44
|
+
modified: string[];
|
|
45
|
+
deleted: string[];
|
|
46
|
+
};
|
|
47
|
+
/** Snapshot the current state (for later comparison). */
|
|
48
|
+
snapshot(): Map<string, string>;
|
|
49
|
+
/** Clean up the sandbox. */
|
|
50
|
+
dispose(): void;
|
|
51
|
+
private _ensureNotDisposed;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,gBAAgB;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,gBAAgB,CAAsB;gBAElC,OAAO,CAAC,EAAE,gBAAgB;IAatC,kDAAkD;IAClD,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQrC,mCAAmC;IACnC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOtD,oCAAoC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAKtC,6CAA6C;IAC7C,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAKrC,sCAAsC;IACtC,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAKtC,sDAAsD;IACtD,SAAS,IAAI,MAAM,EAAE;IAiBrB;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IA+BrE;;;OAGG;IACH,IAAI,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAwBpE,yDAAyD;IACzD,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAS/B,4BAA4B;IAC5B,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,kBAAkB;CAK3B"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkspaceSandbox — isolated filesystem area for mock harness file operations.
|
|
3
|
+
*
|
|
4
|
+
* Creates a temporary directory that the mock harness can read/write to,
|
|
5
|
+
* providing snapshot and diff capabilities for test assertions.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as os from 'node:os';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
export class WorkspaceSandbox {
|
|
11
|
+
/** The root directory of this sandbox. */
|
|
12
|
+
root;
|
|
13
|
+
_disposed = false;
|
|
14
|
+
_preserve;
|
|
15
|
+
_initialSnapshot;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.root = fs.mkdtempSync(path.join(os.tmpdir(), 'amux-workspace-'));
|
|
18
|
+
this._preserve = options?.preserve ?? false;
|
|
19
|
+
this._initialSnapshot = new Map();
|
|
20
|
+
if (options?.initialFiles) {
|
|
21
|
+
for (const [filePath, content] of Object.entries(options.initialFiles)) {
|
|
22
|
+
this.writeFile(filePath, content);
|
|
23
|
+
this._initialSnapshot.set(filePath, content);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** Resolve a relative path within the sandbox. */
|
|
28
|
+
resolve(relativePath) {
|
|
29
|
+
const resolved = path.resolve(this.root, relativePath);
|
|
30
|
+
if (!resolved.startsWith(this.root)) {
|
|
31
|
+
throw new Error(`Path escapes sandbox: ${relativePath}`);
|
|
32
|
+
}
|
|
33
|
+
return resolved;
|
|
34
|
+
}
|
|
35
|
+
/** Write a file to the sandbox. */
|
|
36
|
+
writeFile(relativePath, content) {
|
|
37
|
+
this._ensureNotDisposed();
|
|
38
|
+
const fullPath = this.resolve(relativePath);
|
|
39
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
40
|
+
fs.writeFileSync(fullPath, content, 'utf-8');
|
|
41
|
+
}
|
|
42
|
+
/** Read a file from the sandbox. */
|
|
43
|
+
readFile(relativePath) {
|
|
44
|
+
this._ensureNotDisposed();
|
|
45
|
+
return fs.readFileSync(this.resolve(relativePath), 'utf-8');
|
|
46
|
+
}
|
|
47
|
+
/** Check if a file exists in the sandbox. */
|
|
48
|
+
exists(relativePath) {
|
|
49
|
+
this._ensureNotDisposed();
|
|
50
|
+
return fs.existsSync(this.resolve(relativePath));
|
|
51
|
+
}
|
|
52
|
+
/** Delete a file from the sandbox. */
|
|
53
|
+
deleteFile(relativePath) {
|
|
54
|
+
this._ensureNotDisposed();
|
|
55
|
+
fs.unlinkSync(this.resolve(relativePath));
|
|
56
|
+
}
|
|
57
|
+
/** List all files in the sandbox (relative paths). */
|
|
58
|
+
listFiles() {
|
|
59
|
+
this._ensureNotDisposed();
|
|
60
|
+
const results = [];
|
|
61
|
+
const walk = (dir) => {
|
|
62
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
63
|
+
const full = path.join(dir, entry.name);
|
|
64
|
+
if (entry.isDirectory()) {
|
|
65
|
+
walk(full);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
results.push(path.relative(this.root, full).replace(/\\/g, '/'));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
walk(this.root);
|
|
73
|
+
return results.sort();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Apply a sequence of file operations to the sandbox.
|
|
77
|
+
* Translates absolute paths in the operations to sandbox-relative paths.
|
|
78
|
+
*/
|
|
79
|
+
applyOperations(operations, basePath) {
|
|
80
|
+
this._ensureNotDisposed();
|
|
81
|
+
for (const op of operations) {
|
|
82
|
+
const relativePath = basePath
|
|
83
|
+
? path.relative(basePath, op.path).replace(/\\/g, '/')
|
|
84
|
+
: op.path.replace(/^\//, '');
|
|
85
|
+
switch (op.type) {
|
|
86
|
+
case 'create':
|
|
87
|
+
case 'modify':
|
|
88
|
+
this.writeFile(relativePath, op.content ?? '');
|
|
89
|
+
break;
|
|
90
|
+
case 'delete':
|
|
91
|
+
if (this.exists(relativePath)) {
|
|
92
|
+
this.deleteFile(relativePath);
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
case 'rename':
|
|
96
|
+
if (op.newPath) {
|
|
97
|
+
const newRelative = basePath
|
|
98
|
+
? path.relative(basePath, op.newPath).replace(/\\/g, '/')
|
|
99
|
+
: op.newPath.replace(/^\//, '');
|
|
100
|
+
const content = this.readFile(relativePath);
|
|
101
|
+
this.writeFile(newRelative, content);
|
|
102
|
+
this.deleteFile(relativePath);
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get a diff of changes since the workspace was created.
|
|
110
|
+
* Returns arrays of created, modified, and deleted files.
|
|
111
|
+
*/
|
|
112
|
+
diff() {
|
|
113
|
+
this._ensureNotDisposed();
|
|
114
|
+
const currentFiles = new Set(this.listFiles());
|
|
115
|
+
const created = [];
|
|
116
|
+
const modified = [];
|
|
117
|
+
const deleted = [];
|
|
118
|
+
for (const file of currentFiles) {
|
|
119
|
+
if (!this._initialSnapshot.has(file)) {
|
|
120
|
+
created.push(file);
|
|
121
|
+
}
|
|
122
|
+
else if (this.readFile(file) !== this._initialSnapshot.get(file)) {
|
|
123
|
+
modified.push(file);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
for (const file of this._initialSnapshot.keys()) {
|
|
127
|
+
if (!currentFiles.has(file)) {
|
|
128
|
+
deleted.push(file);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return { created: created.sort(), modified: modified.sort(), deleted: deleted.sort() };
|
|
132
|
+
}
|
|
133
|
+
/** Snapshot the current state (for later comparison). */
|
|
134
|
+
snapshot() {
|
|
135
|
+
this._ensureNotDisposed();
|
|
136
|
+
const snap = new Map();
|
|
137
|
+
for (const file of this.listFiles()) {
|
|
138
|
+
snap.set(file, this.readFile(file));
|
|
139
|
+
}
|
|
140
|
+
return snap;
|
|
141
|
+
}
|
|
142
|
+
/** Clean up the sandbox. */
|
|
143
|
+
dispose() {
|
|
144
|
+
if (this._disposed)
|
|
145
|
+
return;
|
|
146
|
+
this._disposed = true;
|
|
147
|
+
if (!this._preserve) {
|
|
148
|
+
fs.rmSync(this.root, { recursive: true, force: true });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
_ensureNotDisposed() {
|
|
152
|
+
if (this._disposed) {
|
|
153
|
+
throw new Error('WorkspaceSandbox has been disposed');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@a5c-ai/agent-mux-harness-mock",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"description": "Mock harness simulator for testing agent-mux adapters — simulates claude-code, codex, and other CLI harnesses",
|
|
7
|
+
"author": "a5c-ai",
|
|
8
|
+
"homepage": "https://github.com/a5c-ai/agent-mux#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/a5c-ai/agent-mux.git",
|
|
12
|
+
"directory": "packages/harness-mock"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/a5c-ai/agent-mux/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"agent-mux",
|
|
19
|
+
"mock",
|
|
20
|
+
"harness",
|
|
21
|
+
"testing",
|
|
22
|
+
"fixtures",
|
|
23
|
+
"ai"
|
|
24
|
+
],
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=20.9.0"
|
|
27
|
+
},
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"module": "./dist/index.js",
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"import": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"default": "./dist/index.js"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"README.md",
|
|
42
|
+
"LICENSE"
|
|
43
|
+
],
|
|
44
|
+
"bin": {
|
|
45
|
+
"mock-harness": "./dist/bin/mock-harness.js"
|
|
46
|
+
},
|
|
47
|
+
"publishConfig": {
|
|
48
|
+
"access": "public"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsc --build",
|
|
52
|
+
"prepublishOnly": "npm run build",
|
|
53
|
+
"test": "vitest run --config ../../vitest.config.ts"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@a5c-ai/agent-mux-core": "0.2.0"
|
|
57
|
+
}
|
|
58
|
+
}
|