@dawn-ai/core 0.8.5 → 0.8.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/capabilities/built-in/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAA;AAanE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,CA6KrD"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/capabilities/built-in/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAA;AAanE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,CAgLrD"}
@@ -62,6 +62,9 @@ export function createMemoryMarker() {
62
62
  ...(q.kind ? { kind: q.kind } : {}),
63
63
  ...(q.tags ? { tags: q.tags } : {}),
64
64
  limit: q.limit ?? 8,
65
+ // Recency reference for ranked recall — the per-request timestamp,
66
+ // NOT Date.now() (determinism rule; see module docblock).
67
+ now: mem.now,
65
68
  });
66
69
  if (rows.length === 0)
67
70
  return "(no memories found)";
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/capabilities/built-in/workspace.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAA;AA6GvE,wBAAgB,qBAAqB,IAAI,gBAAgB,CAoBxD"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../src/capabilities/built-in/workspace.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAA;AA6GvE,wBAAgB,qBAAqB,IAAI,gBAAgB,CAqBxD"}
@@ -97,10 +97,10 @@ function buildWorkspaceTools(workspaceRoot, fs, exec, permissions) {
97
97
  export function createWorkspaceMarker() {
98
98
  return {
99
99
  name: "workspace",
100
- detect: async (_routeDir, context) => existsSync(workspaceRoot(context.appRoot)),
100
+ detect: async (_routeDir, context) => context.workspaceRoot !== undefined || existsSync(workspaceRoot(context.appRoot)),
101
101
  load: async (_routeDir, context) => {
102
- const root = workspaceRoot(context.appRoot);
103
- if (!existsSync(root))
102
+ const root = context.workspaceRoot ?? workspaceRoot(context.appRoot);
103
+ if (context.workspaceRoot === undefined && !existsSync(root))
104
104
  return {};
105
105
  const fs = context.backends?.filesystem ?? localFilesystem();
106
106
  const exec = context.backends?.exec ?? localExec();
@@ -10,4 +10,37 @@ export declare function gatePathOp(permissions: PermissionsStore | undefined, op
10
10
  readonly interruptCapable?: boolean;
11
11
  }): Promise<GateResult>;
12
12
  export declare function gateBashOp(permissions: PermissionsStore | undefined, command: string): Promise<GateResult>;
13
+ /**
14
+ * Generic per-tool approval gate (tools.approve). Name-level: the decision
15
+ * covers the tool name; argsPreview is display-only. Persisted decisions live
16
+ * under the reserved "tool" key in .dawn/permissions.json (exact-name match —
17
+ * see @dawn-ai/permissions pattern-matching).
18
+ */
19
+ export declare function gateToolOp(permissions: PermissionsStore | undefined, toolName: string, argsPreview: string, opts?: {
20
+ readonly interruptCapable?: boolean;
21
+ }): Promise<GateResult>;
22
+ /**
23
+ * Wrap a tool so each call passes gateToolOp first (tools.approve). A blocked
24
+ * call returns the denial reason AS THE TOOL RESULT — deliberately a different
25
+ * contract from the workspace gates (which throw from inside their own run):
26
+ * a returned denial flows through the normal on_tool_end path, so stream
27
+ * consumers and streamTransformers see a regular tool result and the model can
28
+ * adapt, without touching error-retry handling. Generic over the tool shape so
29
+ * DiscoveredToolDefinition (cli) and DawnToolDefinition (core) both survive
30
+ * wrapping with their extra fields (filePath, schema, scope, …) intact.
31
+ * The generic constraint means run's return type must accept a string (both
32
+ * planned call sites declare `Promise<unknown> | unknown`).
33
+ *
34
+ * On an "unknown" decision in interactive mode the gate calls LangGraph's
35
+ * `interrupt()`, which throws a raw error outside a running graph. Dawn's own
36
+ * call sites wrap agent-route tools (always in-graph); out-of-graph callers
37
+ * should pass `interruptCapable: false` to fail closed with actionable
38
+ * guidance instead (mirrors gatePathOp's option).
39
+ */
40
+ export declare function wrapToolWithApproval<C, T extends {
41
+ readonly name: string;
42
+ readonly run: (input: unknown, context: C) => Promise<unknown> | unknown;
43
+ }>(tool: T, permissions: PermissionsStore, opts?: {
44
+ readonly interruptCapable?: boolean;
45
+ }): T;
13
46
  //# sourceMappingURL=permission-gate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission-gate.d.ts","sourceRoot":"","sources":["../../src/capabilities/permission-gate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAI5D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAA;AAEhE,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/E,wBAAsB,UAAU,CAC9B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,OAAO,CAAC,UAAU,CAAC,CAwCrB;AAED,wBAAsB,UAAU,CAC9B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAqBrB"}
1
+ {"version":3,"file":"permission-gate.d.ts","sourceRoot":"","sources":["../../src/capabilities/permission-gate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAI5D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAA;AAEhE,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/E,wBAAsB,UAAU,CAC9B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,OAAO,CAAC,UAAU,CAAC,CAwCrB;AAED,wBAAsB,UAAU,CAC9B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,gBAAgB,GAAG,SAAS,EACzC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7C,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAYD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EACD,CAAC,SAAS;IACR,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;CACzE,EACD,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,CAAC,CAS3F"}
@@ -66,28 +66,110 @@ export async function gateBashOp(permissions, command) {
66
66
  }
67
67
  return { allowed: true };
68
68
  }
69
+ /**
70
+ * Generic per-tool approval gate (tools.approve). Name-level: the decision
71
+ * covers the tool name; argsPreview is display-only. Persisted decisions live
72
+ * under the reserved "tool" key in .dawn/permissions.json (exact-name match —
73
+ * see @dawn-ai/permissions pattern-matching).
74
+ */
75
+ export async function gateToolOp(permissions, toolName, argsPreview, opts) {
76
+ if (!permissions)
77
+ return { allowed: true };
78
+ if (permissions.mode === "bypass")
79
+ return { allowed: true };
80
+ const decision = permissions.match("tool", toolName);
81
+ if (decision === "allow")
82
+ return { allowed: true };
83
+ if (decision === "deny") {
84
+ return { allowed: false, reason: `Permission denied by user: tool ${toolName}` };
85
+ }
86
+ if (permissions.mode === "non-interactive") {
87
+ return { allowed: false, reason: `Permission denied (fail-closed): tool ${toolName}` };
88
+ }
89
+ if (opts?.interruptCapable === false) {
90
+ return {
91
+ allowed: false,
92
+ reason: `Permission denied: tool "${toolName}" requires approval and interactive ` +
93
+ `permission prompts are not available in this execution context. ` +
94
+ `Add an allow rule for "tool" to the permissions config in dawn.config.ts.`,
95
+ };
96
+ }
97
+ const result = await emitPermissionInterrupt({
98
+ kind: "tool",
99
+ toolName,
100
+ argsPreview,
101
+ permissions,
102
+ });
103
+ if (result === "deny") {
104
+ return { allowed: false, reason: `Permission denied by user: tool ${toolName}` };
105
+ }
106
+ return { allowed: true };
107
+ }
108
+ /** Best-effort display preview of a tool call's args. Never matched or persisted. */
109
+ function buildArgsPreview(input) {
110
+ try {
111
+ const s = JSON.stringify(input);
112
+ return s === undefined ? String(input) : s.length > 500 ? `${s.slice(0, 500)}…` : s;
113
+ }
114
+ catch {
115
+ return String(input);
116
+ }
117
+ }
118
+ /**
119
+ * Wrap a tool so each call passes gateToolOp first (tools.approve). A blocked
120
+ * call returns the denial reason AS THE TOOL RESULT — deliberately a different
121
+ * contract from the workspace gates (which throw from inside their own run):
122
+ * a returned denial flows through the normal on_tool_end path, so stream
123
+ * consumers and streamTransformers see a regular tool result and the model can
124
+ * adapt, without touching error-retry handling. Generic over the tool shape so
125
+ * DiscoveredToolDefinition (cli) and DawnToolDefinition (core) both survive
126
+ * wrapping with their extra fields (filePath, schema, scope, …) intact.
127
+ * The generic constraint means run's return type must accept a string (both
128
+ * planned call sites declare `Promise<unknown> | unknown`).
129
+ *
130
+ * On an "unknown" decision in interactive mode the gate calls LangGraph's
131
+ * `interrupt()`, which throws a raw error outside a running graph. Dawn's own
132
+ * call sites wrap agent-route tools (always in-graph); out-of-graph callers
133
+ * should pass `interruptCapable: false` to fail closed with actionable
134
+ * guidance instead (mirrors gatePathOp's option).
135
+ */
136
+ export function wrapToolWithApproval(tool, permissions, opts) {
137
+ return {
138
+ ...tool,
139
+ run: async (input, context) => {
140
+ const gate = await gateToolOp(permissions, tool.name, buildArgsPreview(input), opts);
141
+ if (!gate.allowed)
142
+ return gate.reason;
143
+ return tool.run(input, context);
144
+ },
145
+ };
146
+ }
69
147
  async function emitPermissionInterrupt(args) {
70
148
  const interruptId = `perm-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
71
149
  const suggestedPattern = args.kind === "command"
72
- ? suggestedCommandPattern(args.command ?? "")
73
- : suggestedPathPattern(args.path ?? "");
150
+ ? suggestedCommandPattern(args.command)
151
+ : args.kind === "tool"
152
+ ? args.toolName
153
+ : suggestedPathPattern(args.path);
74
154
  const payload = {
75
155
  interruptId,
76
156
  type: "permission-request",
77
157
  kind: args.kind,
78
158
  detail: args.kind === "command"
79
- ? { command: args.command ?? "", suggestedPattern }
80
- : {
81
- operation: args.operation ?? "readFile",
82
- path: args.path ?? "",
83
- suggestedPattern,
84
- },
159
+ ? { command: args.command, suggestedPattern }
160
+ : args.kind === "tool"
161
+ ? { toolName: args.toolName, argsPreview: args.argsPreview, suggestedPattern }
162
+ : {
163
+ operation: args.operation,
164
+ path: args.path,
165
+ suggestedPattern,
166
+ },
85
167
  };
86
168
  const decision = interrupt(payload);
87
169
  if (decision === "deny")
88
170
  return "deny";
89
171
  if (decision === "always") {
90
- const tool = args.kind === "command" ? "bash" : (args.operation ?? "readFile");
172
+ const tool = args.kind === "command" ? "bash" : args.kind === "tool" ? "tool" : args.operation;
91
173
  await args.permissions.addAllow(tool, suggestedPattern);
92
174
  }
93
175
  return "allow";
@@ -29,6 +29,8 @@ export interface MemoryStoreLike {
29
29
  tags?: readonly string[];
30
30
  status?: string;
31
31
  limit?: number;
32
+ /** ISO recency reference for ranked searches; stores may ignore it. */
33
+ now?: string;
32
34
  }): Promise<readonly MemoryRecordLike[]>;
33
35
  update(id: string, patch: Partial<MemoryRecordLike>): Promise<void>;
34
36
  supersede(id: string, bySupersedingId: string): Promise<void>;
@@ -65,6 +67,12 @@ export interface CapabilityMarkerContext {
65
67
  readonly permissions?: PermissionsStore;
66
68
  /** Absolute path to the Dawn app root. Capabilities should resolve app-relative paths (e.g. workspace/) against this, NOT process.cwd(). */
67
69
  readonly appRoot: string;
70
+ /**
71
+ * When set, the workspace root path INSIDE a sandbox (e.g. "/workspace").
72
+ * Capabilities use this in place of `<appRoot>/workspace` and skip the host
73
+ * `existsSync` gate, since the directory lives in the sandbox, not on the host.
74
+ */
75
+ readonly workspaceRoot?: string;
68
76
  readonly memory?: MemoryContext;
69
77
  }
70
78
  export interface DawnToolDefinition {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { DawnConfig } from "./types.js";
2
+ /**
3
+ * Typed identity helper for `dawn.config.ts`. Purely for IntelliSense — the
4
+ * loader reads `export default`, so `export default config({...})` and a bare
5
+ * `export default {...}` are equivalent at runtime.
6
+ */
7
+ export declare function config(c: DawnConfig): DawnConfig;
8
+ //# sourceMappingURL=config-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-helper.d.ts","sourceRoot":"","sources":["../src/config-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAEhD"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Typed identity helper for `dawn.config.ts`. Purely for IntelliSense — the
3
+ * loader reads `export default`, so `export default config({...})` and a bare
4
+ * `export default {...}` are equivalent at runtime.
5
+ */
6
+ export function config(c) {
7
+ return c;
8
+ }
package/dist/index.d.ts CHANGED
@@ -8,12 +8,14 @@ export { createSkillsMarker } from "./capabilities/built-in/skills.js";
8
8
  export { createSubagentsMarker } from "./capabilities/built-in/subagents.js";
9
9
  export { createWorkspaceMarker } from "./capabilities/built-in/workspace.js";
10
10
  export { BUILT_IN_TOOL_NAMES } from "./capabilities/built-in-tool-names.js";
11
+ export { gateToolOp, wrapToolWithApproval } from "./capabilities/permission-gate.js";
11
12
  export type { AppliedContribution, ApplyResult, CapabilityError, CapabilityRegistry, } from "./capabilities/registry.js";
12
- export { applyCapabilities, createCapabilityRegistry } from "./capabilities/registry.js";
13
+ export { applyCapabilities, createCapabilityRegistry, } from "./capabilities/registry.js";
13
14
  export type { CapabilityContribution, CapabilityMarker, CapabilityMarkerContext, DawnToolDefinition, MemoryContext, MemoryRecordLike, MemoryStoreLike, PromptFragment, StreamTransformer, StreamTransformerInput, StreamTransformerOutput, } from "./capabilities/types.js";
14
15
  export type { CreateWorkspaceFsOptions } from "./capabilities/workspace-fs.js";
15
16
  export { createWorkspaceFs } from "./capabilities/workspace-fs.js";
16
17
  export { loadDawnConfig } from "./config.js";
18
+ export { config } from "./config-helper.js";
17
19
  export { discoverRoutes } from "./discovery/discover-routes.js";
18
20
  export { assertDawnRoutesDir, findDawnApp } from "./discovery/find-dawn-app.js";
19
21
  export { isPrivateSegment, isRouteGroupSegment, toRouteSegments, } from "./discovery/route-segments.js";
@@ -25,7 +27,7 @@ export type { ExtractToolSchemasOptions } from "./typegen/extract-tool-schema.js
25
27
  export { extractToolSchemasForRoute } from "./typegen/extract-tool-schema.js";
26
28
  export type { ExtractToolTypesOptions } from "./typegen/extract-tool-types.js";
27
29
  export { extractToolTypesForRoute } from "./typegen/extract-tool-types.js";
28
- export { renderDawnTypes, renderRouteTypes } from "./typegen/render-route-types.js";
30
+ export { renderDawnTypes, renderRouteTypes, } from "./typegen/render-route-types.js";
29
31
  export type { RouteStateFields } from "./typegen/render-state-types.js";
30
32
  export { renderStateTypes } from "./typegen/render-state-types.js";
31
33
  export { renderToolTypes } from "./typegen/render-tool-types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAC3E,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACxF,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACnF,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACpF,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,kBAAkB,GACnB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,4BAA4B,CAAA;AACnC,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAC7E,YAAY,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,EACL,eAAe,EACf,gBAAgB,GACjB,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -6,9 +6,11 @@ export { createSkillsMarker } from "./capabilities/built-in/skills.js";
6
6
  export { createSubagentsMarker } from "./capabilities/built-in/subagents.js";
7
7
  export { createWorkspaceMarker } from "./capabilities/built-in/workspace.js";
8
8
  export { BUILT_IN_TOOL_NAMES } from "./capabilities/built-in-tool-names.js";
9
- export { applyCapabilities, createCapabilityRegistry } from "./capabilities/registry.js";
9
+ export { gateToolOp, wrapToolWithApproval } from "./capabilities/permission-gate.js";
10
+ export { applyCapabilities, createCapabilityRegistry, } from "./capabilities/registry.js";
10
11
  export { createWorkspaceFs } from "./capabilities/workspace-fs.js";
11
12
  export { loadDawnConfig } from "./config.js";
13
+ export { config } from "./config-helper.js";
12
14
  export { discoverRoutes } from "./discovery/discover-routes.js";
13
15
  export { assertDawnRoutesDir, findDawnApp } from "./discovery/find-dawn-app.js";
14
16
  export { isPrivateSegment, isRouteGroupSegment, toRouteSegments, } from "./discovery/route-segments.js";
@@ -16,6 +18,6 @@ export { resolveStateFields } from "./state/resolve-state-fields.js";
16
18
  export { resolveToolScope, toolOrigin } from "./tool-scope.js";
17
19
  export { extractToolSchemasForRoute } from "./typegen/extract-tool-schema.js";
18
20
  export { extractToolTypesForRoute } from "./typegen/extract-tool-types.js";
19
- export { renderDawnTypes, renderRouteTypes } from "./typegen/render-route-types.js";
21
+ export { renderDawnTypes, renderRouteTypes, } from "./typegen/render-route-types.js";
20
22
  export { renderStateTypes } from "./typegen/render-state-types.js";
21
23
  export { renderToolTypes } from "./typegen/render-tool-types.js";
@@ -17,8 +17,9 @@ export interface ScopeInput {
17
17
  *
18
18
  * Base set: top route → all tools; subagent → authored only (capability
19
19
  * tools withheld). Then `allow` GRANTS named tools into the set, `deny`
20
- * REVOKES named tools, and deny wins. Unknown names (absent from the full
21
- * available set) throw so authoring typos fail loud at composition time.
20
+ * REVOKES named tools, and deny wins. Unknown names in allow/deny/approve
21
+ * (absent from the full available set) throw so authoring typos fail loud at
22
+ * composition time.
22
23
  */
23
24
  export declare function resolveToolScope(tools: readonly ScopeInput[], scope: ToolScope | undefined, context: {
24
25
  readonly isSubagent: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"tool-scope.d.ts","sourceRoot":"","sources":["../src/tool-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,CAAA;AAElD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAE1E;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,OAAO,EAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClE,WAAW,CAAC,MAAM,CAAC,CAoBrB"}
1
+ {"version":3,"file":"tool-scope.d.ts","sourceRoot":"","sources":["../src/tool-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,CAAA;AAElD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAE1E;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,OAAO,EAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClE,WAAW,CAAC,MAAM,CAAC,CAwBrB"}
@@ -11,12 +11,17 @@ export function toolOrigin(tool) {
11
11
  *
12
12
  * Base set: top route → all tools; subagent → authored only (capability
13
13
  * tools withheld). Then `allow` GRANTS named tools into the set, `deny`
14
- * REVOKES named tools, and deny wins. Unknown names (absent from the full
15
- * available set) throw so authoring typos fail loud at composition time.
14
+ * REVOKES named tools, and deny wins. Unknown names in allow/deny/approve
15
+ * (absent from the full available set) throw so authoring typos fail loud at
16
+ * composition time.
16
17
  */
17
18
  export function resolveToolScope(tools, scope, context) {
18
19
  const available = new Set(tools.map((t) => t.name));
19
- const unknown = [...(scope?.allow ?? []), ...(scope?.deny ?? [])].filter((n) => !available.has(n));
20
+ const unknown = [
21
+ ...(scope?.allow ?? []),
22
+ ...(scope?.deny ?? []),
23
+ ...(scope?.approve ?? []),
24
+ ].filter((n) => !available.has(n));
20
25
  if (unknown.length > 0) {
21
26
  throw new Error(`Route "${context.routeId}" tool scope references unknown tool(s): ${unknown.join(", ")}. ` +
22
27
  `Available: ${[...available].sort().join(", ")}.`);