@theokit/sdk 3.2.3 → 3.3.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/index.cjs CHANGED
@@ -9016,7 +9016,9 @@ async function vetoFromPluginPreHook(inputs, call, callId, events) {
9016
9016
  name: call.name,
9017
9017
  args: call.input,
9018
9018
  agentId: inputs.agentId,
9019
- runId: inputs.runId
9019
+ runId: inputs.runId,
9020
+ // SE1 — thread the run's permission mode so a PermissionPlugin gates per-run.
9021
+ ...inputs.permissionMode !== void 0 ? { permissionMode: inputs.permissionMode } : {}
9020
9022
  });
9021
9023
  if (pluginVeto === void 0) return void 0;
9022
9024
  emitRunEvent(inputs.runEventSink, {
@@ -13441,6 +13443,10 @@ function buildLoopInputs(options, runId, userText) {
13441
13443
  ...options.onDelta !== void 0 ? { onDelta: options.onDelta } : {},
13442
13444
  ...options.sendOptions.toolChoice !== void 0 ? { toolChoice: options.sendOptions.toolChoice } : {},
13443
13445
  ...options.sendOptions.activeTools !== void 0 ? { activeTools: options.sendOptions.activeTools } : {},
13446
+ // SE1 — resolve the run's permission mode: per-send wins over creation-time.
13447
+ ...(options.sendOptions.permissionMode ?? options.agentOptions.permissionMode) !== void 0 ? {
13448
+ permissionMode: options.sendOptions.permissionMode ?? options.agentOptions.permissionMode
13449
+ } : {},
13444
13450
  ...options.priorMessages !== void 0 ? { priorMessages: options.priorMessages } : {},
13445
13451
  ...options.memoryTools !== void 0 && options.memoryTools.length > 0 ? { memoryTools: options.memoryTools } : {},
13446
13452
  ...buildCustomToolsInput(
@@ -22846,13 +22852,17 @@ function applyMode(verdict, mode, explicit) {
22846
22852
  return verdict;
22847
22853
  // allow stays allow
22848
22854
  case "bypass":
22855
+ case "bypassPermissions":
22849
22856
  return "allow";
22850
22857
  }
22851
22858
  }
22852
22859
  function argMatches(matcher, value) {
22853
22860
  if (typeof matcher === "function") return matcher(value);
22854
22861
  if (value === void 0) return false;
22855
- if (matcher instanceof RegExp) return matcher.test(String(value));
22862
+ if (matcher instanceof RegExp) {
22863
+ matcher.lastIndex = 0;
22864
+ return matcher.test(String(value));
22865
+ }
22856
22866
  return matcher === value;
22857
22867
  }
22858
22868
  var PermissionEngine = class {
@@ -22896,19 +22906,19 @@ async function resolveAsk(opts, name, args, mode) {
22896
22906
  } catch {
22897
22907
  return { block: true, message: `permission gate error (fail-closed): ${name}` };
22898
22908
  }
22899
- return decision.behavior === "deny" ? { block: true, message: decision.message ?? `denied: ${name}` } : void 0;
22909
+ return decision?.behavior === "allow" ? void 0 : { block: true, message: decision?.message ?? `denied: ${name}` };
22900
22910
  }
22901
22911
  return opts.onAsk ? opts.onAsk(name) : { block: true, message: `requires approval: ${name}` };
22902
22912
  }
22903
22913
  function createPermissionPlugin(engine, opts = {}) {
22904
- const mode = opts.mode ?? "default";
22905
22914
  return definePlugin({
22906
22915
  name: opts.name ?? "permission-engine",
22907
22916
  version: "1.0.0",
22908
22917
  kind: "general",
22909
22918
  register(ctx) {
22910
22919
  ctx.on("pre_tool_call", async (rawCtx) => {
22911
- const { name, args } = rawCtx;
22920
+ const { name, args, permissionMode } = rawCtx;
22921
+ const mode = permissionMode ?? opts.mode ?? "default";
22912
22922
  const action = engine.evaluate(name, args, mode);
22913
22923
  if (action === "deny") {
22914
22924
  return { block: true, message: `denied by permission engine: ${name}` };