@typescript-agent-harness/permissions 0.20.0 → 0.22.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/dist/approval.d.ts +11 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +25 -0
- package/dist/approval.js.map +1 -0
- package/dist/contract.d.ts +2 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +2 -0
- package/dist/contract.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +3 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +23 -1
- package/dist/plugin.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Plugin } from "@typescript-agent-harness/core";
|
|
2
|
+
import type { GuardedCall } from "./types.js";
|
|
3
|
+
export type ApprovalAnswer = "yes" | "no" | "always";
|
|
4
|
+
export type ApprovalPluginOptions = {
|
|
5
|
+
/** Tools that need a human answer before each call. */
|
|
6
|
+
tools: string[];
|
|
7
|
+
/** "always" skips the question for that tool until the runtime stops. Resolve "no" once `signal` aborts. */
|
|
8
|
+
ask(call: GuardedCall["call"], signal?: AbortSignal): Promise<ApprovalAnswer>;
|
|
9
|
+
};
|
|
10
|
+
export declare function approvalPlugin(options: ApprovalPluginOptions): Plugin;
|
|
11
|
+
//# sourceMappingURL=approval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAG7D,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC;AAErD,MAAM,MAAM,qBAAqB,GAAG;IAClC,uDAAuD;IACvD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4GAA4G;IAC5G,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC/E,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAwBrE"}
|
package/dist/approval.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { TOOL_EXECUTE } from "./contract.js";
|
|
2
|
+
import { rejectCall } from "./plugin.js";
|
|
3
|
+
export function approvalPlugin(options) {
|
|
4
|
+
const gated = new Set(options.tools);
|
|
5
|
+
const always = new Set();
|
|
6
|
+
return {
|
|
7
|
+
name: "approval",
|
|
8
|
+
setup(ctx) {
|
|
9
|
+
always.clear();
|
|
10
|
+
ctx.intercept(TOOL_EXECUTE, async (p, next) => {
|
|
11
|
+
const name = p.call.name;
|
|
12
|
+
if (!gated.has(name) || always.has(name))
|
|
13
|
+
return next(p);
|
|
14
|
+
const answer = await options.ask(p.call, p.ctx?.signal);
|
|
15
|
+
if (answer === "no") {
|
|
16
|
+
return rejectCall(ctx, p.call, `rejected by user: ${name}. Do not retry the same call; ask the user what to do instead.`);
|
|
17
|
+
}
|
|
18
|
+
if (answer === "always")
|
|
19
|
+
always.add(name);
|
|
20
|
+
return next(p);
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAYzC,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,CAAC,GAAG;YACP,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,SAAS,CAA6B,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;gBACxE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACxD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,OAAO,UAAU,CACf,GAAG,EACH,CAAC,CAAC,IAAI,EACN,qBAAqB,IAAI,gEAAgE,CAC1F,CAAC;gBACJ,CAAC;gBACD,IAAI,MAAM,KAAK,QAAQ;oBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { PermissionService } from "./types.js";
|
|
2
2
|
export declare const PERMISSIONS: import("@typescript-agent-harness/core").ServiceKey<PermissionService>;
|
|
3
|
+
/** Must equal `TOOL_EXECUTE` in the tools package. */
|
|
4
|
+
export declare const TOOL_EXECUTE = "tool.execute";
|
|
3
5
|
//# sourceMappingURL=contract.d.ts.map
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,WAAW,wEAAqD,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,WAAW,wEAAqD,CAAC;AAE9E,sDAAsD;AACtD,eAAO,MAAM,YAAY,iBAAiB,CAAC"}
|
package/dist/contract.js
CHANGED
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAoB,aAAa,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAoB,aAAa,CAAC,CAAC;AAE9E,sDAAsD;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { PERMISSIONS } from "./contract.js";
|
|
2
2
|
export { permissionsPlugin, type PermissionsPluginOptions } from "./plugin.js";
|
|
3
|
+
export { approvalPlugin, type ApprovalAnswer, type ApprovalPluginOptions, } from "./approval.js";
|
|
3
4
|
export type { PermissionDecision, PermissionService } from "./types.js";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAiC,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAiC,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,cAAc,GAGf,MAAM,eAAe,CAAC"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { Plugin } from "@typescript-agent-harness/core";
|
|
1
|
+
import type { Context, Plugin } from "@typescript-agent-harness/core";
|
|
2
|
+
import type { GuardedCall, GuardedResult } from "./types.js";
|
|
2
3
|
export type PermissionsPluginOptions = {
|
|
3
4
|
/** If set, only these tools are visible and executable. */
|
|
4
5
|
allow?: string[];
|
|
5
6
|
/** Always blocked, even if also in allow. */
|
|
6
7
|
deny?: string[];
|
|
7
8
|
};
|
|
9
|
+
export declare function rejectCall(ctx: Context, call: GuardedCall["call"], reason: string): Promise<GuardedResult>;
|
|
8
10
|
export declare function permissionsPlugin(options?: PermissionsPluginOptions): Plugin;
|
|
9
11
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EAGd,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,wBAAwB,GAAG;IACrC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAcxB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,MAAM,CA+BhF"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
import { PERMISSIONS } from "./contract.js";
|
|
1
|
+
import { PERMISSIONS, TOOL_EXECUTE } from "./contract.js";
|
|
2
|
+
export async function rejectCall(ctx, call, reason) {
|
|
3
|
+
await ctx.emit("permission.denied", { tool: call.name, reason });
|
|
4
|
+
const result = {
|
|
5
|
+
callId: call.id,
|
|
6
|
+
name: call.name,
|
|
7
|
+
ok: false,
|
|
8
|
+
output: { error: reason },
|
|
9
|
+
};
|
|
10
|
+
await ctx.emit("tool.failed", {
|
|
11
|
+
callId: call.id,
|
|
12
|
+
tool: call.name,
|
|
13
|
+
error: result.output,
|
|
14
|
+
});
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
2
17
|
export function permissionsPlugin(options = {}) {
|
|
3
18
|
const allow = options.allow ? new Set(options.allow) : undefined;
|
|
4
19
|
const deny = new Set(options.deny ?? []);
|
|
@@ -20,6 +35,13 @@ export function permissionsPlugin(options = {}) {
|
|
|
20
35
|
name: "permissions",
|
|
21
36
|
setup(ctx) {
|
|
22
37
|
ctx.provide(PERMISSIONS, service);
|
|
38
|
+
ctx.intercept(TOOL_EXECUTE, async (p, next) => {
|
|
39
|
+
const decision = service.check(p.call.name, p.call.arguments);
|
|
40
|
+
if (!decision.allow)
|
|
41
|
+
return rejectCall(ctx, p.call, decision.reason);
|
|
42
|
+
await ctx.emit("permission.granted", { tool: p.call.name });
|
|
43
|
+
return next(p);
|
|
44
|
+
});
|
|
23
45
|
},
|
|
24
46
|
};
|
|
25
47
|
}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAe1D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAY,EACZ,IAAyB,EACzB,MAAc;IAEd,MAAM,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,MAAM,MAAM,GAAkB;QAC5B,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;KAC1B,CAAC;IACF,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;QAC5B,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,MAAM,CAAC,MAAM;KACrB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAoC,EAAE;IACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAsB;QACjC,KAAK,CAAC,IAAI;YACR,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,IAAI,EAAE,EAAE,CAAC;YACpE,CAAC;YACD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,IAAI,EAAE,EAAE,CAAC;YACpE,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO,CAAC,IAAI;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC;QAC3C,CAAC;KACF,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,CAAC,GAAG;YACP,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAClC,GAAG,CAAC,SAAS,CAA6B,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;gBACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC9D,IAAI,CAAC,QAAQ,CAAC,KAAK;oBAAE,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrE,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,4 +9,21 @@ export type PermissionService = {
|
|
|
9
9
|
/** If false, hide the tool from the model schema. */
|
|
10
10
|
visible(tool: string): boolean;
|
|
11
11
|
};
|
|
12
|
+
/** Structural view of the tools package `ToolExecution` / `ToolResult` (no import: tools depends on us). */
|
|
13
|
+
export type GuardedCall = {
|
|
14
|
+
call: {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
arguments: unknown;
|
|
18
|
+
};
|
|
19
|
+
ctx?: {
|
|
20
|
+
signal: AbortSignal;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export type GuardedResult = {
|
|
24
|
+
callId: string;
|
|
25
|
+
name: string;
|
|
26
|
+
ok: boolean;
|
|
27
|
+
output: unknown;
|
|
28
|
+
};
|
|
12
29
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAAC;IACxD,qDAAqD;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAAC;IACxD,qDAAqD;IACrD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF,4GAA4G;AAC5G,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,GAAG,CAAC,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typescript-agent-harness/permissions",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Tool permission policy",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -15,9 +15,10 @@
|
|
|
15
15
|
"dist"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@typescript-agent-harness/core": "0.
|
|
18
|
+
"@typescript-agent-harness/core": "0.22.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
+
"@types/node": "^22.18.0",
|
|
21
22
|
"typescript": "^5.9.2"
|
|
22
23
|
},
|
|
23
24
|
"license": "MIT",
|