@agentmeshhq/agent 0.4.6 → 0.4.10
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/__tests__/auth-doctor-integration.test.d.ts +14 -0
- package/dist/__tests__/auth-doctor-integration.test.js +130 -0
- package/dist/__tests__/auth-doctor-integration.test.js.map +1 -0
- package/dist/__tests__/auth-guard.integration.test.d.ts +12 -0
- package/dist/__tests__/auth-guard.integration.test.js +132 -0
- package/dist/__tests__/auth-guard.integration.test.js.map +1 -0
- package/dist/__tests__/auth-guard.test.d.ts +17 -0
- package/dist/__tests__/auth-guard.test.js +483 -0
- package/dist/__tests__/auth-guard.test.js.map +1 -0
- package/dist/__tests__/done-state-guard.integration.test.d.ts +1 -0
- package/dist/__tests__/done-state-guard.integration.test.js +281 -0
- package/dist/__tests__/done-state-guard.integration.test.js.map +1 -0
- package/dist/__tests__/done-state-guard.test.d.ts +1 -0
- package/dist/__tests__/done-state-guard.test.js +327 -0
- package/dist/__tests__/done-state-guard.test.js.map +1 -0
- package/dist/__tests__/tmux-runtime.test.d.ts +1 -0
- package/dist/__tests__/tmux-runtime.test.js +113 -0
- package/dist/__tests__/tmux-runtime.test.js.map +1 -0
- package/dist/cli/auth.d.ts +11 -0
- package/dist/cli/auth.js +92 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/index.js +45 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/local.d.ts +4 -2
- package/dist/cli/local.js +257 -108
- package/dist/cli/local.js.map +1 -1
- package/dist/cli/migrate.d.ts +1 -0
- package/dist/cli/migrate.js +14 -10
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/start.d.ts +2 -0
- package/dist/cli/start.js +3 -0
- package/dist/cli/start.js.map +1 -1
- package/dist/cli/test.d.ts +1 -0
- package/dist/cli/test.js +15 -9
- package/dist/cli/test.js.map +1 -1
- package/dist/config/schema.d.ts +11 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/core/auth-guard.d.ts +155 -0
- package/dist/core/auth-guard.js +498 -0
- package/dist/core/auth-guard.js.map +1 -0
- package/dist/core/auth-sync.d.ts +105 -0
- package/dist/core/auth-sync.js +263 -0
- package/dist/core/auth-sync.js.map +1 -0
- package/dist/core/daemon/context-template.js +65 -0
- package/dist/core/daemon/context-template.js.map +1 -1
- package/dist/core/daemon/done-state-guard.d.ts +63 -0
- package/dist/core/daemon/done-state-guard.js +102 -0
- package/dist/core/daemon/done-state-guard.js.map +1 -0
- package/dist/core/daemon/tmux-session.d.ts +1 -0
- package/dist/core/daemon/tmux-session.js +1 -1
- package/dist/core/daemon/tmux-session.js.map +1 -1
- package/dist/core/daemon.d.ts +15 -1
- package/dist/core/daemon.js +155 -37
- package/dist/core/daemon.js.map +1 -1
- package/dist/core/registry.d.ts +9 -1
- package/dist/core/registry.js +28 -1
- package/dist/core/registry.js.map +1 -1
- package/dist/core/tmux-runtime.d.ts +11 -2
- package/dist/core/tmux-runtime.js +45 -19
- package/dist/core/tmux-runtime.js.map +1 -1
- package/dist/core/tmux.d.ts +1 -1
- package/dist/core/tmux.js +7 -3
- package/dist/core/tmux.js.map +1 -1
- package/package.json +12 -11
- package/LICENSE +0 -21
package/dist/cli/migrate.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execSync, spawnSync } from "node:child_process";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import pc from "picocolors";
|
|
4
|
+
import { slotPort } from "./local.js";
|
|
4
5
|
function findProjectRoot() {
|
|
5
6
|
let dir = process.cwd();
|
|
6
7
|
for (let i = 0; i < 10; i++) {
|
|
@@ -16,18 +17,20 @@ function findProjectRoot() {
|
|
|
16
17
|
}
|
|
17
18
|
throw new Error("Could not find AgentMesh project root. Make sure you're in the agentmesh repository.");
|
|
18
19
|
}
|
|
19
|
-
function isLocalStackRunning() {
|
|
20
|
+
function isLocalStackRunning(slot = 0) {
|
|
20
21
|
try {
|
|
21
|
-
const
|
|
22
|
-
|
|
22
|
+
const dbPort = slotPort(5432, slot);
|
|
23
|
+
const listener = execSync(`lsof -iTCP:${dbPort} -sTCP:LISTEN -t 2>/dev/null || true`, {
|
|
24
|
+
encoding: "utf-8",
|
|
25
|
+
});
|
|
26
|
+
return listener.trim().length > 0;
|
|
23
27
|
}
|
|
24
28
|
catch {
|
|
25
29
|
return false;
|
|
26
30
|
}
|
|
27
31
|
}
|
|
28
|
-
function getLocalDbUrl() {
|
|
29
|
-
|
|
30
|
-
return "postgresql://postgres:postgres@localhost:5432/agentmesh";
|
|
32
|
+
function getLocalDbUrl(slot = 0) {
|
|
33
|
+
return `postgresql://postgres:postgres@localhost:${slotPort(5432, slot)}/agentmesh`;
|
|
31
34
|
}
|
|
32
35
|
export async function migrate(options = {}) {
|
|
33
36
|
const projectRoot = findProjectRoot();
|
|
@@ -117,18 +120,19 @@ function getEnvironmentConfig(options) {
|
|
|
117
120
|
};
|
|
118
121
|
}
|
|
119
122
|
// Default: local stack
|
|
120
|
-
const
|
|
123
|
+
const slot = options.slot ?? 0;
|
|
124
|
+
const localRunning = isLocalStackRunning(slot);
|
|
121
125
|
if (!localRunning) {
|
|
122
126
|
return {
|
|
123
127
|
name: "local",
|
|
124
|
-
databaseUrl: getLocalDbUrl(),
|
|
128
|
+
databaseUrl: getLocalDbUrl(slot),
|
|
125
129
|
canConnect: false,
|
|
126
|
-
reason:
|
|
130
|
+
reason: `Local stack is not running for slot ${slot}. Start it with: agentmesh local up --slot ${slot}`,
|
|
127
131
|
};
|
|
128
132
|
}
|
|
129
133
|
return {
|
|
130
134
|
name: "local",
|
|
131
|
-
databaseUrl: getLocalDbUrl(),
|
|
135
|
+
databaseUrl: getLocalDbUrl(slot),
|
|
132
136
|
canConnect: true,
|
|
133
137
|
};
|
|
134
138
|
}
|
package/dist/cli/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/start.d.ts
CHANGED
|
@@ -25,5 +25,7 @@ export interface StartOptions {
|
|
|
25
25
|
role?: string;
|
|
26
26
|
/** Auto-accept handoffs while running in worker mode */
|
|
27
27
|
autoAcceptHandoffs?: boolean;
|
|
28
|
+
/** Run agent in fully autonomous mode — injects runtime-specific non-interactive flags */
|
|
29
|
+
autonomous?: boolean;
|
|
28
30
|
}
|
|
29
31
|
export declare function start(options: StartOptions): Promise<void>;
|
package/dist/cli/start.js
CHANGED
|
@@ -49,6 +49,7 @@ export async function start(options) {
|
|
|
49
49
|
autoSetup: options.autoSetup,
|
|
50
50
|
project: options.project,
|
|
51
51
|
role: options.role,
|
|
52
|
+
autonomous: options.autonomous,
|
|
52
53
|
});
|
|
53
54
|
await daemon.start();
|
|
54
55
|
// Keep process alive
|
|
@@ -98,6 +99,8 @@ export async function start(options) {
|
|
|
98
99
|
args.push("--project", options.project);
|
|
99
100
|
if (options.role)
|
|
100
101
|
args.push("--role", options.role);
|
|
102
|
+
if (options.autonomous)
|
|
103
|
+
args.push("--autonomous");
|
|
101
104
|
// Spawn detached background process
|
|
102
105
|
const child = spawn("node", [cliPath, ...args], {
|
|
103
106
|
detached: true,
|
package/dist/cli/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAiChE,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,EAAE,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC9F,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,EAAE,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtF,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,EAAE,OAAO,CAAC;IAEnE,yFAAyF;IACzF,iBAAiB,CAAC;QAChB,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QACzB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,aAAa;QACpB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,aAAa,IAAI,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,OAAO,CAAC,IAAI,uBAAuB,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4DAA4D;IAC5D,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;gBAC7B,GAAG,OAAO;gBACV,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,aAAa;gBACpB,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;gBAC9C,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;aAC/B,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,qBAAqB;YACrB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA2B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,IAAI,oBAAoB,CAAC,CAAC;IAEjE,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAE9F,wCAAwC;IACxC,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/D,IAAI,eAAe;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,eAAe;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,aAAa;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,cAAc;QAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,kBAAkB,KAAK,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvB,IAAI,OAAO,CAAC,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAI,OAAO,CAAC,UAAU;YAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAElD,oCAAoC;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE;QAC9C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,iCAAiC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/cli/test.d.ts
CHANGED
package/dist/cli/test.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { execSync, spawnSync } from "node:child_process";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import pc from "picocolors";
|
|
4
|
+
import { slotPort } from "./local.js";
|
|
4
5
|
function findProjectRoot() {
|
|
5
6
|
let dir = process.cwd();
|
|
6
7
|
for (let i = 0; i < 10; i++) {
|
|
@@ -16,10 +17,13 @@ function findProjectRoot() {
|
|
|
16
17
|
}
|
|
17
18
|
throw new Error("Could not find AgentMesh project root. Make sure you're in the agentmesh repository.");
|
|
18
19
|
}
|
|
19
|
-
function isLocalStackRunning() {
|
|
20
|
+
function isLocalStackRunning(slot = 0) {
|
|
20
21
|
try {
|
|
21
|
-
const
|
|
22
|
-
|
|
22
|
+
const dbPort = slotPort(5432, slot);
|
|
23
|
+
const listener = execSync(`lsof -iTCP:${dbPort} -sTCP:LISTEN -t 2>/dev/null || true`, {
|
|
24
|
+
encoding: "utf-8",
|
|
25
|
+
});
|
|
26
|
+
return listener.trim().length > 0;
|
|
23
27
|
}
|
|
24
28
|
catch {
|
|
25
29
|
return false;
|
|
@@ -37,7 +41,8 @@ export async function test(options = {}) {
|
|
|
37
41
|
async function runUnitTests(projectRoot, options) {
|
|
38
42
|
console.log(pc.cyan("Running unit tests..."));
|
|
39
43
|
// Check if local stack is running for integration tests
|
|
40
|
-
const
|
|
44
|
+
const slot = options.slot ?? 0;
|
|
45
|
+
const localStackUp = isLocalStackRunning(slot);
|
|
41
46
|
if (localStackUp) {
|
|
42
47
|
console.log(pc.dim("Local stack detected - integration tests will use local services"));
|
|
43
48
|
}
|
|
@@ -63,8 +68,8 @@ async function runUnitTests(projectRoot, options) {
|
|
|
63
68
|
...process.env,
|
|
64
69
|
// If local stack is running, use it for tests
|
|
65
70
|
...(localStackUp && {
|
|
66
|
-
DATABASE_URL:
|
|
67
|
-
REDIS_URL:
|
|
71
|
+
DATABASE_URL: `postgresql://postgres:postgres@localhost:${slotPort(5432, slot)}/agentmesh`,
|
|
72
|
+
REDIS_URL: `redis://localhost:${slotPort(6380, slot)}/0`,
|
|
68
73
|
}),
|
|
69
74
|
},
|
|
70
75
|
});
|
|
@@ -78,10 +83,11 @@ async function runUnitTests(projectRoot, options) {
|
|
|
78
83
|
async function runE2ETests(projectRoot, options) {
|
|
79
84
|
console.log(pc.cyan("Running E2E tests..."));
|
|
80
85
|
// E2E tests require the local stack to be running
|
|
81
|
-
const
|
|
86
|
+
const slot = options.slot ?? 0;
|
|
87
|
+
const localStackUp = isLocalStackRunning(slot);
|
|
82
88
|
if (!localStackUp) {
|
|
83
89
|
console.log(pc.yellow("Warning: Local stack is not running."));
|
|
84
|
-
console.log(pc.dim(
|
|
90
|
+
console.log(pc.dim(`Start it with: agentmesh local up --slot ${slot}`));
|
|
85
91
|
console.log();
|
|
86
92
|
}
|
|
87
93
|
const args = ["pnpm", "--filter", "@agentmesh/admin", "test:e2e"];
|
|
@@ -96,7 +102,7 @@ async function runE2ETests(projectRoot, options) {
|
|
|
96
102
|
...process.env,
|
|
97
103
|
// Point to local stack if running
|
|
98
104
|
...(localStackUp && {
|
|
99
|
-
PLAYWRIGHT_BASE_URL:
|
|
105
|
+
PLAYWRIGHT_BASE_URL: `http://localhost:${slotPort(3000, slot)}`,
|
|
100
106
|
}),
|
|
101
107
|
},
|
|
102
108
|
});
|
package/dist/cli/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/cli/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/cli/test.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export interface AgentConfig {
|
|
|
5
5
|
workdir?: string;
|
|
6
6
|
model?: string;
|
|
7
7
|
teams?: string[];
|
|
8
|
+
/** agent_type sent to hub on registration. Defaults to "worker". */
|
|
9
|
+
agentType?: "worker" | "system" | "autonomous";
|
|
8
10
|
}
|
|
9
11
|
export interface Config {
|
|
10
12
|
apiKey: string;
|
|
@@ -62,6 +64,15 @@ export interface AgentState {
|
|
|
62
64
|
pendingHandoffOldestAgeMinutes?: number;
|
|
63
65
|
/** Most recent SLA alert timestamp */
|
|
64
66
|
pendingHandoffAlertAt?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Last restart decision from the done-state guard (Epic #497).
|
|
69
|
+
* One of: "resumed" | "idle" | "blocked"
|
|
70
|
+
*/
|
|
71
|
+
lastRestartState?: string;
|
|
72
|
+
/** Human-readable reason for the last restart decision */
|
|
73
|
+
lastRestartReason?: string;
|
|
74
|
+
/** ISO timestamp of when the last restart decision was made */
|
|
75
|
+
lastRestartDecisionAt?: string;
|
|
65
76
|
}
|
|
66
77
|
export interface State {
|
|
67
78
|
agents: AgentState[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,MAAM,EAAE,yBAAyB;IACjC,QAAQ,EAAE;QACR,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,iBAAiB;KACzB;IACD,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode Auth Guard — Epics #470 + #490
|
|
3
|
+
*
|
|
4
|
+
* Implements symlink-first auth linking, startup preflight, schema validation,
|
|
5
|
+
* temp-path rejection, and periodic healthcheck to eliminate per-agent auth
|
|
6
|
+
* drift permanently and guard against runtime auth.type errors.
|
|
7
|
+
*
|
|
8
|
+
* Strategy:
|
|
9
|
+
* 1. Canonical store: ~/.local/share/opencode/auth.json
|
|
10
|
+
* 2. Per-agent auth: ~/.agentmesh/opencode-data/<agent>/opencode/auth.json
|
|
11
|
+
* -> Always a symlink pointing to canonical store (never a temp-path).
|
|
12
|
+
* -> If a stale regular file or temp-path symlink exists, replace safely.
|
|
13
|
+
* -> If canonical missing: write a validated real-file copy as fallback.
|
|
14
|
+
* 3. Schema validation: auth.json must contain a valid `type` field.
|
|
15
|
+
* 4. Startup preflight: validate before runner boot; one auto-repair attempt.
|
|
16
|
+
* 5. Periodic healthcheck: re-validate on interval + exponential backoff.
|
|
17
|
+
*/
|
|
18
|
+
export declare const CANONICAL_AUTH_PATH: string;
|
|
19
|
+
export declare const AGENTMESH_OPENCODE_DATA_ROOT: string;
|
|
20
|
+
export type AuthLinkStatus = "ok" | "repaired" | "degraded" | "no-canonical";
|
|
21
|
+
/** Structured result of auth schema validation (#490) */
|
|
22
|
+
export interface AuthSchemaValidation {
|
|
23
|
+
valid: boolean;
|
|
24
|
+
/** The raw parsed object, if parsing succeeded */
|
|
25
|
+
parsed?: Record<string, unknown>;
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface AuthGuardResult {
|
|
29
|
+
status: AuthLinkStatus;
|
|
30
|
+
agentAuthPath: string;
|
|
31
|
+
canonicalAuthPath: string;
|
|
32
|
+
message: string;
|
|
33
|
+
}
|
|
34
|
+
export interface HealthCheckEvent {
|
|
35
|
+
type: "auth-health-ok" | "auth-health-degraded" | "auth-health-repaired";
|
|
36
|
+
agentName: string;
|
|
37
|
+
agentAuthPath: string;
|
|
38
|
+
message: string;
|
|
39
|
+
timestamp: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns the per-agent auth.json path.
|
|
43
|
+
*/
|
|
44
|
+
export declare function agentAuthPath(agentName: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Returns the per-agent opencode dir.
|
|
47
|
+
*/
|
|
48
|
+
export declare function agentOpencodeDir(agentName: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Validates that canonical auth.json exists and can be parsed as JSON.
|
|
51
|
+
*/
|
|
52
|
+
export declare function validateCanonicalAuth(canonicalPath?: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Checks whether agentAuthPath is already a valid symlink to a readable target.
|
|
55
|
+
*/
|
|
56
|
+
export declare function isValidAuthSymlink(authPath: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Returns true if the given path is a temp/ephemeral path that must not be
|
|
59
|
+
* used as an auth symlink target. (#490)
|
|
60
|
+
*/
|
|
61
|
+
export declare function isTempPath(p: string): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Validates that an auth.json file has the minimum required schema:
|
|
64
|
+
* - Parseable JSON
|
|
65
|
+
* - Contains a `type` field (string) — prevents `auth.type undefined` crash (#490)
|
|
66
|
+
*
|
|
67
|
+
* Reads from `authPath` (follows symlinks via readFileSync).
|
|
68
|
+
*/
|
|
69
|
+
export declare function validateAuthSchema(authPath: string): AuthSchemaValidation;
|
|
70
|
+
/**
|
|
71
|
+
* Checks if the symlink at authPath points to a temp path.
|
|
72
|
+
* Returns the target path if it's a temp path, null otherwise. (#490)
|
|
73
|
+
*/
|
|
74
|
+
export declare function getSymlinkTempTarget(authPath: string): string | null;
|
|
75
|
+
/**
|
|
76
|
+
* Writes a real validated auth file copy from canonical source. (#490)
|
|
77
|
+
*
|
|
78
|
+
* Used as fallback when canonical auth is present but symlinking fails,
|
|
79
|
+
* or as a recovery path when no persistent canonical exists yet.
|
|
80
|
+
* Strips non-Anthropic provider keys (e.g., xai) to keep agent minimal.
|
|
81
|
+
* Sets file permissions to 0o600.
|
|
82
|
+
*
|
|
83
|
+
* Returns true if written successfully.
|
|
84
|
+
*/
|
|
85
|
+
export declare function writeRealAuthFile(authPath: string, canonicalPath?: string): {
|
|
86
|
+
written: boolean;
|
|
87
|
+
backedUp?: string;
|
|
88
|
+
error?: string;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Safely replaces agentAuthPath with a symlink to canonicalPath.
|
|
92
|
+
* If a regular file already exists it is backed up first.
|
|
93
|
+
*/
|
|
94
|
+
export declare function linkAgentAuth(authPath: string, canonicalPath?: string): {
|
|
95
|
+
linked: boolean;
|
|
96
|
+
backedUp?: string;
|
|
97
|
+
error?: string;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Ensures the per-agent auth file is a valid symlink to canonical auth.
|
|
101
|
+
*
|
|
102
|
+
* Epics #470 + #490 hardening:
|
|
103
|
+
* - Rejects temp-path symlink targets (e.g., /tmp/...) and replaces them.
|
|
104
|
+
* - Validates auth schema (auth.type must be present) after linking.
|
|
105
|
+
* - Falls back to writeRealAuthFile() if symlinking fails but canonical is valid.
|
|
106
|
+
*
|
|
107
|
+
* Called from prepareOpenCodeRuntime() on every startup.
|
|
108
|
+
*/
|
|
109
|
+
export declare function ensureAgentAuthLink(agentName: string): AuthGuardResult;
|
|
110
|
+
/**
|
|
111
|
+
* Startup preflight: ensure auth link and validate once more.
|
|
112
|
+
*
|
|
113
|
+
* Returns true if auth is ready, false if agent should be marked degraded.
|
|
114
|
+
* Performs one auto-repair attempt on failure.
|
|
115
|
+
*/
|
|
116
|
+
export declare function preflightAgentAuth(agentName: string): {
|
|
117
|
+
ok: boolean;
|
|
118
|
+
result: AuthGuardResult;
|
|
119
|
+
};
|
|
120
|
+
export interface AuthHealthWatcher {
|
|
121
|
+
stop: () => void;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Starts a periodic auth healthcheck for an agent.
|
|
125
|
+
*
|
|
126
|
+
* On failure: emits a structured event and attempts repair.
|
|
127
|
+
* Uses exponential backoff up to MAX_BACKOFF_INTERVAL_MS on repeated failures.
|
|
128
|
+
*
|
|
129
|
+
* @param agentName Agent name
|
|
130
|
+
* @param onEvent Callback for health events (for structured logging/alerting)
|
|
131
|
+
*/
|
|
132
|
+
export declare function startAuthHealthWatcher(agentName: string, onEvent: (event: HealthCheckEvent) => void): AuthHealthWatcher;
|
|
133
|
+
export interface DoctorAgentReport {
|
|
134
|
+
agentName: string;
|
|
135
|
+
authPath: string;
|
|
136
|
+
isSymlink: boolean;
|
|
137
|
+
symlinkTarget: string | null;
|
|
138
|
+
isValid: boolean;
|
|
139
|
+
status: AuthLinkStatus;
|
|
140
|
+
message: string;
|
|
141
|
+
}
|
|
142
|
+
export interface DoctorReport {
|
|
143
|
+
canonicalAuthPath: string;
|
|
144
|
+
canonicalValid: boolean;
|
|
145
|
+
agents: DoctorAgentReport[];
|
|
146
|
+
overallOk: boolean;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Generates a diagnostic report for all agents (or a specific one).
|
|
150
|
+
* If `repair` is true, attempts to fix any broken links.
|
|
151
|
+
*/
|
|
152
|
+
export declare function runAuthDoctor(options: {
|
|
153
|
+
agentNames?: string[];
|
|
154
|
+
repair?: boolean;
|
|
155
|
+
}): DoctorReport;
|