@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.
- package/dist/capabilities/built-in/memory.d.ts.map +1 -1
- package/dist/capabilities/built-in/memory.js +3 -0
- package/dist/capabilities/built-in/workspace.d.ts.map +1 -1
- package/dist/capabilities/built-in/workspace.js +3 -3
- package/dist/capabilities/permission-gate.d.ts +33 -0
- package/dist/capabilities/permission-gate.d.ts.map +1 -1
- package/dist/capabilities/permission-gate.js +91 -9
- package/dist/capabilities/types.d.ts +8 -0
- package/dist/capabilities/types.d.ts.map +1 -1
- package/dist/config-helper.d.ts +8 -0
- package/dist/config-helper.d.ts.map +1 -0
- package/dist/config-helper.js +8 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/tool-scope.d.ts +3 -2
- package/dist/tool-scope.d.ts.map +1 -1
- package/dist/tool-scope.js +8 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +14 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -12
|
@@ -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,
|
|
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,
|
|
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
|
-
:
|
|
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
|
|
80
|
-
:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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" :
|
|
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":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACjD,MAAM,CAAC,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QACxB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
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";
|
package/dist/tool-scope.d.ts
CHANGED
|
@@ -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
|
|
21
|
-
* available set) throw so authoring typos fail loud at
|
|
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;
|
package/dist/tool-scope.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/tool-scope.js
CHANGED
|
@@ -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
|
|
15
|
-
* available set) throw so authoring typos fail loud at
|
|
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 = [
|
|
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(", ")}.`);
|