@m1a0rz/agent-identity 0.1.5 → 0.1.6
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/src/hooks/sessions-spawn-propagation.d.ts +27 -0
- package/dist/src/hooks/sessions-spawn-propagation.d.ts.map +1 -0
- package/dist/src/hooks/sessions-spawn-propagation.js +45 -0
- package/package.json +1 -1
- package/dist/src/hooks/after-tool-call.d.ts +0 -22
- package/dist/src/hooks/after-tool-call.d.ts.map +0 -1
- package/dist/src/hooks/after-tool-call.js +0 -35
- package/dist/src/hooks/subagent-spawned.d.ts +0 -30
- package/dist/src/hooks/subagent-spawned.d.ts.map +0 -1
- package/dist/src/hooks/subagent-spawned.js +0 -30
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* - UserPool login via /identity login (OIDC URL returned directly, no HTTP start endpoint)
|
|
5
5
|
* - Credential hosting: list-credentials, fetch <provider>, set <provider> <envVar>
|
|
6
6
|
* - TIP token via AgentIdentity GetWorkloadAccessTokenForJWT in before_agent_start
|
|
7
|
-
* - TIP/session propagation
|
|
7
|
+
* - TIP/session propagation: before_tool_call (sessions_send params.sessionKey), subagent_spawned (sessions_spawn)
|
|
8
8
|
* - Optional AuthZ in before_tool_call
|
|
9
9
|
* - HTTP callback: /identity/oauth/callback (OIDC login). Credential OAuth uses Identity-provided callback.
|
|
10
10
|
* - Tools: identity_whoami, identity_logout
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAyD7D,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,QAkUtD"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* - UserPool login via /identity login (OIDC URL returned directly, no HTTP start endpoint)
|
|
5
5
|
* - Credential hosting: list-credentials, fetch <provider>, set <provider> <envVar>
|
|
6
6
|
* - TIP token via AgentIdentity GetWorkloadAccessTokenForJWT in before_agent_start
|
|
7
|
-
* - TIP/session propagation
|
|
7
|
+
* - TIP/session propagation: before_tool_call (sessions_send params.sessionKey), subagent_spawned (sessions_spawn)
|
|
8
8
|
* - Optional AuthZ in before_tool_call
|
|
9
9
|
* - HTTP callback: /identity/oauth/callback (OIDC login). Credential OAuth uses Identity-provided callback.
|
|
10
10
|
* - Tools: identity_whoami, identity_logout
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import { createIdentityCommand, createIdCommand } from "./src/commands/identity-commands.js";
|
|
13
13
|
import { createBeforeAgentStartHandler } from "./src/hooks/before-agent-start.js";
|
|
14
14
|
import { createSessionsSendPropagationHandler } from "./src/hooks/sessions-send-propagation.js";
|
|
15
|
+
import { createSessionsSpawnPropagationHandler } from "./src/hooks/sessions-spawn-propagation.js";
|
|
15
16
|
import { createBeforeToolCallHandler } from "./src/hooks/before-tool-call.js";
|
|
16
17
|
import { createOIDCCallbackHandler, createOIDCCallbackHandlerLazy, } from "./src/routes/oidc-login.js";
|
|
17
18
|
import { IdentityClient, resolveOIDCConfig, } from "./src/services/identity-client.js";
|
|
@@ -189,7 +190,7 @@ export default function register(api) {
|
|
|
189
190
|
}
|
|
190
191
|
if (target.channel === "feishu") {
|
|
191
192
|
try {
|
|
192
|
-
const cfg =
|
|
193
|
+
const cfg = api.runtime.config.loadConfig();
|
|
193
194
|
await sendNotificationFeishu(cfg, target.to, text, target.accountId);
|
|
194
195
|
}
|
|
195
196
|
catch (err) {
|
|
@@ -297,6 +298,12 @@ export default function register(api) {
|
|
|
297
298
|
configWorkloadName: identityCfg?.workloadName,
|
|
298
299
|
logger: api.logger,
|
|
299
300
|
}));
|
|
301
|
+
api.on("subagent_spawned", createSessionsSpawnPropagationHandler({
|
|
302
|
+
storeDir,
|
|
303
|
+
identityService,
|
|
304
|
+
configWorkloadName: identityCfg?.workloadName,
|
|
305
|
+
logger: api.logger,
|
|
306
|
+
}));
|
|
300
307
|
}
|
|
301
308
|
if (authz?.enable) {
|
|
302
309
|
api.on("before_tool_call", createBeforeToolCallHandler({
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* subagent_spawned hook: propagate TIP and session to child when sessions_spawn
|
|
3
|
+
* creates a subagent.
|
|
4
|
+
*
|
|
5
|
+
* First-time spawn does not go through sessions_send, so we handle it here.
|
|
6
|
+
* Uses requester's TIP token as JWT input for delegation (user → main → sub).
|
|
7
|
+
* Copies session (userToken) to child.
|
|
8
|
+
*/
|
|
9
|
+
import type { IdentityService } from "../services/identity-service.js";
|
|
10
|
+
export type SessionsSpawnPropagationDeps = {
|
|
11
|
+
storeDir: string;
|
|
12
|
+
identityService: IdentityService;
|
|
13
|
+
configWorkloadName?: string;
|
|
14
|
+
logger: {
|
|
15
|
+
info?: (msg: string) => void;
|
|
16
|
+
debug?: (msg: string) => void;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export declare function createSessionsSpawnPropagationHandler(deps: SessionsSpawnPropagationDeps): (_event: {
|
|
20
|
+
childSessionKey: string;
|
|
21
|
+
runId: string;
|
|
22
|
+
agentId: string;
|
|
23
|
+
}, ctx: {
|
|
24
|
+
requesterSessionKey?: string;
|
|
25
|
+
childSessionKey?: string;
|
|
26
|
+
}) => Promise<void>;
|
|
27
|
+
//# sourceMappingURL=sessions-spawn-propagation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions-spawn-propagation.d.ts","sourceRoot":"","sources":["../../../src/hooks/sessions-spawn-propagation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAKvE,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACzE,CAAC;AAEF,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,4BAA4B,IAIpF,QAAQ;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACnE,KAAK;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,KAC9D,OAAO,CAAC,IAAI,CAAC,CAsCjB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* subagent_spawned hook: propagate TIP and session to child when sessions_spawn
|
|
3
|
+
* creates a subagent.
|
|
4
|
+
*
|
|
5
|
+
* First-time spawn does not go through sessions_send, so we handle it here.
|
|
6
|
+
* Uses requester's TIP token as JWT input for delegation (user → main → sub).
|
|
7
|
+
* Copies session (userToken) to child.
|
|
8
|
+
*/
|
|
9
|
+
import { getSession, setSession } from "../store/session-store.js";
|
|
10
|
+
import { getTIPToken } from "../store/tip-store.js";
|
|
11
|
+
import { fetchAndStoreTIP } from "../services/tip-acquisition.js";
|
|
12
|
+
export function createSessionsSpawnPropagationHandler(deps) {
|
|
13
|
+
const { storeDir, identityService, configWorkloadName, logger } = deps;
|
|
14
|
+
return async (_event, ctx) => {
|
|
15
|
+
const callerSessionKey = ctx.requesterSessionKey;
|
|
16
|
+
const targetSessionKey = ctx.childSessionKey ?? _event.childSessionKey;
|
|
17
|
+
if (!callerSessionKey || !targetSessionKey || callerSessionKey === targetSessionKey) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const callerTIP = await getTIPToken(storeDir, callerSessionKey);
|
|
22
|
+
if (!callerTIP) {
|
|
23
|
+
logger.debug?.(`agent-identity: sessions_spawn skip (requester ${callerSessionKey.slice(0, 24)}... has no TIP)`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
await fetchAndStoreTIP({
|
|
27
|
+
storeDir,
|
|
28
|
+
sessionKey: targetSessionKey,
|
|
29
|
+
identityService,
|
|
30
|
+
jwtForExchange: callerTIP.token,
|
|
31
|
+
sub: callerTIP.sub,
|
|
32
|
+
configWorkloadName,
|
|
33
|
+
parentSessionKey: callerSessionKey,
|
|
34
|
+
});
|
|
35
|
+
logger.info?.(`agent-identity: TIP propagated to ${targetSessionKey.slice(0, 24)}... via sessions_spawn`);
|
|
36
|
+
const callerSession = await getSession(storeDir, callerSessionKey);
|
|
37
|
+
if (callerSession) {
|
|
38
|
+
await setSession(storeDir, targetSessionKey, callerSession);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
logger.info?.(`agent-identity: sessions_spawn propagation failed: ${String(err)}`);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@m1a0rz/agent-identity",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Agent Identity: UserPool (用户池) login, TIP token (工作负载令牌), credential hosting (凭据托管 OAuth2/API key), optional tool risk approval. Integrates with Volcengine 智能体身份和权限管理平台.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* after_tool_call hook: propagate TIP token to child session on sessions_spawn.
|
|
3
|
-
* When parent spawns a sub-agent, inherit TIP with extended chain-of-custody.
|
|
4
|
-
*/
|
|
5
|
-
export type AfterToolCallDeps = {
|
|
6
|
-
storeDir: string;
|
|
7
|
-
logger: {
|
|
8
|
-
info?: (msg: string) => void;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
export declare function createAfterToolCallHandler(deps: AfterToolCallDeps): (event: {
|
|
12
|
-
toolName: string;
|
|
13
|
-
params: Record<string, unknown>;
|
|
14
|
-
result?: unknown;
|
|
15
|
-
error?: string;
|
|
16
|
-
durationMs?: number;
|
|
17
|
-
}, ctx: {
|
|
18
|
-
agentId?: string;
|
|
19
|
-
sessionKey?: string;
|
|
20
|
-
toolName: string;
|
|
21
|
-
}) => Promise<void>;
|
|
22
|
-
//# sourceMappingURL=after-tool-call.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"after-tool-call.d.ts","sourceRoot":"","sources":["../../../src/hooks/after-tool-call.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CAC1C,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,IAI9D,OAAO;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,EACD,KAAK;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAC/D,OAAO,CAAC,IAAI,CAAC,CA4BjB"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* after_tool_call hook: propagate TIP token to child session on sessions_spawn.
|
|
3
|
-
* When parent spawns a sub-agent, inherit TIP with extended chain-of-custody.
|
|
4
|
-
*/
|
|
5
|
-
import { getTIPToken, setTIPToken } from "../store/tip-store.js";
|
|
6
|
-
export function createAfterToolCallHandler(deps) {
|
|
7
|
-
const { storeDir, logger } = deps;
|
|
8
|
-
return async (event, ctx) => {
|
|
9
|
-
if (event.toolName !== "sessions_spawn")
|
|
10
|
-
return;
|
|
11
|
-
const result = event.result;
|
|
12
|
-
const childSessionKey = result?.childSessionKey;
|
|
13
|
-
if (!childSessionKey || typeof childSessionKey !== "string")
|
|
14
|
-
return;
|
|
15
|
-
const parentSessionKey = ctx.sessionKey;
|
|
16
|
-
if (!parentSessionKey)
|
|
17
|
-
return;
|
|
18
|
-
try {
|
|
19
|
-
const parentTIP = await getTIPToken(storeDir, parentSessionKey);
|
|
20
|
-
if (!parentTIP)
|
|
21
|
-
return;
|
|
22
|
-
const childTIP = {
|
|
23
|
-
...parentTIP,
|
|
24
|
-
chain: [...(parentTIP.chain ?? []), ctx.agentId ?? "unknown"],
|
|
25
|
-
parentSessionKey,
|
|
26
|
-
issuedAt: Date.now(),
|
|
27
|
-
};
|
|
28
|
-
await setTIPToken(storeDir, childSessionKey, childTIP);
|
|
29
|
-
logger.info?.(`agent-identity: TIP propagated to child ${childSessionKey.slice(0, 32)}...`);
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
logger.info?.(`agent-identity: failed to propagate TIP to child: ${String(err)}`);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* subagent_spawned hook: propagate TIP token to child session.
|
|
3
|
-
* Replaces after_tool_call (sessions_spawn) with dedicated lifecycle hook.
|
|
4
|
-
* When parent spawns a sub-agent, inherit TIP with extended chain-of-custody.
|
|
5
|
-
*/
|
|
6
|
-
export type SubagentSpawnedDeps = {
|
|
7
|
-
storeDir: string;
|
|
8
|
-
logger: {
|
|
9
|
-
info?: (msg: string) => void;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
export declare function createSubagentSpawnedHandler(deps: SubagentSpawnedDeps): (event: {
|
|
13
|
-
runId: string;
|
|
14
|
-
childSessionKey: string;
|
|
15
|
-
agentId: string;
|
|
16
|
-
label?: string;
|
|
17
|
-
mode: "run" | "session";
|
|
18
|
-
requester?: {
|
|
19
|
-
channel?: string;
|
|
20
|
-
accountId?: string;
|
|
21
|
-
to?: string;
|
|
22
|
-
threadId?: string | number;
|
|
23
|
-
};
|
|
24
|
-
threadRequested: boolean;
|
|
25
|
-
}, ctx: {
|
|
26
|
-
runId?: string;
|
|
27
|
-
childSessionKey?: string;
|
|
28
|
-
requesterSessionKey?: string;
|
|
29
|
-
}) => Promise<void>;
|
|
30
|
-
//# sourceMappingURL=subagent-spawned.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-spawned.d.ts","sourceRoot":"","sources":["../../../src/hooks/subagent-spawned.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CAC1C,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,IAIlE,OAAO;IACL,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC9F,eAAe,EAAE,OAAO,CAAC;CAC1B,EACD,KAAK;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,KAC9E,OAAO,CAAC,IAAI,CAAC,CAsBjB"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* subagent_spawned hook: propagate TIP token to child session.
|
|
3
|
-
* Replaces after_tool_call (sessions_spawn) with dedicated lifecycle hook.
|
|
4
|
-
* When parent spawns a sub-agent, inherit TIP with extended chain-of-custody.
|
|
5
|
-
*/
|
|
6
|
-
import { getTIPToken, setTIPToken } from "../store/tip-store.js";
|
|
7
|
-
export function createSubagentSpawnedHandler(deps) {
|
|
8
|
-
const { storeDir, logger } = deps;
|
|
9
|
-
return async (event, ctx) => {
|
|
10
|
-
const parentSessionKey = ctx.requesterSessionKey;
|
|
11
|
-
if (!parentSessionKey)
|
|
12
|
-
return;
|
|
13
|
-
try {
|
|
14
|
-
const parentTIP = await getTIPToken(storeDir, parentSessionKey);
|
|
15
|
-
if (!parentTIP)
|
|
16
|
-
return;
|
|
17
|
-
const childTIP = {
|
|
18
|
-
...parentTIP,
|
|
19
|
-
chain: [...(parentTIP.chain ?? []), event.agentId ?? "unknown"],
|
|
20
|
-
parentSessionKey,
|
|
21
|
-
issuedAt: Date.now(),
|
|
22
|
-
};
|
|
23
|
-
await setTIPToken(storeDir, event.childSessionKey, childTIP);
|
|
24
|
-
logger.info?.(`agent-identity: TIP propagated to child ${event.childSessionKey.slice(0, 32)}...`);
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
logger.info?.(`agent-identity: failed to propagate TIP to child: ${String(err)}`);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|