fix: a CLI push decides agent identity handling by the tracked file's type

An agent retyped into another resource by a push kept neither its value's `on_behalf_of` as the
file stated it nor clear of the old agent's identity. The file's type now decides, and only a
deployed agent's identity is claimed back.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
hugocasa
2026-09-25 18:54:50 +02:00
co-authored by Claude Opus 5.5
parent aca393d19f
commit 0fc7fe757f
2 changed files with 12 additions and 8 deletions
+4 -2
View File
@@ -199,14 +199,16 @@ export function agentOnBehalfOf(
localResource: ResourceFile,
permissionedAsContext: PermissionedAsContext | undefined
): string | undefined {
if ((deployed?.resource_type ?? localResource.resource_type) !== "ai_agent") {
// What the push writes is the tracked file's type: an agent retyped into
// another resource keeps its value exactly as the file states it.
if (localResource.resource_type !== "ai_agent") {
return undefined;
}
const local = localResource.value;
if (local && typeof local === "object") {
delete local.on_behalf_of;
}
const value = deployed?.value;
const value = deployed?.resource_type === "ai_agent" ? deployed.value : undefined;
const onBehalfOf =
value && typeof value === "object" ? value.on_behalf_of : undefined;
if (deployed && onBehalfOf !== undefined) {
@@ -46,10 +46,12 @@ test("anyone else claims nothing", () => {
expect(local.value.on_behalf_of).toBeUndefined();
});
test("other resources are left alone", () => {
const deployed = { resource_type: "json", value: { on_behalf_of: "u/bob" } } as any;
const local = { resource_type: "json", value: { on_behalf_of: "u/x" } } as any;
expect(agentOnBehalfOf(deployed, local, ctx(true))).toBeUndefined();
expect(local.value.on_behalf_of).toBe("u/x");
expect(deployed.value.on_behalf_of).toBe("u/bob");
test("other resources are left alone, an agent retyped into one included", () => {
for (const deployedType of ["json", "ai_agent"]) {
const deployed = { resource_type: deployedType, value: { on_behalf_of: "u/bob" } } as any;
const local = { resource_type: "json", value: { on_behalf_of: "u/x" } } as any;
expect(agentOnBehalfOf(deployed, local, ctx(true))).toBeUndefined();
expect(local.value.on_behalf_of).toBe("u/x");
expect(deployed.value.on_behalf_of).toBe("u/bob");
}
});