fix: surface upstream gateway timeout for remote OpenClaw/Tailscale connections (#94)

* surface gateway timeout for tailscale

* talescale fix #2 - attempt 1

* luke findings fix#1

* add narrow log for clientId

* prod safe proxy log

* fix log visibility

* LAN connection & subagent SOUL|IDENTITY fixes

* Initialize missing files for subagent SOUL|IDENTITY

* surface missing files in UI

* capturing agent - runtime,identity,session

* plugin-install fix

* fix: recover agent workspace for marketplace installs

* fix: recover agent workspace and identity name from file provenance

* fix: tolerate webchat session patch blocks during permission updates
This commit is contained in:
gsknnft
2026-04-03 18:57:36 -04:00
committed by GitHub
parent 4be98d7080
commit a18c8c630c
28 changed files with 1174 additions and 76 deletions
+29 -4
View File
@@ -45,7 +45,7 @@ describe("hydrateAgentFleetFromGateway", () => {
{
id: "agent-1",
name: "One",
identity: { avatarUrl: "https://example.com/one.png" },
identity: { name: "Main Persona", avatarUrl: "https://example.com/one.png" },
},
{
id: "agent-2",
@@ -55,6 +55,27 @@ describe("hydrateAgentFleetFromGateway", () => {
],
};
}
if (method === "agents.files.get") {
const record = params as Record<string, unknown>;
if (record.agentId === "agent-2" && record.name === "IDENTITY.md") {
return {
workspace: "/tmp/workspace-agent-2",
file: {
missing: false,
content: "# IDENTITY.md - Who Am I?\n\n- Name: GLaDOS\n",
path: "/tmp/workspace-agent-2/IDENTITY.md",
},
};
}
return {
workspace: "/tmp/workspace-agent-1",
file: {
missing: false,
content: "# IDENTITY.md - Who Am I?\n\n- Name: Main Persona\n",
path: "/tmp/workspace-agent-1/IDENTITY.md",
},
};
}
if (method === "exec.approvals.get") {
return {
file: {
@@ -126,10 +147,11 @@ describe("hydrateAgentFleetFromGateway", () => {
expect(result.seeds[0]).toEqual(
expect.objectContaining({
agentId: "agent-1",
name: "One",
name: "Main Persona",
runtimeName: "One",
identityName: "Main Persona",
sessionDisplayName: "Main",
sessionKey: "agent:agent-1:main",
avatarSeed: "persisted-seed",
avatarProfile: expect.objectContaining({ seed: "persisted-seed" }),
avatarUrl: "https://example.com/one.png",
model: "openai/gpt-4.1",
thinkingLevel: "medium",
@@ -141,6 +163,9 @@ describe("hydrateAgentFleetFromGateway", () => {
expect(result.seeds[1]).toEqual(
expect.objectContaining({
agentId: "agent-2",
name: "GLaDOS",
runtimeName: "Two",
identityName: "GLaDOS",
sessionExecHost: "gateway",
sessionExecSecurity: "full",
sessionExecAsk: "off",