@zaly/agent 0.1.0 → 0.2.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/{agent-D5NrjvG5.mjs → agent-DlhEEMPU.mjs} +103 -33
- package/dist/agent-DlhEEMPU.mjs.map +1 -0
- package/dist/{agent-B7cQOuMZ.mjs → agent-sHtwQDAk.mjs} +2 -3
- package/dist/{agent-B7cQOuMZ.mjs.map → agent-sHtwQDAk.mjs.map} +1 -1
- package/dist/{bash-9x8PPg0A.mjs → bash-DSy03sAj.mjs} +3 -4
- package/dist/{bash-9x8PPg0A.mjs.map → bash-DSy03sAj.mjs.map} +1 -1
- package/dist/compactions-BpvQk4CG.mjs +160 -0
- package/dist/compactions-BpvQk4CG.mjs.map +1 -0
- package/dist/{edit-D4yaBK1K.mjs → edit-DT672zIy.mjs} +2 -3
- package/dist/edit-DT672zIy.mjs.map +1 -0
- package/dist/{env-UUFv5Mye.mjs → env-C8p8i1E0.mjs} +2 -3
- package/dist/{env-UUFv5Mye.mjs.map → env-C8p8i1E0.mjs.map} +1 -1
- package/dist/{fetch-D0IeDN6H.mjs → fetch-BrtIqrid.mjs} +5 -6
- package/dist/{fetch-D0IeDN6H.mjs.map → fetch-BrtIqrid.mjs.map} +1 -1
- package/dist/{find-D1Z2ac_b.mjs → find-B-vvdlHu.mjs} +3 -4
- package/dist/{find-D1Z2ac_b.mjs.map → find-B-vvdlHu.mjs.map} +1 -1
- package/dist/{grep-By4wLRDk.mjs → grep-rvZ5S319.mjs} +3 -4
- package/dist/{grep-By4wLRDk.mjs.map → grep-rvZ5S319.mjs.map} +1 -1
- package/dist/{html-J629LNIm.mjs → html-VrAsoGBK.mjs} +277 -552
- package/dist/{html-J629LNIm.mjs.map → html-VrAsoGBK.mjs.map} +1 -1
- package/dist/{index-node-esm-CJsN8G51.mjs → index-node-esm-BwaOzhXB.mjs} +2 -3
- package/dist/{index-node-esm-CJsN8G51.mjs.map → index-node-esm-BwaOzhXB.mjs.map} +1 -1
- package/dist/index.d.mts +43 -103
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/{jsonl-CvgEOakL.mjs → jsonl-BGt7eqPK.mjs} +2 -3
- package/dist/{jsonl-CvgEOakL.mjs.map → jsonl-BGt7eqPK.mjs.map} +1 -1
- package/dist/{manager-BJLjayBz.mjs → manager-1zEE5WiA.mjs} +4 -6
- package/dist/{manager-BJLjayBz.mjs.map → manager-1zEE5WiA.mjs.map} +1 -1
- package/dist/{markdown-Bv4J8cg3.mjs → markdown-8ICz5aFw.mjs} +2 -3
- package/dist/{markdown-Bv4J8cg3.mjs.map → markdown-8ICz5aFw.mjs.map} +1 -1
- package/dist/{masker-jgSUXzjY.mjs → masker-B97uwYXG.mjs} +4 -6
- package/dist/{masker-jgSUXzjY.mjs.map → masker-B97uwYXG.mjs.map} +1 -1
- package/dist/{model-_3ZA2xqm.mjs → model-DqGqxfAc.mjs} +2 -3
- package/dist/{model-_3ZA2xqm.mjs.map → model-DqGqxfAc.mjs.map} +1 -1
- package/dist/{notify-DpG_m9iP.mjs → notify-Ds0-4BeI.mjs} +2 -3
- package/dist/{notify-DpG_m9iP.mjs.map → notify-Ds0-4BeI.mjs.map} +1 -1
- package/dist/{read-B-hwcc2Q.mjs → read-C5keKntU.mjs} +4 -44
- package/dist/read-C5keKntU.mjs.map +1 -0
- package/dist/{registry-Zo0QmKdR.mjs → registry-CntkeXlo.mjs} +34 -32
- package/dist/registry-CntkeXlo.mjs.map +1 -0
- package/dist/{rolldown-runtime-DktXgydw.mjs → rolldown-runtime-DYf_mQCB.mjs} +1 -2
- package/dist/{search-CH0D5CkV.mjs → search-B-89W3SM.mjs} +2 -3
- package/dist/{search-CH0D5CkV.mjs.map → search-B-89W3SM.mjs.map} +1 -1
- package/dist/session/claude.d.mts +0 -2
- package/dist/session/claude.d.mts.map +1 -1
- package/dist/session/claude.mjs +4 -6
- package/dist/session/claude.mjs.map +1 -1
- package/dist/{session-CACkHyDR.mjs → session-CUE48QWX.mjs} +84 -51
- package/dist/session-CUE48QWX.mjs.map +1 -0
- package/dist/{session-Ds5nJz5A.d.mts → session-DY9mF9Vb.d.mts} +18 -19
- package/dist/session-DY9mF9Vb.d.mts.map +1 -0
- package/dist/session.d.mts +1 -3
- package/dist/session.d.mts.map +1 -1
- package/dist/session.mjs +4 -5
- package/dist/{src-DoXC_gDY.mjs → src-DJoqT9yP.mjs} +35 -40
- package/dist/{src-DoXC_gDY.mjs.map → src-DJoqT9yP.mjs.map} +1 -1
- package/dist/{subagent-BMQMbANL.mjs → subagent-D-TYaX38.mjs} +4 -5
- package/dist/{subagent-BMQMbANL.mjs.map → subagent-D-TYaX38.mjs.map} +1 -1
- package/dist/{swarm-BJ3gQA1Z.mjs → swarm-B_s9Qpbt.mjs} +2 -3
- package/dist/{swarm-BJ3gQA1Z.mjs.map → swarm-B_s9Qpbt.mjs.map} +1 -1
- package/dist/{swarm-BuFx_xeY.mjs → swarm-D823Yumk.mjs} +2 -3
- package/dist/{swarm-BuFx_xeY.mjs.map → swarm-D823Yumk.mjs.map} +1 -1
- package/dist/{tasks-WdRAHsOL.mjs → tasks-D76WXWr2.mjs} +3 -4
- package/dist/{tasks-WdRAHsOL.mjs.map → tasks-D76WXWr2.mjs.map} +1 -1
- package/dist/{tasks-BA-PCeGa.mjs → tasks-Dgsiuh0Q.mjs} +3 -4
- package/dist/{tasks-BA-PCeGa.mjs.map → tasks-Dgsiuh0Q.mjs.map} +1 -1
- package/dist/{tools-CJ2x45EZ.mjs → tools-DmoUYORG.mjs} +6 -10
- package/dist/{tools-CJ2x45EZ.mjs.map → tools-DmoUYORG.mjs.map} +1 -1
- package/dist/{truncate-BSMXgiXj.mjs → truncate-CChlZ113.mjs} +2 -3
- package/dist/{truncate-BSMXgiXj.mjs.map → truncate-CChlZ113.mjs.map} +1 -1
- package/dist/{uuid-CAdJg4l8.mjs → uuid-rfbQ9ad2.mjs} +2 -3
- package/dist/{uuid-CAdJg4l8.mjs.map → uuid-rfbQ9ad2.mjs.map} +1 -1
- package/dist/{wakeup-BYqTnfSp.mjs → wakeup-CFr1nu_L.mjs} +2 -3
- package/dist/{wakeup-BYqTnfSp.mjs.map → wakeup-CFr1nu_L.mjs.map} +1 -1
- package/dist/{write-DwGiDNeG.mjs → write-BRQFfWAn.mjs} +2 -3
- package/dist/write-BRQFfWAn.mjs.map +1 -0
- package/package.json +6 -6
- package/dist/agent-D5NrjvG5.mjs.map +0 -1
- package/dist/compactions-D9XlwQGO.mjs +0 -191
- package/dist/compactions-D9XlwQGO.mjs.map +0 -1
- package/dist/edit-D4yaBK1K.mjs.map +0 -1
- package/dist/read-B-hwcc2Q.mjs.map +0 -1
- package/dist/registry-Zo0QmKdR.mjs.map +0 -1
- package/dist/session-CACkHyDR.mjs.map +0 -1
- package/dist/session-Ds5nJz5A.d.mts.map +0 -1
- package/dist/write-DwGiDNeG.mjs.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { p as SessionOptions, t as Session } from "./session-
|
|
1
|
+
import { p as SessionOptions, t as Session } from "./session-DY9mF9Vb.mjs";
|
|
2
2
|
import { Emitter, Envelope, MaybeGetter } from "@zaly/shared";
|
|
3
3
|
import { BaseCollection } from "@zaly/shared/collection";
|
|
4
4
|
import { AnyKey } from "@zaly/shared/registry";
|
|
5
|
-
import {
|
|
5
|
+
import { AnyPart, AnyType, AssistantMessage, Attachment, CollectOptions, Content, FinishReason, Message, MetaOf, MetaPart, Model, ParamsOf, ReasoningEffort, Role, StreamEvent, StreamOptions, TokenCount as TokenCount$1, Tool, ToolCallPart, ToolContext, ToolResult, ToolResultPart, Usage } from "@zaly/ai";
|
|
6
6
|
import { Logger } from "@zaly/shared/logger";
|
|
7
7
|
import { ArgsOpts, ArgsResult } from "@zaly/shared/args";
|
|
8
|
-
//#region src/events.d.ts
|
|
9
8
|
/** Status of an agent session — at most one transition per moment.
|
|
10
9
|
* `paused` covers both explicit pause and post-error states; the
|
|
11
10
|
* `lastError` field on the session disambiguates. */
|
|
@@ -76,8 +75,6 @@ type AgentEvents = {
|
|
|
76
75
|
messages: Message[];
|
|
77
76
|
};
|
|
78
77
|
};
|
|
79
|
-
//#endregion
|
|
80
|
-
//#region src/masker.d.ts
|
|
81
78
|
/** Top-level masking config. */
|
|
82
79
|
type MaskerOptions = {
|
|
83
80
|
enabled?: boolean;
|
|
@@ -134,8 +131,6 @@ declare class Masker {
|
|
|
134
131
|
* pressure crosses the hysteresis threshold. */
|
|
135
132
|
mask(messages: readonly Message[], opts?: MaskOpts): Promise<Message[]>;
|
|
136
133
|
}
|
|
137
|
-
//#endregion
|
|
138
|
-
//#region src/permissions/types.d.ts
|
|
139
134
|
/**
|
|
140
135
|
* Core permission primitives.
|
|
141
136
|
*
|
|
@@ -221,8 +216,6 @@ interface PermissionContext<T extends string> {
|
|
|
221
216
|
interface PermissionHandler<T extends string> {
|
|
222
217
|
validate(input: string, ctx: PermissionContext<T>): CheckResult;
|
|
223
218
|
}
|
|
224
|
-
//#endregion
|
|
225
|
-
//#region src/permissions/presets.d.ts
|
|
226
219
|
/**
|
|
227
220
|
* Permission presets — verdict-keyed pattern lists in the same shape
|
|
228
221
|
* `parseRules` accepts. The TUI exposes these as `--preset strict`,
|
|
@@ -243,8 +236,6 @@ interface PermissionPreset {
|
|
|
243
236
|
description: string;
|
|
244
237
|
rules: Partial<Record<Verdict, string[]>>;
|
|
245
238
|
}
|
|
246
|
-
//#endregion
|
|
247
|
-
//#region src/permissions/manager.d.ts
|
|
248
239
|
type PermissionOptions = {
|
|
249
240
|
/** Session cwd — anchor for resolving relative paths and the default
|
|
250
241
|
* spawn cwd for bash subprocesses. Pinned at construction; the agent
|
|
@@ -288,8 +279,6 @@ declare class PermissionManager {
|
|
|
288
279
|
allowsAll(scope: string): boolean;
|
|
289
280
|
validate(scope: string, input: string): CheckResult;
|
|
290
281
|
}
|
|
291
|
-
//#endregion
|
|
292
|
-
//#region src/skills.d.ts
|
|
293
282
|
export type SkillMeta = {
|
|
294
283
|
name: string;
|
|
295
284
|
mtime: number;
|
|
@@ -368,8 +357,6 @@ export declare class Skills {
|
|
|
368
357
|
messages: [import("@zaly/ai").Message<"system">, import("@zaly/ai").Message<"assistant">, import("@zaly/ai").Message<"tool">];
|
|
369
358
|
} | undefined>;
|
|
370
359
|
}
|
|
371
|
-
//#endregion
|
|
372
|
-
//#region src/swarm.d.ts
|
|
373
360
|
/** A registered agent in the swarm — a node in the agent tree. The
|
|
374
361
|
* `name` IS the id: agents address each other by name, so there's no
|
|
375
362
|
* point in maintaining a separate uuid the model would have to
|
|
@@ -483,8 +470,6 @@ declare class Swarm {
|
|
|
483
470
|
/** Stop every registered agent in the swarm. */
|
|
484
471
|
stopAll(): void;
|
|
485
472
|
}
|
|
486
|
-
//#endregion
|
|
487
|
-
//#region src/ctx.d.ts
|
|
488
473
|
type AgentContextOptions = Omit<AgentOptions, "session"> & {
|
|
489
474
|
session: Session;
|
|
490
475
|
};
|
|
@@ -540,8 +525,6 @@ declare class AgentContext extends Emitter<AgentContextEvents> {
|
|
|
540
525
|
}
|
|
541
526
|
declare function createAgentContext(opts: AgentOptions): Promise<AgentContext>;
|
|
542
527
|
export declare function createAgent(opts: AgentOptions): Promise<Agent>;
|
|
543
|
-
//#endregion
|
|
544
|
-
//#region src/tasks.d.ts
|
|
545
528
|
/** Status of a task. `pending` = queued behind a dependency, not yet
|
|
546
529
|
* started. `running` = work in progress (a Streamable is being polled).
|
|
547
530
|
* `done` = result captured, no longer mutating. */
|
|
@@ -708,8 +691,6 @@ declare class Tasks extends Emitter<TasksEvents> {
|
|
|
708
691
|
declare function taskInfoPart(info: readonly TaskInfo[]): MetaPart;
|
|
709
692
|
/** Build an `inject`-ready system message for a finished task. */
|
|
710
693
|
declare function taskCompletionMessage(task: DoneTaskInfo): Message<"system">;
|
|
711
|
-
//#endregion
|
|
712
|
-
//#region src/utils/usage.d.ts
|
|
713
694
|
/** Sum two Usages. Optional fields are only present in the result
|
|
714
695
|
* when at least one input had them set, so callers can tell "no
|
|
715
696
|
* reasoning happened this turn" apart from "0 reasoning tokens." */
|
|
@@ -723,14 +704,14 @@ declare class TokenUsage implements Usage {
|
|
|
723
704
|
get cacheRead(): number;
|
|
724
705
|
get cacheWrite(): number;
|
|
725
706
|
get reasoning(): number;
|
|
726
|
-
add(count: Usage
|
|
707
|
+
add(count: Usage, opts?: {
|
|
708
|
+
current?: boolean;
|
|
709
|
+
}): void;
|
|
727
710
|
resetLast(): void;
|
|
728
711
|
get last(): Usage;
|
|
729
712
|
get total(): Usage;
|
|
730
713
|
get contextSize(): number;
|
|
731
714
|
}
|
|
732
|
-
//#endregion
|
|
733
|
-
//#region src/agent.d.ts
|
|
734
715
|
/**
|
|
735
716
|
* Long-lived agent — drives the multi-turn loop, owns the run-time
|
|
736
717
|
* status / queues, and delegates conversation state to a `Session`.
|
|
@@ -857,7 +838,10 @@ declare class Agent extends Emitter<AgentEvents> {
|
|
|
857
838
|
/** Run exactly one step. Useful for tests and custom drivers
|
|
858
839
|
* that want to interleave logic between steps. */
|
|
859
840
|
step(): Promise<StepResult>;
|
|
860
|
-
|
|
841
|
+
/** Apply compaction before resolving, or start it without waiting when background is true. */
|
|
842
|
+
compact(opts?: {
|
|
843
|
+
background?: boolean;
|
|
844
|
+
}): Promise<void>;
|
|
861
845
|
/** Resolve when the agent is in a quiescent state — `idle` or
|
|
862
846
|
* `paused`. If a run is currently in flight (or was just kicked off
|
|
863
847
|
* synchronously by `send` / `inject` / a wakeup), waits for it to
|
|
@@ -891,8 +875,6 @@ declare class Agent extends Emitter<AgentEvents> {
|
|
|
891
875
|
* runner on completion) should invoke this explicitly. */
|
|
892
876
|
dispose(): Promise<void>;
|
|
893
877
|
}
|
|
894
|
-
//#endregion
|
|
895
|
-
//#region src/compaction/utils.d.ts
|
|
896
878
|
export type ToolStat = {
|
|
897
879
|
count: number;
|
|
898
880
|
score: number;
|
|
@@ -955,11 +937,12 @@ export declare function messageTail(messages: readonly Message[], opts: {
|
|
|
955
937
|
}): Message[];
|
|
956
938
|
export declare function formatBashUsage(commands: BashUsage[]): string;
|
|
957
939
|
export declare function formatFileUsage(files: FileUsage[]): string;
|
|
958
|
-
//#endregion
|
|
959
|
-
//#region src/compaction/compactions.d.ts
|
|
960
940
|
type CompactionOptions = {
|
|
961
941
|
enabled: boolean;
|
|
962
942
|
threshold?: number;
|
|
943
|
+
/** Prepare and apply automatic compaction without pausing the foreground loop. */
|
|
944
|
+
backgroundEnabled?: boolean;
|
|
945
|
+
backgroundThreshold?: number;
|
|
963
946
|
/** Existing messages up to this many tokens will be preserved in the context */
|
|
964
947
|
keepTokens: number;
|
|
965
948
|
maxToolResultLen: number;
|
|
@@ -970,14 +953,10 @@ type CompactionOptions = {
|
|
|
970
953
|
reasoning?: ReasoningEffort;
|
|
971
954
|
trigger?: "manual" | "auto";
|
|
972
955
|
};
|
|
973
|
-
//#endregion
|
|
974
|
-
//#region src/notify.d.ts
|
|
975
956
|
type NotifyOptions = {
|
|
976
957
|
idle?: number;
|
|
977
958
|
periodic?: number;
|
|
978
959
|
};
|
|
979
|
-
//#endregion
|
|
980
|
-
//#region src/permissions/handlers/registry.d.ts
|
|
981
960
|
type HandlerLoader = () => PermissionHandler<string>;
|
|
982
961
|
declare const builtin$2: {
|
|
983
962
|
readonly bash: () => PermissionHandler<"bash">;
|
|
@@ -1026,8 +1005,6 @@ export declare const handlerRegistry: import("@zaly/shared/registry").Registry<H
|
|
|
1026
1005
|
readonly tool: () => PermissionHandler<"tool">;
|
|
1027
1006
|
readonly write: () => PermissionHandler<"read" | "write">;
|
|
1028
1007
|
}>;
|
|
1029
|
-
//#endregion
|
|
1030
|
-
//#region src/stop.d.ts
|
|
1031
1008
|
/** Caps + heuristics that can end a run early. Wired into the
|
|
1032
1009
|
* `AgentSession` loop via a single `detect()` call after each step. */
|
|
1033
1010
|
interface StopOptions {
|
|
@@ -1096,8 +1073,6 @@ declare class StopPolicy {
|
|
|
1096
1073
|
* loop is the more pressing thing to surface. */
|
|
1097
1074
|
detect(): AgentStopKind | undefined;
|
|
1098
1075
|
}
|
|
1099
|
-
//#endregion
|
|
1100
|
-
//#region src/types.d.ts
|
|
1101
1076
|
type SendMode = "inject" | "append";
|
|
1102
1077
|
declare module "@zaly/ai" {
|
|
1103
1078
|
interface ToolContext {
|
|
@@ -1305,33 +1280,6 @@ interface AgentOptions extends CollectOptions {
|
|
|
1305
1280
|
bash?: string[];
|
|
1306
1281
|
loadModel?: (id: string) => Promise<Model>;
|
|
1307
1282
|
}
|
|
1308
|
-
//#endregion
|
|
1309
|
-
//#region src/utils/file.d.ts
|
|
1310
|
-
type FileMeta = {
|
|
1311
|
-
path: string;
|
|
1312
|
-
mtime: number;
|
|
1313
|
-
kind: "read" | "write" | "edit";
|
|
1314
|
-
/** True when the result reflects the whole-file content — set by
|
|
1315
|
-
* un-sliced `read` and by `write` (which always replaces the
|
|
1316
|
-
* full file). Used by the masker to know whether this result
|
|
1317
|
-
* subsumes earlier reads of the same path. `edit` never sets it
|
|
1318
|
-
* because the result is patch-relative. */
|
|
1319
|
-
full?: boolean;
|
|
1320
|
-
unchanged?: boolean;
|
|
1321
|
-
};
|
|
1322
|
-
type FileTool = Tool<{
|
|
1323
|
-
path: string;
|
|
1324
|
-
}, unknown, FileMeta>;
|
|
1325
|
-
declare function assertFresh(path: string, ctx: ToolContext): void;
|
|
1326
|
-
declare function isUnchanged(path: string, ctx: ToolContext): boolean;
|
|
1327
|
-
declare function checkFresh(path: string, ctx: ToolContext, opts?: {
|
|
1328
|
-
full?: boolean;
|
|
1329
|
-
}): AiError | true;
|
|
1330
|
-
/** Build the canonical freshness error. `data.reason` distinguishes
|
|
1331
|
-
* never-read from changed-since-read for callers and renderers. */
|
|
1332
|
-
declare function freshnessError(path: string, reason: "NOT_READ" | "STALE"): AiError;
|
|
1333
|
-
//#endregion
|
|
1334
|
-
//#region src/prompt/registry.d.ts
|
|
1335
1283
|
export interface PromptCtx {
|
|
1336
1284
|
model: Model;
|
|
1337
1285
|
cwd: string;
|
|
@@ -1364,8 +1312,6 @@ declare class PromptCollection extends BaseCollection<AnyPrompt[], Prompt[], Pro
|
|
|
1364
1312
|
}): Promise<Prompt<string>[]>;
|
|
1365
1313
|
}
|
|
1366
1314
|
export declare function promptCollection(): Promise<PromptCollection>;
|
|
1367
|
-
//#endregion
|
|
1368
|
-
//#region src/tools/registry.d.ts
|
|
1369
1315
|
/** Per-load context handed to every tool factory. Lets factories
|
|
1370
1316
|
* customise the tool — typically schema descriptions — based on the
|
|
1371
1317
|
* agent's model and working directory. Tools that don't care about
|
|
@@ -1416,8 +1362,6 @@ declare class ToolCollection extends BaseCollection<AnyTool[], AnyTool[], Tool>
|
|
|
1416
1362
|
load(tools?: AnyTool[]): Promise<Tool[]>;
|
|
1417
1363
|
}
|
|
1418
1364
|
export declare function toolCollection(): Promise<ToolCollection>;
|
|
1419
|
-
//#endregion
|
|
1420
|
-
//#region src/tools/bash.d.ts
|
|
1421
1365
|
type BashTool = typeof bashTool;
|
|
1422
1366
|
declare const bashTool: import("@zaly/ai").Tool<{
|
|
1423
1367
|
command: string;
|
|
@@ -1425,8 +1369,36 @@ declare const bashTool: import("@zaly/ai").Tool<{
|
|
|
1425
1369
|
limit?: number | undefined;
|
|
1426
1370
|
timeout?: number | undefined;
|
|
1427
1371
|
}, unknown, object>;
|
|
1428
|
-
|
|
1429
|
-
|
|
1372
|
+
type ReadTool = typeof readTool;
|
|
1373
|
+
type FileTool = Tool<{
|
|
1374
|
+
path: string;
|
|
1375
|
+
}, unknown, FileMeta>;
|
|
1376
|
+
type FileMeta = {
|
|
1377
|
+
path: string;
|
|
1378
|
+
mtime: number;
|
|
1379
|
+
kind: "read" | "write" | "edit";
|
|
1380
|
+
/** True when the result reflects the whole-file content — set by
|
|
1381
|
+
* un-sliced `read` and by `write` (which always replaces the
|
|
1382
|
+
* full file). Used by the masker to know whether this result
|
|
1383
|
+
* subsumes earlier reads of the same path. `edit` never sets it
|
|
1384
|
+
* because the result is patch-relative. */
|
|
1385
|
+
full?: boolean;
|
|
1386
|
+
unchanged?: boolean;
|
|
1387
|
+
};
|
|
1388
|
+
type ReadToolMeta = FileMeta & {
|
|
1389
|
+
offset: number;
|
|
1390
|
+
limit: number;
|
|
1391
|
+
};
|
|
1392
|
+
/** Build the `read` tool with model-aware schema description. The
|
|
1393
|
+
* attachment-shape blurb is included only when the loaded model
|
|
1394
|
+
* actually accepts the relevant modality — text-only models see a
|
|
1395
|
+
* description that promises only text output, so they don't reach
|
|
1396
|
+
* for the tool expecting images they can't process. */
|
|
1397
|
+
declare const readTool: Tool<{
|
|
1398
|
+
path: string;
|
|
1399
|
+
offset?: number | undefined;
|
|
1400
|
+
limit?: number | undefined;
|
|
1401
|
+
}, unknown, ReadToolMeta>;
|
|
1430
1402
|
type EditTool = typeof editTool;
|
|
1431
1403
|
type EditToolMeta = FileMeta & {
|
|
1432
1404
|
/** File content before any edit was applied. */
|
|
@@ -1459,8 +1431,6 @@ declare const editTool: import("@zaly/ai").Tool<{
|
|
|
1459
1431
|
newText: string;
|
|
1460
1432
|
}[];
|
|
1461
1433
|
}, unknown, EditToolMeta>;
|
|
1462
|
-
//#endregion
|
|
1463
|
-
//#region src/tools/fetch.d.ts
|
|
1464
1434
|
type FetchTool = typeof fetchTool;
|
|
1465
1435
|
type FetchToolMeta = {
|
|
1466
1436
|
kind: "fetch";
|
|
@@ -1499,8 +1469,6 @@ declare const fetchTool: import("@zaly/ai").Tool<{
|
|
|
1499
1469
|
limit?: number | undefined;
|
|
1500
1470
|
jsonpath?: string | undefined;
|
|
1501
1471
|
}, unknown, FetchToolMeta>;
|
|
1502
|
-
//#endregion
|
|
1503
|
-
//#region src/tools/find.d.ts
|
|
1504
1472
|
type FindTool = typeof findTool;
|
|
1505
1473
|
type FindToolMeta = {
|
|
1506
1474
|
cwd: string;
|
|
@@ -1515,8 +1483,6 @@ declare const findTool: import("@zaly/ai").Tool<{
|
|
|
1515
1483
|
ignore?: boolean | undefined;
|
|
1516
1484
|
limit?: number | undefined;
|
|
1517
1485
|
}, unknown, FindToolMeta>;
|
|
1518
|
-
//#endregion
|
|
1519
|
-
//#region src/tools/grep.d.ts
|
|
1520
1486
|
type GrepTool = typeof grepTool;
|
|
1521
1487
|
type GrepToolMeta = {
|
|
1522
1488
|
cwd: string;
|
|
@@ -1532,25 +1498,6 @@ declare const grepTool: import("@zaly/ai").Tool<{
|
|
|
1532
1498
|
context?: number | undefined;
|
|
1533
1499
|
limit?: number | undefined;
|
|
1534
1500
|
}, unknown, GrepToolMeta>;
|
|
1535
|
-
//#endregion
|
|
1536
|
-
//#region src/tools/read.d.ts
|
|
1537
|
-
type ReadTool = typeof readTool;
|
|
1538
|
-
type ReadToolMeta = FileMeta & {
|
|
1539
|
-
offset: number;
|
|
1540
|
-
limit: number;
|
|
1541
|
-
};
|
|
1542
|
-
/** Build the `read` tool with model-aware schema description. The
|
|
1543
|
-
* attachment-shape blurb is included only when the loaded model
|
|
1544
|
-
* actually accepts the relevant modality — text-only models see a
|
|
1545
|
-
* description that promises only text output, so they don't reach
|
|
1546
|
-
* for the tool expecting images they can't process. */
|
|
1547
|
-
declare const readTool: import("@zaly/ai").Tool<{
|
|
1548
|
-
path: string;
|
|
1549
|
-
offset?: number | undefined;
|
|
1550
|
-
limit?: number | undefined;
|
|
1551
|
-
}, unknown, ReadToolMeta>;
|
|
1552
|
-
//#endregion
|
|
1553
|
-
//#region src/tools/write.d.ts
|
|
1554
1501
|
type WriteTool = typeof writeTool;
|
|
1555
1502
|
type WriteToolMeta = FileMeta & {
|
|
1556
1503
|
/** File content before the write. Undefined for new files. The
|
|
@@ -1577,8 +1524,6 @@ declare const writeTool: import("@zaly/ai").Tool<{
|
|
|
1577
1524
|
path: string;
|
|
1578
1525
|
content: string;
|
|
1579
1526
|
}, unknown, WriteToolMeta>;
|
|
1580
|
-
//#endregion
|
|
1581
|
-
//#region src/utils/uuid.d.ts
|
|
1582
1527
|
/**
|
|
1583
1528
|
* RFC 9562 UUIDv7 — timestamp-prefixed (48-bit ms since epoch),
|
|
1584
1529
|
* monotonic within a millisecond via a 32-bit sequence counter,
|
|
@@ -1593,8 +1538,6 @@ declare const writeTool: import("@zaly/ai").Tool<{
|
|
|
1593
1538
|
export declare function uuidv7(): string;
|
|
1594
1539
|
export declare function isUuidv7(s: string): boolean;
|
|
1595
1540
|
export declare function isUuidv7Like(s: string): boolean;
|
|
1596
|
-
//#endregion
|
|
1597
|
-
//#region src/commands.d.ts
|
|
1598
1541
|
export type Command = {
|
|
1599
1542
|
name: string;
|
|
1600
1543
|
body: string;
|
|
@@ -1623,8 +1566,6 @@ export declare class Commands {
|
|
|
1623
1566
|
get(name: string): Command | undefined;
|
|
1624
1567
|
format(input: string | ArgsResult, cmd: Command): Promise<string>;
|
|
1625
1568
|
}
|
|
1626
|
-
//#endregion
|
|
1627
|
-
//#region src/context/tokens.d.ts
|
|
1628
1569
|
export type TokenCount = {
|
|
1629
1570
|
type: AnyType | Message["role"] | "prompt" | "tool-schema" | "system-prompt";
|
|
1630
1571
|
kind?: string;
|
|
@@ -1644,6 +1585,5 @@ export declare function tokenStats(msgs: readonly Message[], opts?: {
|
|
|
1644
1585
|
expand?: (c: TokenCount) => boolean;
|
|
1645
1586
|
}): TokenStats;
|
|
1646
1587
|
export declare function formatTokenStats(s: TokenStats, indent?: number): string;
|
|
1647
|
-
|
|
1648
|
-
export type { Agent, AgentContext, AgentContextEvents, AgentEvents, AgentInit, AgentOptions, AgentStatus, AgentStop, AgentStopKind, AnyScope, BashTool, BuiltinScope, CheckResult, ContextPressure, DoneTaskInfo, EditTool, EditToolMeta, FetchTool, FetchToolMeta, FileMeta, FileTool, FindTool, FindToolMeta, GrepTool, GrepToolMeta, PermissionContext, PermissionHandler, PermissionManager, PermissionOptions, PermissionPreset, PermissionPresetName, PermissionRequest, PermissionScope, PermissionScopes, PromptCollection, ReadTool, ReadToolMeta, Rule, SendMode, StepKind, StepResult, StopOptions, StopPolicy, Suggestion, TaskInfo, TaskMeta, TaskStatus, Tasks, TasksEvents, TokenUsage, ToolCollection, TurnResult, Verdict, WriteTool, WriteToolMeta, addUsage, assertFresh, checkFresh, createAgentContext, freshnessError, isUnchanged, taskCompletionMessage, taskInfoPart };
|
|
1588
|
+
export type { Agent, AgentContext, AgentContextEvents, AgentEvents, AgentInit, AgentOptions, AgentStatus, AgentStop, AgentStopKind, AnyScope, BashTool, BuiltinScope, CheckResult, ContextPressure, DoneTaskInfo, EditTool, EditToolMeta, FetchTool, FetchToolMeta, FileMeta, FileTool, FindTool, FindToolMeta, GrepTool, GrepToolMeta, PermissionContext, PermissionHandler, PermissionManager, PermissionOptions, PermissionPreset, PermissionPresetName, PermissionRequest, PermissionScope, PermissionScopes, PromptCollection, ReadTool, ReadToolMeta, Rule, SendMode, StepKind, StepResult, StopOptions, StopPolicy, Suggestion, TaskInfo, TaskMeta, TaskStatus, Tasks, TasksEvents, TokenUsage, ToolCollection, TurnResult, Verdict, WriteTool, WriteToolMeta, addUsage, createAgentContext, taskCompletionMessage, taskInfoPart };
|
|
1649
1589
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":["TokenCount","TokenCount","builtin","TokenCount","TokenCount","builtin"],"sources":["../src/events.ts","../src/masker.ts","../src/permissions/types.ts","../src/permissions/presets.ts","../src/permissions/manager.ts","../src/skills.ts","../src/swarm.ts","../src/ctx.ts","../src/tasks.ts","../src/utils/usage.ts","../src/agent.ts","../src/compaction/utils.ts","../src/compaction/compactions.ts","../src/notify.ts","../src/permissions/handlers/registry.ts","../src/stop.ts","../src/types.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":["TokenCount","TokenCount","builtin","TokenCount","TokenCount","builtin"],"sources":["../src/events.ts","../src/masker.ts","../src/permissions/types.ts","../src/permissions/presets.ts","../src/permissions/manager.ts","../src/skills.ts","../src/swarm.ts","../src/ctx.ts","../src/tasks.ts","../src/utils/usage.ts","../src/agent.ts","../src/compaction/utils.ts","../src/compaction/compactions.ts","../src/notify.ts","../src/permissions/handlers/registry.ts","../src/stop.ts","../src/types.ts","../src/prompt/registry.ts","../src/tools/registry.ts","../src/tools/bash.ts","../src/tools/read.ts","../src/tools/edit.ts","../src/tools/fetch.ts","../src/tools/find.ts","../src/tools/grep.ts","../src/tools/write.ts","../src/utils/uuid.ts","../src/commands.ts","../src/context/tokens.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as extractConversation, c as formatFileUsage, d as Commands, f as toolCollection, g as createAgent, h as promptRegistry, i as extractBashUsage, l as messageTail, m as promptCollection, n as formatTokenStats, o as extractFileUsage, p as toolRegistry, r as tokenStats, s as formatBashUsage, t as estimatePart, u as Skills } from "./src-
|
|
2
|
-
import { t as handlerRegistry } from "./registry-
|
|
3
|
-
import { n as isUuidv7Like, r as uuidv7, t as isUuidv7 } from "./uuid-
|
|
1
|
+
import { a as extractConversation, c as formatFileUsage, d as Commands, f as toolCollection, g as createAgent, h as promptRegistry, i as extractBashUsage, l as messageTail, m as promptCollection, n as formatTokenStats, o as extractFileUsage, p as toolRegistry, r as tokenStats, s as formatBashUsage, t as estimatePart, u as Skills } from "./src-DJoqT9yP.mjs";
|
|
2
|
+
import { t as handlerRegistry } from "./registry-CntkeXlo.mjs";
|
|
3
|
+
import { n as isUuidv7Like, r as uuidv7, t as isUuidv7 } from "./uuid-rfbQ9ad2.mjs";
|
|
4
4
|
export { Commands, Skills, createAgent, estimatePart, extractBashUsage, extractConversation, extractFileUsage, formatBashUsage, formatFileUsage, formatTokenStats, handlerRegistry, isUuidv7, isUuidv7Like, messageTail, promptCollection, promptRegistry, tokenStats, toolCollection, toolRegistry, uuidv7 };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { normPath, safeStringify, withLock } from "@zaly/shared";
|
|
2
2
|
import { appendFile, open } from "node:fs/promises";
|
|
3
|
-
|
|
3
|
+
// src/session/jsonl.ts
|
|
4
4
|
const CHUNK_SIZE = 4194304;
|
|
5
5
|
/**
|
|
6
6
|
* JSONL-backed `SessionStore` — append-only file, one record per line.
|
|
@@ -128,7 +128,6 @@ var JsonlReader = class {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
};
|
|
131
|
-
//#endregion
|
|
132
131
|
export { JsonlStore as n, JsonlReader as t };
|
|
133
132
|
|
|
134
|
-
//# sourceMappingURL=jsonl-
|
|
133
|
+
//# sourceMappingURL=jsonl-BGt7eqPK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonl-
|
|
1
|
+
{"version":3,"file":"jsonl-BGt7eqPK.mjs","names":[],"sources":["../src/session/jsonl.ts"],"sourcesContent":["import type { FileHandle } from \"node:fs/promises\"\nimport type { SessionStore } from \"./store.ts\"\nimport type { SessionNode } from \"./types.ts\"\n\nimport { normPath, safeStringify, withLock } from \"@zaly/shared\"\nimport { appendFile, open } from \"node:fs/promises\"\n\nconst CHUNK_SIZE = 4 * 1024 * 1024\n\n/**\n * JSONL-backed `SessionStore` — append-only file, one record per line.\n *\n * Current implementation reads the entire file on `load()` and keeps the\n * full DAG in memory. Future optimizations (lazy reads with offset\n * index, LRU cache for huge sessions) can land behind this same\n * interface without changing `Session`.\n *\n * Crash tolerance: a truncated last line (interrupted mid-write) is\n * silently dropped; any other JSON parse error mid-file throws so real\n * corruption surfaces loudly.\n */\nexport class JsonlStore implements SessionStore {\n readonly path: string\n #nodes = new Map<string, SessionNode>()\n #root?: SessionNode\n #jsonl: JsonlReader<SessionNode>\n\n constructor(path: string) {\n this.path = path\n this.#jsonl = new JsonlReader(path)\n }\n\n /** Load + open: hydrate the DAG from `path` (when the file exists),\n * then open the writer in append mode. New nodes land on disk as\n * they're committed. */\n static async load(path: string): Promise<JsonlStore> {\n path = normPath(path)\n const ret = new JsonlStore(path)\n await ret.#fetch({ limit: 1 })\n return ret\n }\n\n async #fetch(opts?: { id?: string; limit?: number }): Promise<SessionNode | undefined> {\n let count = 0\n let value: SessionNode | undefined\n // oxlint-disable-next-line no-await-in-loop\n while ((value = await this.#jsonl.next()) !== undefined) {\n this.#nodes.set(value.uuid, value)\n this.#root ??= value\n if (opts?.limit && count++ >= opts.limit) break // safe — doesn't call .return()\n if (opts?.id && value.uuid === opts.id) return value\n }\n }\n\n get root(): SessionNode | undefined {\n return this.#root\n }\n\n async get(id: string): Promise<SessionNode | undefined> {\n return this.#nodes.get(id) ?? (await this.#fetch({ id }))\n }\n\n async write(node: SessionNode): Promise<void> {\n const line = `${safeStringify(node)}\\n`\n await withLock(this.path, async () => {\n await appendFile(this.path, line, \"utf8\")\n })\n this.#nodes.set(node.uuid, node)\n this.#root = node\n }\n\n async close(): Promise<void> {\n await this.#jsonl.close()\n }\n\n async *all(): AsyncIterable<SessionNode> {\n await this.#fetch()\n yield* this.#nodes.values()\n }\n}\n\nexport class JsonlReader<T> {\n #fd?: FileHandle\n #path: string\n #it?: AsyncIterableIterator<T>\n #count = 0\n\n constructor(readonly path: string) {\n this.#path = path\n this.#it = this.generator()\n }\n\n #toJson(line: string): T | undefined {\n if (line.trim() === \"\") return\n try {\n const ret = JSON.parse(line) as T\n this.#count++\n return ret\n } catch (error) {\n // Tolerate a truncated last line (crash mid-write); anything\n // else is real corruption.\n if (this.#count === 0) return\n throw new Error(\n `JsonlStore.load: malformed JSON at line ${this.#count + 1} of \"${this.#path}\": ${(error as Error).message}`,\n { cause: error }\n )\n }\n }\n\n private async *generator(): AsyncIterableIterator<T> {\n try {\n this.#fd = await open(this.#path, \"r\")\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return\n throw error\n }\n let { size: position } = await this.#fd.stat()\n let leftover = \"\"\n try {\n while (position > 0) {\n const length = Math.min(position, CHUNK_SIZE)\n position -= length\n // oxlint-disable-next-line no-await-in-loop\n const { buffer } = await this.#fd.read(Buffer.alloc(length), 0, length, position)\n const lines = (buffer.toString(\"utf8\") + leftover).split(/\\r?\\n/)\n leftover = lines.shift() ?? \"\"\n for (let i = lines.length - 1; i >= 0; i--) {\n const v = this.#toJson(lines[i])\n if (v) yield v\n }\n }\n if (leftover.length) {\n const v = this.#toJson(leftover)\n if (v) yield v\n }\n } finally {\n await this.#fd.close()\n this.#it = undefined\n }\n }\n\n async next(): Promise<T | undefined> {\n if (!this.#it) return\n const { value, done } = await this.#it.next()\n return done ? undefined : value\n }\n\n async close() {\n if (this.#it) {\n await this.#it.return?.() // runs the generator's finally\n this.#it = undefined\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as handlerRegistry } from "./registry-
|
|
1
|
+
import { t as handlerRegistry } from "./registry-CntkeXlo.mjs";
|
|
2
2
|
import { normPath } from "@zaly/shared";
|
|
3
|
-
|
|
3
|
+
// src/permissions/presets.ts
|
|
4
4
|
/** Native tools that only inspect session state or workspace files. */
|
|
5
5
|
const READONLY_TOOLS = [
|
|
6
6
|
"tool(read)",
|
|
@@ -166,8 +166,7 @@ const permissionPresets = {
|
|
|
166
166
|
] }
|
|
167
167
|
}
|
|
168
168
|
};
|
|
169
|
-
|
|
170
|
-
//#region src/permissions/manager.ts
|
|
169
|
+
// src/permissions/manager.ts
|
|
171
170
|
/**
|
|
172
171
|
* Owns per-session permission state and dispatches `validate(scope, input)`
|
|
173
172
|
* to the registered handler for `scope`. Handlers receive rules
|
|
@@ -275,7 +274,6 @@ function parseRules(rules) {
|
|
|
275
274
|
}
|
|
276
275
|
return ret;
|
|
277
276
|
}
|
|
278
|
-
//#endregion
|
|
279
277
|
export { PermissionManager };
|
|
280
278
|
|
|
281
|
-
//# sourceMappingURL=manager-
|
|
279
|
+
//# sourceMappingURL=manager-1zEE5WiA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager-BJLjayBz.mjs","names":[],"sources":["../src/permissions/presets.ts","../src/permissions/manager.ts"],"sourcesContent":["import type { Verdict } from \"./types.ts\"\n\n/**\n * Permission presets — verdict-keyed pattern lists in the same shape\n * `parseRules` accepts. The TUI exposes these as `--preset strict`,\n * `--preset readonly`, etc.; the manager resolves the chosen preset to\n * the structured `Rule<string>[]` at construction.\n *\n * Pattern grammar:\n * \"bash(ls:*)\" → bash command pattern\n * \"read(/src/**)\" → workspace-relative gitignore pattern\n * \"read(*)\" → matches every read in any workspace\n * \"bash\" → bare scope, equivalent to `bash(*)` (match any cmd)\n *\n * Scope names are exact matches against the tool name they gate\n * (snake_case). Underscored scopes work too (`task_stop`, `task_poll`).\n */\nexport type PermissionPresetName = \"strict\" | \"readonly\" | \"permissive\" | \"yolo\"\n\nexport interface PermissionPreset {\n description: string\n rules: Partial<Record<Verdict, string[]>>\n}\n\n// ── Pattern groups ─────────────────────────────────────────────────────────\n\n/** Native tools that only inspect session state or workspace files. */\nconst READONLY_TOOLS = [\n \"tool(read)\",\n \"tool(grep)\",\n \"tool(find)\",\n \"tool(task_list)\",\n \"tool(task_poll)\",\n]\n\n/** Read-only utilities the model can run without surprises: file\n * inspection, search, metadata. None of these modify state on their own.\n * (`sed`/`awk` writes still gated by Write rules via the bash handler's\n * composition with the file handler.) */\nconst READONLY_BASH = [\n \"bash(ls:*)\",\n \"bash(cat:*)\",\n \"bash(head:*)\",\n \"bash(tail:*)\",\n \"bash(wc:*)\",\n \"bash(find:*)\",\n \"bash(grep:*)\",\n \"bash(rg:*)\",\n \"bash(fd:*)\",\n \"bash(sort:*)\",\n \"bash(uniq:*)\",\n \"bash(cut:*)\",\n \"bash(diff:*)\",\n \"bash(stat:*)\",\n \"bash(file:*)\",\n \"bash(realpath:*)\",\n \"bash(readlink:*)\",\n \"bash(basename:*)\",\n \"bash(dirname:*)\",\n \"bash(echo:*)\",\n \"bash(printf:*)\",\n \"bash(sed:*)\",\n \"bash(awk:*)\",\n \"bash(xxd:*)\",\n \"bash(hexdump:*)\",\n \"bash(od:*)\",\n \"bash(tree:*)\",\n \"bash(pwd)\",\n \"bash(true)\",\n \"bash(false)\",\n \"bash(which:*)\",\n \"bash(type:*)\",\n \"bash(command:*)\",\n \"bash(test:*)\",\n \"bash(cd:*)\",\n]\n\n/** Read-only git + GitHub CLI subcommands. */\nconst READONLY_GIT = [\n \"bash(git status:*)\",\n \"bash(git log:*)\",\n \"bash(git diff:*)\",\n \"bash(git show:*)\",\n \"bash(git show-ref:*)\",\n \"bash(git branch:*)\",\n \"bash(git remote:*)\",\n \"bash(git rev-parse:*)\",\n \"bash(git config --get:*)\",\n \"bash(gh issue list:*)\",\n \"bash(gh issue view:*)\",\n \"bash(gh pr list:*)\",\n \"bash(gh pr view:*)\",\n \"bash(gh repo view:*)\",\n]\n\n/** Common dev-workflow commands — build, test, typecheck. Excludes\n * package management (`npm install`, `bun add`) which can drag arbitrary\n * code in over the network. */\nconst DEV_BASIC = [\n \"bash(bun test:*)\",\n \"bash(bun test:node:*)\",\n \"bash(bun test:bun:*)\",\n \"bash(bun check:*)\",\n \"bash(bun run:*)\",\n \"bash(bun build:*)\",\n \"bash(bunx tsc:*)\",\n \"bash(bun tsc:*)\",\n \"bash(bun x tsc:*)\",\n \"bash(bunx vitest:*)\",\n \"bash(bun x vitest:*)\",\n \"bash(bunx oxlint:*)\",\n \"bash(bun x oxlint:*)\",\n \"bash(oxlint:*)\",\n]\n\n/** Hard denies — never auto-allowed, regardless of preset. */\nconst HARD_DENIES = [\"bash(sudo:*)\"]\n\n/** Broader rules unlocked by the permissive preset. Trades some safety\n * for speed — appropriate for frontier models with strong instruction\n * following. Includes ad-hoc bun/node evals and git mutations. */\nconst PERMISSIVE_EXTRAS = [\n \"bash(bun -e:*)\",\n \"bash(bun:*)\",\n \"bash(node:*)\",\n \"bash(node -e:*)\",\n \"bash(make:*)\",\n \"bash(mkdir:*)\",\n \"bash(cp:*)\",\n \"bash(mv:*)\",\n \"bash(touch:*)\",\n \"bash(ln:*)\",\n \"bash(chmod:*)\",\n \"bash(git add:*)\",\n \"bash(git commit:*)\",\n \"bash(git checkout:*)\",\n \"bash(git restore:*)\",\n \"bash(git stash:*)\",\n \"bash(git fetch:*)\",\n \"bash(git pull:*)\",\n \"bash(curl:*)\",\n \"bash(jq:*)\",\n \"bash(perl -e:*)\",\n \"bash(timeout:*)\",\n \"bash(for:*)\",\n \"bash(while:*)\",\n]\n\n// ── Presets ────────────────────────────────────────────────────────────────\n\n// oxlint-disable sort-keys\nexport const permissionPresets = {\n strict: {\n description: \"Ask for everything. No commands or file ops auto-allowed.\",\n rules: {\n deny: HARD_DENIES,\n // Override the tool/file handlers' default allows.\n ask: [\"tool(*)\", \"read(*)\", \"write(*)\"],\n },\n },\n readonly: {\n description:\n \"Auto-allow read-only utilities, git read-only ops, and common build/test commands. \" +\n \"Reads inside the workspace are allowed (sensitive paths denied); writes always ask.\",\n rules: {\n deny: HARD_DENIES,\n allow: [...READONLY_TOOLS, ...READONLY_BASH, ...READONLY_GIT, ...DEV_BASIC],\n ask: [\"tool(*)\", \"write(*)\"],\n },\n },\n permissive: {\n description:\n \"Readonly preset plus broader dev commands (file moves, ad-hoc bun/node evals, \" +\n \"git mutations, network fetches) and writes inside the workspace.\",\n rules: {\n deny: HARD_DENIES,\n allow: [\n \"tool(*)\",\n ...READONLY_BASH,\n ...READONLY_GIT,\n ...DEV_BASIC,\n ...PERMISSIVE_EXTRAS,\n // Allow writes inside any workspace (sensitive paths still denied\n // by the file handler before rule resolution).\n \"write(*)\",\n ],\n },\n },\n yolo: {\n description: \"Allow everything. No prompts. Use only when you trust the model and the task.\",\n rules: {\n allow: [\"bash\", \"read(*)\", \"write(*)\", \"tool(*)\"],\n },\n },\n} as const satisfies Record<PermissionPresetName, PermissionPreset>\n","import type { PermissionPresetName } from \"./presets.ts\"\nimport type { CheckResult, Rule, Verdict } from \"./types.ts\"\n\nimport { normPath } from \"@zaly/shared\"\nimport { handlerRegistry } from \"./handlers/registry.ts\"\nimport { permissionPresets } from \"./presets.ts\"\n\nexport type PermissionOptions = {\n /** Session cwd — anchor for resolving relative paths and the default\n * spawn cwd for bash subprocesses. Pinned at construction; the agent\n * never mutates `process.cwd()`, and there's no `cd` tool. Defaults\n * to `process.cwd()`. */\n cwd?: string\n /** Named preset — supplies a baseline rule set. Explicit `rules` win\n * over preset rules on conflict (first-match-wins resolution; user\n * rules are listed before preset rules at construction). */\n preset?: PermissionPresetName\n rules?: Rule[] | Partial<Record<Verdict, string[] | undefined>>\n /** Initial workspace list. `cwd` is auto-added so the user doesn't\n * have to repeat it. Pass paths absolute (or relative — they'll be\n * resolved against `cwd`). */\n workspaces?: readonly string[]\n}\n\n/**\n * Owns per-session permission state and dispatches `validate(scope, input)`\n * to the registered handler for `scope`. Handlers receive rules\n * pre-filtered to their scope plus the shared workspace list.\n *\n * Mutators (`addWorkspace`, `addRule`, …) are how the prompt UI promotes\n * an `ask` verdict — once the user picks \"allow `Bash(git push:*)` for\n * this session\", the TUI calls `manager.addRule(...)` and subsequent\n * `validate()` calls pick it up via the filter.\n */\nexport class PermissionManager {\n readonly cwd: string\n #rules: Rule[] = []\n #workspaces: string[]\n\n constructor(opts?: PermissionOptions) {\n this.cwd = normPath(opts?.cwd)\n if (opts?.rules) {\n const more = Array.isArray(opts.rules) ? opts.rules : parseRules(opts.rules)\n this.#rules.push(...more)\n }\n if (opts?.preset) this.#rules.push(...parseRules(permissionPresets[opts.preset].rules))\n this.#workspaces = (opts?.workspaces ?? []).map((p) => normPath(this.cwd, p))\n // Auto-include cwd so users don't have to repeat it. Listed first so\n // longest-prefix lookup in handlers stays predictable.\n if (!this.#workspaces.includes(this.cwd)) this.#workspaces.unshift(this.cwd)\n }\n\n // ── Workspaces ──────────────────────────────────────────────────────\n\n get workspaces(): readonly string[] {\n return this.#workspaces\n }\n\n addWorkspace(path: string): void {\n const abs = normPath(this.cwd, path)\n if (!this.#workspaces.includes(abs)) this.#workspaces.push(abs)\n }\n\n removeWorkspace(path: string): void {\n const abs = normPath(this.cwd, path)\n const i = this.#workspaces.indexOf(abs)\n if (i !== -1) this.#workspaces.splice(i, 1)\n }\n\n // ── Rules ───────────────────────────────────────────────────────────\n\n get rules(): readonly Rule[] {\n return this.#rules\n }\n\n /** Rules whose scope has no registered handler — surfaces config\n * errors (typos, unknown scopes, malformed pattern strings). The TUI\n * can render these as a startup warning. */\n get invalidRules(): readonly Rule[] {\n return this.#rules.filter((r) => !handlerRegistry.has(r.scope))\n }\n\n addRule(rule: Rule): void {\n this.#rules.unshift(rule)\n }\n\n // ── Dispatch ────────────────────────────────────────────────────────\n\n /** True only when a blanket allow has no earlier restrictive exceptions. */\n allowsAll(scope: string): boolean {\n for (const rule of this.#rules) {\n if (rule.scope !== scope) continue\n if (rule.policy !== \"allow\") return false\n if (rule.pattern === \"*\") return true\n }\n return false\n }\n\n validate(scope: string, input: string): CheckResult {\n if (!handlerRegistry.has(scope)) {\n throw new Error(`no permission handler registered for scope \"${scope}\"`)\n }\n const handler = handlerRegistry.load(scope)\n const rules = this.#rules.filter((r) => r.scope === scope)\n return handler.validate(input, {\n allowsAll: this.allowsAll.bind(this),\n cwd: this.cwd,\n rules,\n scope,\n validate: this.validate.bind(this),\n workspaces: this.#workspaces,\n })\n }\n}\n\n/** Parse Claude-Code-style permission config (a verdict-keyed map of\n * pattern strings) into structured `Rule<string>[]`.\n *\n * Pattern shapes accepted:\n * \"Bash(ls:*)\" → { scope: \"bash\", pattern: \"ls:*\" }\n * \"WebSearch\" → { scope: \"websearch\", pattern: \"*\" } // bare name = scope-wide\n *\n * Scopes are normalized to lower-case so config can use either\n * TitleCase (\"Bash\") or lowercase (\"bash\") interchangeably.\n *\n * Malformed entries are pushed verbatim so `manager.invalidRules`\n * surfaces them — typos in the scope (\"Bahs(...)\") are caught the same\n * way (no handler registered → flagged invalid). */\nexport function parseRules(rules: Partial<Record<Verdict, string[] | undefined>>): Rule[] {\n const ret: Rule[] = []\n for (const policy of Object.keys(rules) as Verdict[]) {\n const patterns = rules[policy]\n if (!Array.isArray(patterns)) continue\n for (const raw of patterns) {\n const m = raw.match(/^(\\w+)(?:\\((.+)\\))?$/)\n if (m) {\n const [, scope, pat = \"*\"] = m\n ret.push({ pattern: pat, policy, scope: scope.toLowerCase() })\n } else {\n // Truly malformed — preserve verbatim so invalidRules surfaces it.\n ret.push({ pattern: raw, policy, scope: \"invalid\" })\n }\n }\n }\n return ret\n}\n"],"mappings":";;;;AA2BA,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;AACF;;;;;AAMA,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,eAAe;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;;;AAKA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,cAAc,CAAC,cAAc;;;;AAKnC,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAKA,MAAa,oBAAoB;CAC/B,QAAQ;EACN,aAAa;EACb,OAAO;GACL,MAAM;GAEN,KAAK;IAAC;IAAW;IAAW;GAAU;EACxC;CACF;CACA,UAAU;EACR,aACE;EAEF,OAAO;GACL,MAAM;GACN,OAAO;IAAC,GAAG;IAAgB,GAAG;IAAe,GAAG;IAAc,GAAG;GAAS;GAC1E,KAAK,CAAC,WAAW,UAAU;EAC7B;CACF;CACA,YAAY;EACV,aACE;EAEF,OAAO;GACL,MAAM;GACN,OAAO;IACL;IACA,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IAGH;GACF;EACF;CACF;CACA,MAAM;EACJ,aAAa;EACb,OAAO,EACL,OAAO;GAAC;GAAQ;GAAW;GAAY;EAAS,EAClD;CACF;AACF;;;;;;;;;;;;;AChKA,IAAa,oBAAb,MAA+B;CAC7B;CACA,SAAiB,CAAC;CAClB;CAEA,YAAY,MAA0B;EACpC,KAAK,MAAM,SAAS,MAAM,GAAG;EAC7B,IAAI,MAAM,OAAO;GACf,MAAM,OAAO,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,WAAW,KAAK,KAAK;GAC3E,KAAK,OAAO,KAAK,GAAG,IAAI;EAC1B;EACA,IAAI,MAAM,QAAQ,KAAK,OAAO,KAAK,GAAG,WAAW,kBAAkB,KAAK,OAAO,CAAC,KAAK,CAAC;EACtF,KAAK,eAAe,MAAM,cAAc,CAAC,EAAA,CAAG,KAAK,MAAM,SAAS,KAAK,KAAK,CAAC,CAAC;EAG5E,IAAI,CAAC,KAAK,YAAY,SAAS,KAAK,GAAG,GAAG,KAAK,YAAY,QAAQ,KAAK,GAAG;CAC7E;CAIA,IAAI,aAAgC;EAClC,OAAO,KAAK;CACd;CAEA,aAAa,MAAoB;EAC/B,MAAM,MAAM,SAAS,KAAK,KAAK,IAAI;EACnC,IAAI,CAAC,KAAK,YAAY,SAAS,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG;CAChE;CAEA,gBAAgB,MAAoB;EAClC,MAAM,MAAM,SAAS,KAAK,KAAK,IAAI;EACnC,MAAM,IAAI,KAAK,YAAY,QAAQ,GAAG;EACtC,IAAI,MAAM,IAAI,KAAK,YAAY,OAAO,GAAG,CAAC;CAC5C;CAIA,IAAI,QAAyB;EAC3B,OAAO,KAAK;CACd;;;;CAKA,IAAI,eAAgC;EAClC,OAAO,KAAK,OAAO,QAAQ,MAAM,CAAC,gBAAgB,IAAI,EAAE,KAAK,CAAC;CAChE;CAEA,QAAQ,MAAkB;EACxB,KAAK,OAAO,QAAQ,IAAI;CAC1B;;CAKA,UAAU,OAAwB;EAChC,KAAK,MAAM,QAAQ,KAAK,QAAQ;GAC9B,IAAI,KAAK,UAAU,OAAO;GAC1B,IAAI,KAAK,WAAW,SAAS,OAAO;GACpC,IAAI,KAAK,YAAY,KAAK,OAAO;EACnC;EACA,OAAO;CACT;CAEA,SAAS,OAAe,OAA4B;EAClD,IAAI,CAAC,gBAAgB,IAAI,KAAK,GAC5B,MAAM,IAAI,MAAM,+CAA+C,MAAM,EAAE;EAEzE,MAAM,UAAU,gBAAgB,KAAK,KAAK;EAC1C,MAAM,QAAQ,KAAK,OAAO,QAAQ,MAAM,EAAE,UAAU,KAAK;EACzD,OAAO,QAAQ,SAAS,OAAO;GAC7B,WAAW,KAAK,UAAU,KAAK,IAAI;GACnC,KAAK,KAAK;GACV;GACA;GACA,UAAU,KAAK,SAAS,KAAK,IAAI;GACjC,YAAY,KAAK;EACnB,CAAC;CACH;AACF;;;;;;;;;;;;;;AAeA,SAAgB,WAAW,OAA+D;CACxF,MAAM,MAAc,CAAC;CACrB,KAAK,MAAM,UAAU,OAAO,KAAK,KAAK,GAAgB;EACpD,MAAM,WAAW,MAAM;EACvB,IAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;EAC9B,KAAK,MAAM,OAAO,UAAU;GAC1B,MAAM,IAAI,IAAI,MAAM,sBAAsB;GAC1C,IAAI,GAAG;IACL,MAAM,GAAG,OAAO,MAAM,OAAO;IAC7B,IAAI,KAAK;KAAE,SAAS;KAAK;KAAQ,OAAO,MAAM,YAAY;IAAE,CAAC;GAC/D,OAEE,IAAI,KAAK;IAAE,SAAS;IAAK;IAAQ,OAAO;GAAU,CAAC;EAEvD;CACF;CACA,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"manager-1zEE5WiA.mjs","names":[],"sources":["../src/permissions/presets.ts","../src/permissions/manager.ts"],"sourcesContent":["import type { Verdict } from \"./types.ts\"\n\n/**\n * Permission presets — verdict-keyed pattern lists in the same shape\n * `parseRules` accepts. The TUI exposes these as `--preset strict`,\n * `--preset readonly`, etc.; the manager resolves the chosen preset to\n * the structured `Rule<string>[]` at construction.\n *\n * Pattern grammar:\n * \"bash(ls:*)\" → bash command pattern\n * \"read(/src/**)\" → workspace-relative gitignore pattern\n * \"read(*)\" → matches every read in any workspace\n * \"bash\" → bare scope, equivalent to `bash(*)` (match any cmd)\n *\n * Scope names are exact matches against the tool name they gate\n * (snake_case). Underscored scopes work too (`task_stop`, `task_poll`).\n */\nexport type PermissionPresetName = \"strict\" | \"readonly\" | \"permissive\" | \"yolo\"\n\nexport interface PermissionPreset {\n description: string\n rules: Partial<Record<Verdict, string[]>>\n}\n\n// ── Pattern groups ─────────────────────────────────────────────────────────\n\n/** Native tools that only inspect session state or workspace files. */\nconst READONLY_TOOLS = [\n \"tool(read)\",\n \"tool(grep)\",\n \"tool(find)\",\n \"tool(task_list)\",\n \"tool(task_poll)\",\n]\n\n/** Read-only utilities the model can run without surprises: file\n * inspection, search, metadata. None of these modify state on their own.\n * (`sed`/`awk` writes still gated by Write rules via the bash handler's\n * composition with the file handler.) */\nconst READONLY_BASH = [\n \"bash(ls:*)\",\n \"bash(cat:*)\",\n \"bash(head:*)\",\n \"bash(tail:*)\",\n \"bash(wc:*)\",\n \"bash(find:*)\",\n \"bash(grep:*)\",\n \"bash(rg:*)\",\n \"bash(fd:*)\",\n \"bash(sort:*)\",\n \"bash(uniq:*)\",\n \"bash(cut:*)\",\n \"bash(diff:*)\",\n \"bash(stat:*)\",\n \"bash(file:*)\",\n \"bash(realpath:*)\",\n \"bash(readlink:*)\",\n \"bash(basename:*)\",\n \"bash(dirname:*)\",\n \"bash(echo:*)\",\n \"bash(printf:*)\",\n \"bash(sed:*)\",\n \"bash(awk:*)\",\n \"bash(xxd:*)\",\n \"bash(hexdump:*)\",\n \"bash(od:*)\",\n \"bash(tree:*)\",\n \"bash(pwd)\",\n \"bash(true)\",\n \"bash(false)\",\n \"bash(which:*)\",\n \"bash(type:*)\",\n \"bash(command:*)\",\n \"bash(test:*)\",\n \"bash(cd:*)\",\n]\n\n/** Read-only git + GitHub CLI subcommands. */\nconst READONLY_GIT = [\n \"bash(git status:*)\",\n \"bash(git log:*)\",\n \"bash(git diff:*)\",\n \"bash(git show:*)\",\n \"bash(git show-ref:*)\",\n \"bash(git branch:*)\",\n \"bash(git remote:*)\",\n \"bash(git rev-parse:*)\",\n \"bash(git config --get:*)\",\n \"bash(gh issue list:*)\",\n \"bash(gh issue view:*)\",\n \"bash(gh pr list:*)\",\n \"bash(gh pr view:*)\",\n \"bash(gh repo view:*)\",\n]\n\n/** Common dev-workflow commands — build, test, typecheck. Excludes\n * package management (`npm install`, `bun add`) which can drag arbitrary\n * code in over the network. */\nconst DEV_BASIC = [\n \"bash(bun test:*)\",\n \"bash(bun test:node:*)\",\n \"bash(bun test:bun:*)\",\n \"bash(bun check:*)\",\n \"bash(bun run:*)\",\n \"bash(bun build:*)\",\n \"bash(bunx tsc:*)\",\n \"bash(bun tsc:*)\",\n \"bash(bun x tsc:*)\",\n \"bash(bunx vitest:*)\",\n \"bash(bun x vitest:*)\",\n \"bash(bunx oxlint:*)\",\n \"bash(bun x oxlint:*)\",\n \"bash(oxlint:*)\",\n]\n\n/** Hard denies — never auto-allowed, regardless of preset. */\nconst HARD_DENIES = [\"bash(sudo:*)\"]\n\n/** Broader rules unlocked by the permissive preset. Trades some safety\n * for speed — appropriate for frontier models with strong instruction\n * following. Includes ad-hoc bun/node evals and git mutations. */\nconst PERMISSIVE_EXTRAS = [\n \"bash(bun -e:*)\",\n \"bash(bun:*)\",\n \"bash(node:*)\",\n \"bash(node -e:*)\",\n \"bash(make:*)\",\n \"bash(mkdir:*)\",\n \"bash(cp:*)\",\n \"bash(mv:*)\",\n \"bash(touch:*)\",\n \"bash(ln:*)\",\n \"bash(chmod:*)\",\n \"bash(git add:*)\",\n \"bash(git commit:*)\",\n \"bash(git checkout:*)\",\n \"bash(git restore:*)\",\n \"bash(git stash:*)\",\n \"bash(git fetch:*)\",\n \"bash(git pull:*)\",\n \"bash(curl:*)\",\n \"bash(jq:*)\",\n \"bash(perl -e:*)\",\n \"bash(timeout:*)\",\n \"bash(for:*)\",\n \"bash(while:*)\",\n]\n\n// ── Presets ────────────────────────────────────────────────────────────────\n\n// oxlint-disable sort-keys\nexport const permissionPresets = {\n strict: {\n description: \"Ask for everything. No commands or file ops auto-allowed.\",\n rules: {\n deny: HARD_DENIES,\n // Override the tool/file handlers' default allows.\n ask: [\"tool(*)\", \"read(*)\", \"write(*)\"],\n },\n },\n readonly: {\n description:\n \"Auto-allow read-only utilities, git read-only ops, and common build/test commands. \" +\n \"Reads inside the workspace are allowed (sensitive paths denied); writes always ask.\",\n rules: {\n deny: HARD_DENIES,\n allow: [...READONLY_TOOLS, ...READONLY_BASH, ...READONLY_GIT, ...DEV_BASIC],\n ask: [\"tool(*)\", \"write(*)\"],\n },\n },\n permissive: {\n description:\n \"Readonly preset plus broader dev commands (file moves, ad-hoc bun/node evals, \" +\n \"git mutations, network fetches) and writes inside the workspace.\",\n rules: {\n deny: HARD_DENIES,\n allow: [\n \"tool(*)\",\n ...READONLY_BASH,\n ...READONLY_GIT,\n ...DEV_BASIC,\n ...PERMISSIVE_EXTRAS,\n // Allow writes inside any workspace (sensitive paths still denied\n // by the file handler before rule resolution).\n \"write(*)\",\n ],\n },\n },\n yolo: {\n description: \"Allow everything. No prompts. Use only when you trust the model and the task.\",\n rules: {\n allow: [\"bash\", \"read(*)\", \"write(*)\", \"tool(*)\"],\n },\n },\n} as const satisfies Record<PermissionPresetName, PermissionPreset>\n","import type { PermissionPresetName } from \"./presets.ts\"\nimport type { CheckResult, Rule, Verdict } from \"./types.ts\"\n\nimport { normPath } from \"@zaly/shared\"\nimport { handlerRegistry } from \"./handlers/registry.ts\"\nimport { permissionPresets } from \"./presets.ts\"\n\nexport type PermissionOptions = {\n /** Session cwd — anchor for resolving relative paths and the default\n * spawn cwd for bash subprocesses. Pinned at construction; the agent\n * never mutates `process.cwd()`, and there's no `cd` tool. Defaults\n * to `process.cwd()`. */\n cwd?: string\n /** Named preset — supplies a baseline rule set. Explicit `rules` win\n * over preset rules on conflict (first-match-wins resolution; user\n * rules are listed before preset rules at construction). */\n preset?: PermissionPresetName\n rules?: Rule[] | Partial<Record<Verdict, string[] | undefined>>\n /** Initial workspace list. `cwd` is auto-added so the user doesn't\n * have to repeat it. Pass paths absolute (or relative — they'll be\n * resolved against `cwd`). */\n workspaces?: readonly string[]\n}\n\n/**\n * Owns per-session permission state and dispatches `validate(scope, input)`\n * to the registered handler for `scope`. Handlers receive rules\n * pre-filtered to their scope plus the shared workspace list.\n *\n * Mutators (`addWorkspace`, `addRule`, …) are how the prompt UI promotes\n * an `ask` verdict — once the user picks \"allow `Bash(git push:*)` for\n * this session\", the TUI calls `manager.addRule(...)` and subsequent\n * `validate()` calls pick it up via the filter.\n */\nexport class PermissionManager {\n readonly cwd: string\n #rules: Rule[] = []\n #workspaces: string[]\n\n constructor(opts?: PermissionOptions) {\n this.cwd = normPath(opts?.cwd)\n if (opts?.rules) {\n const more = Array.isArray(opts.rules) ? opts.rules : parseRules(opts.rules)\n this.#rules.push(...more)\n }\n if (opts?.preset) this.#rules.push(...parseRules(permissionPresets[opts.preset].rules))\n this.#workspaces = (opts?.workspaces ?? []).map((p) => normPath(this.cwd, p))\n // Auto-include cwd so users don't have to repeat it. Listed first so\n // longest-prefix lookup in handlers stays predictable.\n if (!this.#workspaces.includes(this.cwd)) this.#workspaces.unshift(this.cwd)\n }\n\n // ── Workspaces ──────────────────────────────────────────────────────\n\n get workspaces(): readonly string[] {\n return this.#workspaces\n }\n\n addWorkspace(path: string): void {\n const abs = normPath(this.cwd, path)\n if (!this.#workspaces.includes(abs)) this.#workspaces.push(abs)\n }\n\n removeWorkspace(path: string): void {\n const abs = normPath(this.cwd, path)\n const i = this.#workspaces.indexOf(abs)\n if (i !== -1) this.#workspaces.splice(i, 1)\n }\n\n // ── Rules ───────────────────────────────────────────────────────────\n\n get rules(): readonly Rule[] {\n return this.#rules\n }\n\n /** Rules whose scope has no registered handler — surfaces config\n * errors (typos, unknown scopes, malformed pattern strings). The TUI\n * can render these as a startup warning. */\n get invalidRules(): readonly Rule[] {\n return this.#rules.filter((r) => !handlerRegistry.has(r.scope))\n }\n\n addRule(rule: Rule): void {\n this.#rules.unshift(rule)\n }\n\n // ── Dispatch ────────────────────────────────────────────────────────\n\n /** True only when a blanket allow has no earlier restrictive exceptions. */\n allowsAll(scope: string): boolean {\n for (const rule of this.#rules) {\n if (rule.scope !== scope) continue\n if (rule.policy !== \"allow\") return false\n if (rule.pattern === \"*\") return true\n }\n return false\n }\n\n validate(scope: string, input: string): CheckResult {\n if (!handlerRegistry.has(scope)) {\n throw new Error(`no permission handler registered for scope \"${scope}\"`)\n }\n const handler = handlerRegistry.load(scope)\n const rules = this.#rules.filter((r) => r.scope === scope)\n return handler.validate(input, {\n allowsAll: this.allowsAll.bind(this),\n cwd: this.cwd,\n rules,\n scope,\n validate: this.validate.bind(this),\n workspaces: this.#workspaces,\n })\n }\n}\n\n/** Parse Claude-Code-style permission config (a verdict-keyed map of\n * pattern strings) into structured `Rule<string>[]`.\n *\n * Pattern shapes accepted:\n * \"Bash(ls:*)\" → { scope: \"bash\", pattern: \"ls:*\" }\n * \"WebSearch\" → { scope: \"websearch\", pattern: \"*\" } // bare name = scope-wide\n *\n * Scopes are normalized to lower-case so config can use either\n * TitleCase (\"Bash\") or lowercase (\"bash\") interchangeably.\n *\n * Malformed entries are pushed verbatim so `manager.invalidRules`\n * surfaces them — typos in the scope (\"Bahs(...)\") are caught the same\n * way (no handler registered → flagged invalid). */\nexport function parseRules(rules: Partial<Record<Verdict, string[] | undefined>>): Rule[] {\n const ret: Rule[] = []\n for (const policy of Object.keys(rules) as Verdict[]) {\n const patterns = rules[policy]\n if (!Array.isArray(patterns)) continue\n for (const raw of patterns) {\n const m = raw.match(/^(\\w+)(?:\\((.+)\\))?$/)\n if (m) {\n const [, scope, pat = \"*\"] = m\n ret.push({ pattern: pat, policy, scope: scope.toLowerCase() })\n } else {\n // Truly malformed — preserve verbatim so invalidRules surfaces it.\n ret.push({ pattern: raw, policy, scope: \"invalid\" })\n }\n }\n }\n return ret\n}\n"],"mappings":";;;;AA2BA,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;AACF;;;;;AAMA,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,eAAe;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;;;AAKA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,MAAM,cAAc,CAAC,cAAc;;;;AAKnC,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAKA,MAAa,oBAAoB;CAC/B,QAAQ;EACN,aAAa;EACb,OAAO;GACL,MAAM;GAEN,KAAK;IAAC;IAAW;IAAW;GAAU;EACxC;CACF;CACA,UAAU;EACR,aACE;EAEF,OAAO;GACL,MAAM;GACN,OAAO;IAAC,GAAG;IAAgB,GAAG;IAAe,GAAG;IAAc,GAAG;GAAS;GAC1E,KAAK,CAAC,WAAW,UAAU;EAC7B;CACF;CACA,YAAY;EACV,aACE;EAEF,OAAO;GACL,MAAM;GACN,OAAO;IACL;IACA,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IAGH;GACF;EACF;CACF;CACA,MAAM;EACJ,aAAa;EACb,OAAO,EACL,OAAO;GAAC;GAAQ;GAAW;GAAY;EAAS,EAClD;CACF;AACF;;;;;;;;;;;;AChKA,IAAa,oBAAb,MAA+B;CAC7B;CACA,SAAiB,CAAC;CAClB;CAEA,YAAY,MAA0B;EACpC,KAAK,MAAM,SAAS,MAAM,GAAG;EAC7B,IAAI,MAAM,OAAO;GACf,MAAM,OAAO,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,WAAW,KAAK,KAAK;GAC3E,KAAK,OAAO,KAAK,GAAG,IAAI;EAC1B;EACA,IAAI,MAAM,QAAQ,KAAK,OAAO,KAAK,GAAG,WAAW,kBAAkB,KAAK,OAAO,CAAC,KAAK,CAAC;EACtF,KAAK,eAAe,MAAM,cAAc,CAAC,EAAA,CAAG,KAAK,MAAM,SAAS,KAAK,KAAK,CAAC,CAAC;EAG5E,IAAI,CAAC,KAAK,YAAY,SAAS,KAAK,GAAG,GAAG,KAAK,YAAY,QAAQ,KAAK,GAAG;CAC7E;CAIA,IAAI,aAAgC;EAClC,OAAO,KAAK;CACd;CAEA,aAAa,MAAoB;EAC/B,MAAM,MAAM,SAAS,KAAK,KAAK,IAAI;EACnC,IAAI,CAAC,KAAK,YAAY,SAAS,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG;CAChE;CAEA,gBAAgB,MAAoB;EAClC,MAAM,MAAM,SAAS,KAAK,KAAK,IAAI;EACnC,MAAM,IAAI,KAAK,YAAY,QAAQ,GAAG;EACtC,IAAI,MAAM,IAAI,KAAK,YAAY,OAAO,GAAG,CAAC;CAC5C;CAIA,IAAI,QAAyB;EAC3B,OAAO,KAAK;CACd;;;;CAKA,IAAI,eAAgC;EAClC,OAAO,KAAK,OAAO,QAAQ,MAAM,CAAC,gBAAgB,IAAI,EAAE,KAAK,CAAC;CAChE;CAEA,QAAQ,MAAkB;EACxB,KAAK,OAAO,QAAQ,IAAI;CAC1B;;CAKA,UAAU,OAAwB;EAChC,KAAK,MAAM,QAAQ,KAAK,QAAQ;GAC9B,IAAI,KAAK,UAAU,OAAO;GAC1B,IAAI,KAAK,WAAW,SAAS,OAAO;GACpC,IAAI,KAAK,YAAY,KAAK,OAAO;EACnC;EACA,OAAO;CACT;CAEA,SAAS,OAAe,OAA4B;EAClD,IAAI,CAAC,gBAAgB,IAAI,KAAK,GAC5B,MAAM,IAAI,MAAM,+CAA+C,MAAM,EAAE;EAEzE,MAAM,UAAU,gBAAgB,KAAK,KAAK;EAC1C,MAAM,QAAQ,KAAK,OAAO,QAAQ,MAAM,EAAE,UAAU,KAAK;EACzD,OAAO,QAAQ,SAAS,OAAO;GAC7B,WAAW,KAAK,UAAU,KAAK,IAAI;GACnC,KAAK,KAAK;GACV;GACA;GACA,UAAU,KAAK,SAAS,KAAK,IAAI;GACjC,YAAY,KAAK;EACnB,CAAC;CACH;AACF;;;;;;;;;;;;;;AAeA,SAAgB,WAAW,OAA+D;CACxF,MAAM,MAAc,CAAC;CACrB,KAAK,MAAM,UAAU,OAAO,KAAK,KAAK,GAAgB;EACpD,MAAM,WAAW,MAAM;EACvB,IAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;EAC9B,KAAK,MAAM,OAAO,UAAU;GAC1B,MAAM,IAAI,IAAI,MAAM,sBAAsB;GAC1C,IAAI,GAAG;IACL,MAAM,GAAG,OAAO,MAAM,OAAO;IAC7B,IAAI,KAAK;KAAE,SAAS;KAAK;KAAQ,OAAO,MAAM,YAAY;IAAE,CAAC;GAC/D,OAEE,IAAI,KAAK;IAAE,SAAS;IAAK;IAAQ,OAAO;GAAU,CAAC;EAEvD;CACF;CACA,OAAO;AACT"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { findUp, normPath, safeReadFile, safeStat } from "@zaly/shared";
|
|
2
2
|
import { join } from "pathe";
|
|
3
3
|
import { zalyPaths } from "@zaly/shared/paths";
|
|
4
|
-
|
|
4
|
+
// src/prompt/markdown.ts
|
|
5
5
|
async function markdownPrompt(ctx, opts) {
|
|
6
6
|
const resources = [];
|
|
7
7
|
const project = zalyPaths.project(ctx.cwd);
|
|
@@ -47,7 +47,6 @@ async function memoryMdPrompt(ctx) {
|
|
|
47
47
|
project: [".agents/MEMORY.md"]
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
-
//#endregion
|
|
51
50
|
export { agentsMdPrompt, memoryMdPrompt };
|
|
52
51
|
|
|
53
|
-
//# sourceMappingURL=markdown-
|
|
52
|
+
//# sourceMappingURL=markdown-8ICz5aFw.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-
|
|
1
|
+
{"version":3,"file":"markdown-8ICz5aFw.mjs","names":[],"sources":["../src/prompt/markdown.ts"],"sourcesContent":["import type { PromptCtx } from \"./registry.ts\"\n\nimport { findUp, normPath, safeReadFile, safeStat } from \"@zaly/shared\"\nimport { zalyPaths } from \"@zaly/shared/paths\"\nimport { join } from \"pathe\"\n\nexport type MarkdownPromptOptions = {\n name: string\n project?: string[]\n dotUser?: string[] // dotZaly or dotAgents\n}\n\nexport function createMarkdownPrompt(opts: MarkdownPromptOptions) {\n return (ctx: PromptCtx) => markdownPrompt(ctx, opts)\n}\n\nexport async function markdownPrompt(ctx: PromptCtx, opts: MarkdownPromptOptions): Promise<string> {\n const resources: string[] = []\n const project = zalyPaths.project(ctx.cwd)\n\n if (opts.dotUser) {\n const checks = opts.dotUser.flatMap((name) => [\n join(zalyPaths.config, name),\n `~/.agents/${name}`,\n ])\n for (const check of checks) {\n const file = normPath(check)\n if (safeStat(file)?.isFile()) {\n resources.push(file)\n break\n }\n }\n }\n\n if (opts.project) {\n const file = findUp(ctx.cwd, opts.project, { stop: project.stop, type: \"file\" })\n if (file) resources.push(file)\n }\n\n if (resources.length === 0) return \"\"\n\n const contents = await Promise.all(resources.map((r) => safeReadFile(r)))\n const ret: string[] = []\n for (let i = 0; i < resources.length; i++) {\n const content = contents[i]\n if (!content) continue\n const r = resources[i]\n ret.push(`## ${opts.name} (${r})\\n\\n${content.trim()}`)\n }\n return ret.join(\"\\n\\n\")\n}\n\nexport async function agentsMdPrompt(ctx: PromptCtx) {\n return markdownPrompt(ctx, {\n dotUser: [\"AGENTS.md\"],\n name: \"AGENTS.md\",\n project: [\"AGENTS.md\", \"CLAUDE.md\"],\n })\n}\n\nexport async function memoryMdPrompt(ctx: PromptCtx) {\n return markdownPrompt(ctx, {\n dotUser: [\"MEMORY.md\"],\n name: \"MEMORY.md\",\n project: [\".agents/MEMORY.md\"],\n })\n}\n"],"mappings":";;;;AAgBA,eAAsB,eAAe,KAAgB,MAA8C;CACjG,MAAM,YAAsB,CAAC;CAC7B,MAAM,UAAU,UAAU,QAAQ,IAAI,GAAG;CAEzC,IAAI,KAAK,SAAS;EAChB,MAAM,SAAS,KAAK,QAAQ,SAAS,SAAS,CAC5C,KAAK,UAAU,QAAQ,IAAI,GAC3B,aAAa,MACf,CAAC;EACD,KAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,OAAO,SAAS,KAAK;GAC3B,IAAI,SAAS,IAAI,CAAC,EAAE,OAAO,GAAG;IAC5B,UAAU,KAAK,IAAI;IACnB;GACF;EACF;CACF;CAEA,IAAI,KAAK,SAAS;EAChB,MAAM,OAAO,OAAO,IAAI,KAAK,KAAK,SAAS;GAAE,MAAM,QAAQ;GAAM,MAAM;EAAO,CAAC;EAC/E,IAAI,MAAM,UAAU,KAAK,IAAI;CAC/B;CAEA,IAAI,UAAU,WAAW,GAAG,OAAO;CAEnC,MAAM,WAAW,MAAM,QAAQ,IAAI,UAAU,KAAK,MAAM,aAAa,CAAC,CAAC,CAAC;CACxE,MAAM,MAAgB,CAAC;CACvB,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;EACzC,MAAM,UAAU,SAAS;EACzB,IAAI,CAAC,SAAS;EACd,MAAM,IAAI,UAAU;EACpB,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI,EAAE,OAAO,QAAQ,KAAK,GAAG;CACxD;CACA,OAAO,IAAI,KAAK,MAAM;AACxB;AAEA,eAAsB,eAAe,KAAgB;CACnD,OAAO,eAAe,KAAK;EACzB,SAAS,CAAC,WAAW;EACrB,MAAM;EACN,SAAS,CAAC,aAAa,WAAW;CACpC,CAAC;AACH;AAEA,eAAsB,eAAe,KAAgB;CACnD,OAAO,eAAe,KAAK;EACzB,SAAS,CAAC,WAAW;EACrB,MAAM;EACN,SAAS,CAAC,mBAAmB;CAC/B,CAAC;AACH"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as tokenStats, t as estimatePart } from "./src-
|
|
1
|
+
import { r as tokenStats, t as estimatePart } from "./src-DJoqT9yP.mjs";
|
|
2
2
|
import { safeStringify, toValue } from "@zaly/shared";
|
|
3
3
|
import { isAttachment, safeParseToolParams } from "@zaly/ai";
|
|
4
|
-
|
|
4
|
+
// src/context/scoring.ts
|
|
5
5
|
const DEFAULT_HALF_LIFE = 40;
|
|
6
6
|
const DEFAULT_WEIGHT = 1;
|
|
7
7
|
const DEFAULT_GAMMA = .5;
|
|
@@ -226,8 +226,7 @@ var ContextScoring = class {
|
|
|
226
226
|
return groups;
|
|
227
227
|
}
|
|
228
228
|
};
|
|
229
|
-
|
|
230
|
-
//#region src/masker.ts
|
|
229
|
+
// src/masker.ts
|
|
231
230
|
const defaults = {
|
|
232
231
|
delta: .25,
|
|
233
232
|
enabled: true,
|
|
@@ -390,7 +389,6 @@ var Masker = class {
|
|
|
390
389
|
});
|
|
391
390
|
}
|
|
392
391
|
};
|
|
393
|
-
//#endregion
|
|
394
392
|
export { Masker };
|
|
395
393
|
|
|
396
|
-
//# sourceMappingURL=masker-
|
|
394
|
+
//# sourceMappingURL=masker-B97uwYXG.mjs.map
|