@theokit/agents 0.44.1 → 0.44.3

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.
@@ -196,6 +196,8 @@ interface CompiledAgentOptions {
196
196
  * (merged with `cwd`, decoupled from inline skills). Absent ⇒ inline (code) config only.
197
197
  */
198
198
  settingSources?: readonly SettingSource[];
199
+ /** Code `Plugin` objects forwarded to `Agent.create({ plugins })` (lifecycle-hook seam). */
200
+ plugins?: readonly unknown[];
199
201
  tools: CompiledTool[];
200
202
  agents: Record<string, CompiledSubAgent>;
201
203
  memory?: MemoryOptions;
@@ -585,6 +587,17 @@ interface DefineAgentConfig<TInput extends z.ZodType = z.ZodType> {
585
587
  * + execution (G2 / ADR-0040); theokit only wires this into `Agent.create({ local.settingSources })`.
586
588
  */
587
589
  settingSources?: readonly SettingSource[];
590
+ /**
591
+ * Code `Plugin` objects forwarded to `Agent.create({ plugins })` — EXTENSION units (tools,
592
+ * commands, model providers, memory adapters). For lifecycle interception use {@link hooks}.
593
+ */
594
+ plugins?: readonly unknown[];
595
+ /**
596
+ * Lifecycle hooks keyed by `HookName` (`pre_tool_call` may veto via `{ block, message }`). Set by
597
+ * the builder's `hooks()`; converted into a code plugin at `build()` and never reaching the SDK
598
+ * under this name — the plugin is the TRANSPORT, this is the contract callers write against.
599
+ */
600
+ hooks?: Readonly<Record<string, unknown>>;
588
601
  /**
589
602
  * MCP servers available to the agent — the builder-chain equivalent of the `@MCP` class
590
603
  * decorator. Each key is a server name; the value is the server configuration. Forwarded
@@ -927,6 +940,34 @@ interface AgentBuilder<TInput extends z.ZodType | UnsetMarker = UnsetMarker, TMo
927
940
  * shell-executing hooks from `.theokit/hooks.json` — opt-in because `.theokit/` is your own repo.
928
941
  */
929
942
  settingSources(sources: readonly SettingSource[]): AgentBuilder<TInput, TModel, TContext, TTools>;
943
+ /**
944
+ * Attach LIFECYCLE HOOKS in code, keyed by `HookName` — the builder-chain seam for intercepting
945
+ * the agent loop. `pre_tool_call` may VETO a tool by returning `{ block: true, message }` before
946
+ * it runs; the other events are observational.
947
+ *
948
+ * ```ts
949
+ * agent().hooks({
950
+ * pre_tool_call: (c) => guard(c.name) ? undefined : { block: true, message: 'not allowed' },
951
+ * on_session_start: () => log('session up'),
952
+ * })
953
+ * ```
954
+ *
955
+ * A hook is delivered internally as a code plugin, but that is TRANSPORT, not the contract — use
956
+ * this instead of hand-wrapping a plugin, so the caller expresses interception rather than
957
+ * assembling plumbing. Call once — a later call replaces the map. Composes with
958
+ * {@link AgentBuilder.plugins}: hooks and plugins are additive, not exclusive.
959
+ */
960
+ hooks(map: Readonly<Record<string, unknown>>): AgentBuilder<TInput, TModel, TContext, TTools>;
961
+ /**
962
+ * Register code `Plugin` objects for this agent — the builder-chain equivalent of
963
+ * `Agent.create({ plugins })`. A plugin is an EXTENSION UNIT: it can register tools and commands,
964
+ * or supply a model provider / memory adapter (`kind: 'general' | 'model-provider' | 'memory'`).
965
+ *
966
+ * For lifecycle interception prefer {@link AgentBuilder.hooks} — a hook needs a plugin only as its
967
+ * transport, and `plugins()` makes the caller assemble that transport by hand. Reach for this when
968
+ * you genuinely have a plugin (a provider, a memory adapter, a tool-registering extension).
969
+ */
970
+ plugins(list: readonly unknown[]): AgentBuilder<TInput, TModel, TContext, TTools>;
930
971
  /**
931
972
  * Declare MCP (Model Context Protocol) servers available to this agent — the builder-chain
932
973
  * equivalent of the `@MCP` class decorator. Each key is a server name; the value is its config
package/dist/bridge.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { c as AGENT_BRAND, d as AfterToolCallContext, e as AgentBuilder, f as AgentDefinition, g as AgentDefinitionError, h as AgentExecutionContext, i as AgentManifest, A as AgentManifestEntry, j as AgentManifestTool, k as AgentRoute, l as AgentRouteContext, m as AgentRunInfo, n as AgentStreamEvent, o as AgentTurnMetadata, p as AgentWalkResult, q as AgentWarningCode, r as AgentsPluginOptions, s as ApiErrorContext, t as ApiErrorDecision, u as ApiErrorPolicy, v as ApprovalRequiredEvent, w as ArtifactChunkEvent, x as ArtifactStartEvent, B as BackgroundDelegation, y as BeforeToolCallContext, z as BudgetExceededError, E as CheckpointSavedEvent, C as CompiledAgentOptions, F as CompiledContextWindow, a as CompiledTool, G as ContextualTool, I as DefineAgentConfig, J as DelegateFn, K as DelegateOptions, M as DelegationError, D as DelegationResult, N as DoneEvent, O as ErrorEvent, P as FileEditEvent, T as InferAgentInput, U as InferAgentToolNames, V as IterationEvent, W as LLMCallContext, _ as McpApprovalSpec, $ as McpRegistryConfig, a0 as McpRequestContext, a1 as McpSelection, a2 as PartialToolCallEvent, a3 as ProcessInputContext, a7 as RunStartedEvent, a8 as ScoreVerdict, a9 as ScoredDelegation, aa as Scorer, ab as SdkAgentHandle, ac as SdkMessage, ad as Segment, ag as StateUpdateEvent, S as StreamEvent, ah as TextDeltaEvent, ai as ThinkingEvent, aj as ToolCallEvent, ak as ToolCallVeto, al as ToolHooks, am as ToolHooksPlugin, an as ToolResultEvent, ao as ToolWalkResult, ap as ToolboxWalkResult, aq as agent, ar as agentsPlugin, as as buildModelSelection, at as compileAgent, au as compileAgentDefinition, av as compileAgentModule, aw as compileContextWindow, ax as compileProjectContext, ay as compileSkills, az as compileTools, aA as contextualTool, aB as createAgentExecutionContext, aC as createApiErrorHandler, aD as createSdkAgentStream, aE as createThinkTagExtractor, aF as createToolHooksPlugin, aG as delegate, aH as delegateBackground, aI as delegateWithScoring, aJ as extractThinkTagStream, aK as generateAgentManifest, aL as generateAgentRoutes, aM as isAgentContext, aN as isAgentDefinition, aO as isApprovalRequired, aP as isDone, aQ as isError, aR as isPartialToolCall, aS as isTextDelta, aT as isToolCall, aU as isToolResult, aX as mcpRegistry, aY as mcpToolApprovals, a_ as projectContextMetadataOnlyKnobs, b2 as resolveMcpServers, b3 as runWithApiErrorHandling, b4 as streamAgentResponse, b5 as streamAgentUIMessages, b6 as toAgentFactory, b7 as translateSdkEvent, b8 as translateToUIMessageStream, b9 as validateUniqueRoutes, ba as walkAgentMetadata } from './bridge-entry-BW1ifbWg.js';
1
+ export { c as AGENT_BRAND, d as AfterToolCallContext, e as AgentBuilder, f as AgentDefinition, g as AgentDefinitionError, h as AgentExecutionContext, i as AgentManifest, A as AgentManifestEntry, j as AgentManifestTool, k as AgentRoute, l as AgentRouteContext, m as AgentRunInfo, n as AgentStreamEvent, o as AgentTurnMetadata, p as AgentWalkResult, q as AgentWarningCode, r as AgentsPluginOptions, s as ApiErrorContext, t as ApiErrorDecision, u as ApiErrorPolicy, v as ApprovalRequiredEvent, w as ArtifactChunkEvent, x as ArtifactStartEvent, B as BackgroundDelegation, y as BeforeToolCallContext, z as BudgetExceededError, E as CheckpointSavedEvent, C as CompiledAgentOptions, F as CompiledContextWindow, a as CompiledTool, G as ContextualTool, I as DefineAgentConfig, J as DelegateFn, K as DelegateOptions, M as DelegationError, D as DelegationResult, N as DoneEvent, O as ErrorEvent, P as FileEditEvent, T as InferAgentInput, U as InferAgentToolNames, V as IterationEvent, W as LLMCallContext, _ as McpApprovalSpec, $ as McpRegistryConfig, a0 as McpRequestContext, a1 as McpSelection, a2 as PartialToolCallEvent, a3 as ProcessInputContext, a7 as RunStartedEvent, a8 as ScoreVerdict, a9 as ScoredDelegation, aa as Scorer, ab as SdkAgentHandle, ac as SdkMessage, ad as Segment, ag as StateUpdateEvent, S as StreamEvent, ah as TextDeltaEvent, ai as ThinkingEvent, aj as ToolCallEvent, ak as ToolCallVeto, al as ToolHooks, am as ToolHooksPlugin, an as ToolResultEvent, ao as ToolWalkResult, ap as ToolboxWalkResult, aq as agent, ar as agentsPlugin, as as buildModelSelection, at as compileAgent, au as compileAgentDefinition, av as compileAgentModule, aw as compileContextWindow, ax as compileProjectContext, ay as compileSkills, az as compileTools, aA as contextualTool, aB as createAgentExecutionContext, aC as createApiErrorHandler, aD as createSdkAgentStream, aE as createThinkTagExtractor, aF as createToolHooksPlugin, aG as delegate, aH as delegateBackground, aI as delegateWithScoring, aJ as extractThinkTagStream, aK as generateAgentManifest, aL as generateAgentRoutes, aM as isAgentContext, aN as isAgentDefinition, aO as isApprovalRequired, aP as isDone, aQ as isError, aR as isPartialToolCall, aS as isTextDelta, aT as isToolCall, aU as isToolResult, aX as mcpRegistry, aY as mcpToolApprovals, a_ as projectContextMetadataOnlyKnobs, b2 as resolveMcpServers, b3 as runWithApiErrorHandling, b4 as streamAgentResponse, b5 as streamAgentUIMessages, b6 as toAgentFactory, b7 as translateSdkEvent, b8 as translateToUIMessageStream, b9 as validateUniqueRoutes, ba as walkAgentMetadata } from './bridge-entry-BtFJdaCe.js';
2
2
  import '@theokit/http';
3
3
  import './types-DVA4LQsA.js';
4
4
  import '@theokit/sdk';
package/dist/bridge.js CHANGED
@@ -47,7 +47,7 @@ import {
47
47
  translateToUIMessageStream,
48
48
  validateUniqueRoutes,
49
49
  walkAgentMetadata
50
- } from "./chunk-6WOLHCZB.js";
50
+ } from "./chunk-KWQWD277.js";
51
51
  import "./chunk-NERDIS45.js";
52
52
  import "./chunk-7QVYU63E.js";
53
53
  export {
@@ -562,6 +562,9 @@ function compileAgentDefinition(def) {
562
562
  ...def.settingSources !== void 0 ? {
563
563
  settingSources: def.settingSources
564
564
  } : {},
565
+ ...def.plugins !== void 0 ? {
566
+ plugins: def.plugins
567
+ } : {},
565
568
  // MCP — builder/`defineAgent` servers converge on the same `mcpServers` field the `@MCP`
566
569
  // decorator path populates; the SDK adapter forwards it to `Agent.create({ mcpServers })`.
567
570
  ...def.mcpServers !== void 0 ? {
@@ -923,6 +926,10 @@ function assembleM8CreateOptions(compiled) {
923
926
  options.skills = compiled.skills;
924
927
  applied.push("skills");
925
928
  }
929
+ if (compiled.plugins) {
930
+ options.plugins = compiled.plugins;
931
+ applied.push("plugins");
932
+ }
926
933
  const settingSources = resolveSettingSources(compiled);
927
934
  if (settingSources) {
928
935
  options.local = {
@@ -1097,7 +1104,12 @@ __name(withLeakedDialectRecovery, "withLeakedDialectRecovery");
1097
1104
  function buildExtraCreateOptions(overrides, compiled) {
1098
1105
  const recoverLeakedToolCalls = overrides.recoverLeakedToolCalls ?? compiled.recoverLeakedToolCalls ?? false;
1099
1106
  const extra = {};
1100
- if (overrides.plugins !== void 0) extra.plugins = overrides.plugins;
1107
+ if (overrides.plugins !== void 0) {
1108
+ extra.plugins = Array.isArray(overrides.plugins) && Array.isArray(compiled.plugins) ? [
1109
+ ...compiled.plugins,
1110
+ ...overrides.plugins
1111
+ ] : overrides.plugins;
1112
+ }
1101
1113
  if (overrides.providers !== void 0) {
1102
1114
  extra.providers = recoverLeakedToolCalls ? withLeakedDialectRecovery(overrides.providers) : overrides.providers;
1103
1115
  }
@@ -1630,6 +1642,32 @@ function contextualTool(tool, _requiredContext) {
1630
1642
  return tool;
1631
1643
  }
1632
1644
  __name(contextualTool, "contextualTool");
1645
+ function withHooksPlugin(config) {
1646
+ const map = config.hooks;
1647
+ if (map === void 0) return config;
1648
+ const entries = Object.entries(map).filter(([, h]) => typeof h === "function");
1649
+ const { hooks: _dropped, ...rest } = config;
1650
+ if (entries.length === 0) return rest;
1651
+ const plugin = {
1652
+ name: "theokit-builder-hooks",
1653
+ version: "1.0.0",
1654
+ kind: "general",
1655
+ register(ctx) {
1656
+ for (const [hookName, handler] of entries) {
1657
+ ctx.on(hookName, handler);
1658
+ }
1659
+ }
1660
+ };
1661
+ const existing = rest.plugins ?? [];
1662
+ return {
1663
+ ...rest,
1664
+ plugins: [
1665
+ ...existing,
1666
+ plugin
1667
+ ]
1668
+ };
1669
+ }
1670
+ __name(withHooksPlugin, "withHooksPlugin");
1633
1671
  function makeBuilder(config) {
1634
1672
  const runtime = {
1635
1673
  input: /* @__PURE__ */ __name((schema) => makeBuilder({
@@ -1689,12 +1727,20 @@ function makeBuilder(config) {
1689
1727
  ...config,
1690
1728
  settingSources: sources
1691
1729
  }), "settingSources"),
1730
+ hooks: /* @__PURE__ */ __name((map) => makeBuilder({
1731
+ ...config,
1732
+ hooks: map
1733
+ }), "hooks"),
1734
+ plugins: /* @__PURE__ */ __name((list) => makeBuilder({
1735
+ ...config,
1736
+ plugins: list
1737
+ }), "plugins"),
1692
1738
  mcp: /* @__PURE__ */ __name((servers) => makeBuilder({
1693
1739
  ...config,
1694
1740
  mcpServers: servers
1695
1741
  }), "mcp"),
1696
1742
  use: /* @__PURE__ */ __name((preset) => preset(runtime), "use"),
1697
- build: /* @__PURE__ */ __name(() => defineAgent(config), "build")
1743
+ build: /* @__PURE__ */ __name(() => defineAgent(withHooksPlugin(config)), "build")
1698
1744
  };
1699
1745
  return runtime;
1700
1746
  }
@@ -3069,4 +3115,4 @@ export {
3069
3115
  generateAgentManifest,
3070
3116
  agentsPlugin
3071
3117
  };
3072
- //# sourceMappingURL=chunk-6WOLHCZB.js.map
3118
+ //# sourceMappingURL=chunk-KWQWD277.js.map