@nexrall/code-core 1.4.49 → 1.4.51

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.
@@ -7,7 +7,14 @@ export interface AgentType {
7
7
  model?: string;
8
8
  /** System instructions (the markdown body below the frontmatter). */
9
9
  prompt: string;
10
- source: 'project' | 'global' | 'builtin' | 'plugin';
10
+ /**
11
+ * 'programmatic' = registered in code via an embedding application (see the
12
+ * `extra` parameter of loadAgentTypesWithWarnings below), as opposed to
13
+ * discovered from a `.nexrall/agents/*.md` file. Added for `@nexrall/agent`'s
14
+ * `registerAgentType()`, which lets a host application define a sub-agent as
15
+ * a plain object instead of requiring a Markdown file on disk.
16
+ */
17
+ source: 'project' | 'global' | 'builtin' | 'plugin' | 'programmatic';
11
18
  /**
12
19
  * When true, this agent's write tools may only target TEST files.
13
20
  *
@@ -105,8 +112,17 @@ export declare function loadAgentTypes(workDir: string): AgentType[];
105
112
  * flawed definition still loads (fail-closed on PERMISSIONS, not on existence),
106
113
  * because making a user's agent vanish over a typo is its own kind of silent
107
114
  * failure.
115
+ *
116
+ * `extra` — agent types supplied directly by the embedding application (e.g.
117
+ * `@nexrall/agent`'s `registerAgentType()`), rather than discovered from a
118
+ * `.nexrall/agents/*.md` file. Precedence: an `extra` entry wins over a
119
+ * same-name file-based definition at ANY tier (project/global/plugin/builtin),
120
+ * matching the existing rule that a more specific source overrides a more
121
+ * general one — code the host application wrote is more specific than a file
122
+ * a project happens to contain. Defaults to `[]`, so every existing caller
123
+ * (the CLI, the VS Code extension, the desktop app) is unaffected.
108
124
  */
109
- export declare function loadAgentTypesWithWarnings(workDir: string): {
125
+ export declare function loadAgentTypesWithWarnings(workDir: string, extra?: AgentType[]): {
110
126
  types: AgentType[];
111
127
  warnings: AgentWarning[];
112
128
  };
@@ -1 +1 @@
1
- {"version":3,"file":"agentTypes.d.ts","sourceRoot":"","sources":["../../src/agent/agentTypes.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpD;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qDAAqD;AACrD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAkX5D,eAAO,MAAM,YAAY,wIAKf,CAAC;AAEX,2MAA2M;AAC3M,eAAO,MAAM,kBAAkB,4CAA6C,CAAC;AAC7E,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMpE;AAoLD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAqB5G;AAED,yFAAyF;AACzF,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAE3C;AACD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAY1D;AASD,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAIjG"}
1
+ {"version":3,"file":"agentTypes.d.ts","sourceRoot":"","sources":["../../src/agent/agentTypes.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IACrE;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qDAAqD;AACrD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAkX5D,eAAO,MAAM,YAAY,wIAKf,CAAC;AAEX,2MAA2M;AAC3M,eAAO,MAAM,kBAAkB,4CAA6C,CAAC;AAC7E,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMpE;AAoLD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,CAE3D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,SAAS,EAAO,GACtB;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAuBlD;AAED,yFAAyF;AACzF,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAE3C;AACD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAY1D;AASD,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAIjG"}
@@ -625,8 +625,17 @@ function loadAgentTypes(workDir) {
625
625
  * flawed definition still loads (fail-closed on PERMISSIONS, not on existence),
626
626
  * because making a user's agent vanish over a typo is its own kind of silent
627
627
  * failure.
628
+ *
629
+ * `extra` — agent types supplied directly by the embedding application (e.g.
630
+ * `@nexrall/agent`'s `registerAgentType()`), rather than discovered from a
631
+ * `.nexrall/agents/*.md` file. Precedence: an `extra` entry wins over a
632
+ * same-name file-based definition at ANY tier (project/global/plugin/builtin),
633
+ * matching the existing rule that a more specific source overrides a more
634
+ * general one — code the host application wrote is more specific than a file
635
+ * a project happens to contain. Defaults to `[]`, so every existing caller
636
+ * (the CLI, the VS Code extension, the desktop app) is unaffected.
628
637
  */
629
- function loadAgentTypesWithWarnings(workDir) {
638
+ function loadAgentTypesWithWarnings(workDir, extra = []) {
630
639
  const out = new Map();
631
640
  const warnings = [];
632
641
  loadDir(path.join(workDir, '.nexrall', 'agents'), 'project', out, warnings);
@@ -637,6 +646,9 @@ function loadAgentTypesWithWarnings(workDir) {
637
646
  if (!out.has(agent.name))
638
647
  out.set(agent.name, agent);
639
648
  }
649
+ // Programmatic entries win on name collision — see doc comment above.
650
+ for (const agent of extra)
651
+ out.set(agent.name, agent);
640
652
  // Builtins first in their declared order (the common, cache-friendly case), then
641
653
  // everything user-supplied alphabetically.
642
654
  const builtinOrder = new Map(BUILTIN_AGENTS.map((a, i) => [a.name, i]));
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Audit trail — a tamper-*visible* record of every tool call an agent makes.
3
+ *
4
+ * WHY THIS EXISTS
5
+ *
6
+ * Regulated buyers (finance first, but the same applies to healthcare/legal) do
7
+ * not reject agents for being unintelligent — they reject them for being
8
+ * UNAUDITABLE. The single most common finance-side audit finding in 2026 is an
9
+ * AI touching business data through a service account with no record of which
10
+ * HUMAN initiated the work, which fails SOX's individual-attribution standard.
11
+ * The remedy auditors name is "dual attribution": log the machine identity AND
12
+ * the authenticated human, together, per action.
13
+ *
14
+ * So this module records, for every tool call: what ran, who (agent) ran it, on
15
+ * whose behalf (human, supplied by the host), what the arguments were, and what
16
+ * came back — including calls that were BLOCKED and never executed, which is
17
+ * exactly what a security reviewer wants to see.
18
+ *
19
+ * WHAT IT DELIBERATELY IS NOT
20
+ *
21
+ * It does not make the agent correct, and it is not a data lake: outputs are
22
+ * truncated to a summary. It proves what happened; domain correctness is the
23
+ * job of skills/sub-agent definitions, not of this file.
24
+ *
25
+ * See docs/NEXRALL_AUDIT_TRAIL_LAYER.md (in the Nexrall repo) for the full
26
+ * design, including why the recording point is the loop's per-round result
27
+ * iteration rather than the onToolUse/onToolResult callbacks (short version:
28
+ * those are re-emitted upward by sub-agents, so auditing them double-counts
29
+ * every nested call, at a rate that varies with depth).
30
+ */
31
+ /** How the tool call ended. `blocked` = refused before execution. */
32
+ export type AuditOutcome = 'ok' | 'error' | 'blocked';
33
+ /**
34
+ * One immutable line of the trail.
35
+ *
36
+ * Field names are stable: downstream consumers (SIEM pipelines, auditor
37
+ * exports) key off them, so treat renames as breaking changes.
38
+ */
39
+ export interface AuditRecord {
40
+ /** ISO-8601 UTC. */
41
+ ts: string;
42
+ /** Stable per top-level run; inherited by sub-agents so a tree shares one id. */
43
+ sessionId: string;
44
+ /**
45
+ * The authenticated HUMAN, supplied by the host application.
46
+ *
47
+ * Never inferred here: core only holds a bearer token, and a token is a
48
+ * secret that must not be written to a log. Absent when the host supplied
49
+ * none — deliberately NOT defaulted to "system", because a fabricated
50
+ * attribution is worse than a visibly missing one.
51
+ */
52
+ userId?: string;
53
+ /** Agent identity: 'root' for the main agent, 'sub_N' for a sub-agent. */
54
+ actor: string;
55
+ /** 0 = main agent, 1+ = sub-agent nesting depth. */
56
+ depth: number;
57
+ /** Sub-agent type name, when this run is a typed sub-agent. */
58
+ agentType?: string;
59
+ model?: string;
60
+ tool: string;
61
+ /** Full arguments — this is what lets an auditor trace a number back to its source. */
62
+ input: unknown;
63
+ ok: boolean;
64
+ outcome: AuditOutcome;
65
+ error?: string;
66
+ /** Truncated: the trail records that output existed and its shape, not a copy of it. */
67
+ outputSummary?: string;
68
+ exitCode?: number;
69
+ workDir: string;
70
+ }
71
+ /**
72
+ * Where records go. The core ships one reference implementation (JSONL); every
73
+ * other destination (SIEM, customer database, hosted service) is the host's
74
+ * choice, which keeps transport and retention policy out of the agent loop.
75
+ *
76
+ * May be sync or async. It is never awaited on the tool path — see recordAudit.
77
+ */
78
+ export interface AuditSink {
79
+ record(entry: AuditRecord): void | Promise<void>;
80
+ }
81
+ /** Host-side configuration. Absent from options => auditing is entirely off. */
82
+ export interface AuditConfig {
83
+ sink: AuditSink;
84
+ /** The authenticated human this run acts for. See AuditRecord.userId. */
85
+ userId?: string;
86
+ /** Stable id for the run. Generated when omitted. */
87
+ sessionId?: string;
88
+ /**
89
+ * Last chance to mask or drop a record before it reaches the sink. Return
90
+ * null to drop it entirely.
91
+ *
92
+ * Never applied by default: silently rewriting an audit record is itself an
93
+ * audit problem, so the policy belongs with the host that knows its own data.
94
+ */
95
+ redact?: (entry: AuditRecord) => AuditRecord | null;
96
+ }
97
+ /** Output is summarised, not archived — keeps the trail a trail. */
98
+ export declare const AUDIT_OUTPUT_LIMIT = 2000;
99
+ /**
100
+ * Classify an outcome.
101
+ *
102
+ * A blocked call is NOT the same as a failed one, and collapsing the two would
103
+ * hide the security-relevant half of the trail: "the agent tried to write to
104
+ * production and was refused" must not read as "a tool errored".
105
+ *
106
+ * Detection is by the loop's own refusal messages. If those strings change, a
107
+ * blocked call degrades to `error` — still recorded, still visibly not-ok, so
108
+ * the failure mode is a less precise label rather than a missing entry.
109
+ */
110
+ export declare function classifyOutcome(ok: boolean, error: string | undefined): AuditOutcome;
111
+ export interface AuditContext {
112
+ config: AuditConfig;
113
+ sessionId: string;
114
+ actor: string;
115
+ depth: number;
116
+ agentType?: string;
117
+ model?: string;
118
+ workDir: string;
119
+ }
120
+ /**
121
+ * Build + emit one record. Fire-and-forget by design.
122
+ *
123
+ * An audit trail is a compliance artefact, not a correctness dependency: a full
124
+ * disk, a wedged SIEM or a buggy custom sink must not kill a run that is
125
+ * halfway through real work. So every sink failure — sync throw or rejected
126
+ * promise — is swallowed here, and the sink is never awaited (the tool round is
127
+ * on the latency-critical path; the Desktop app targets a ~0 ms local loop).
128
+ *
129
+ * The stricter "fail closed" policy (abort the run when the trail cannot be
130
+ * written) is a real requirement in some deployments but changes the loop's
131
+ * failure semantics, so it is intentionally not bolted on here.
132
+ */
133
+ export declare function recordAudit(ctx: AuditContext, tool: string, input: unknown, ok: boolean, output: string | undefined, error: string | undefined, exitCode: number | undefined): void;
134
+ /**
135
+ * Append-only JSONL sink — the reference implementation.
136
+ *
137
+ * One JSON object per line, appended with `fs.appendFileSync`. Chosen over a
138
+ * buffered writer because an audit line that is still sitting in a buffer when
139
+ * the process is killed is an audit line that does not exist; appending each
140
+ * record keeps the on-disk trail consistent with what actually ran. Writes are
141
+ * small and the call site never awaits, so this does not sit on the latency path.
142
+ *
143
+ * Not a tamper-EVIDENCE claim: it makes no cryptographic guarantee. Deployments
144
+ * needing that should point this at WORM storage or supply their own sink.
145
+ * Created with mode 0600 — a trail can contain business-sensitive arguments.
146
+ */
147
+ export declare function createJsonlAuditSink(filePath: string): AuditSink;
148
+ /** In-memory sink — for tests and for hosts that forward records themselves. */
149
+ export declare function createMemoryAuditSink(): AuditSink & {
150
+ records: AuditRecord[];
151
+ };
152
+ /** Stable-enough id without pulling in a uuid dependency. */
153
+ export declare function newAuditSessionId(): string;
154
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/agent/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,WAAW,GAAG,IAAI,CAAC;CACrD;AAED,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AAQxC;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAYpF;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,IAAI,CAiCN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAWhE;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,IAAI,SAAS,GAAG;IAAE,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAQ9E;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ /**
3
+ * Audit trail — a tamper-*visible* record of every tool call an agent makes.
4
+ *
5
+ * WHY THIS EXISTS
6
+ *
7
+ * Regulated buyers (finance first, but the same applies to healthcare/legal) do
8
+ * not reject agents for being unintelligent — they reject them for being
9
+ * UNAUDITABLE. The single most common finance-side audit finding in 2026 is an
10
+ * AI touching business data through a service account with no record of which
11
+ * HUMAN initiated the work, which fails SOX's individual-attribution standard.
12
+ * The remedy auditors name is "dual attribution": log the machine identity AND
13
+ * the authenticated human, together, per action.
14
+ *
15
+ * So this module records, for every tool call: what ran, who (agent) ran it, on
16
+ * whose behalf (human, supplied by the host), what the arguments were, and what
17
+ * came back — including calls that were BLOCKED and never executed, which is
18
+ * exactly what a security reviewer wants to see.
19
+ *
20
+ * WHAT IT DELIBERATELY IS NOT
21
+ *
22
+ * It does not make the agent correct, and it is not a data lake: outputs are
23
+ * truncated to a summary. It proves what happened; domain correctness is the
24
+ * job of skills/sub-agent definitions, not of this file.
25
+ *
26
+ * See docs/NEXRALL_AUDIT_TRAIL_LAYER.md (in the Nexrall repo) for the full
27
+ * design, including why the recording point is the loop's per-round result
28
+ * iteration rather than the onToolUse/onToolResult callbacks (short version:
29
+ * those are re-emitted upward by sub-agents, so auditing them double-counts
30
+ * every nested call, at a rate that varies with depth).
31
+ */
32
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
33
+ if (k2 === undefined) k2 = k;
34
+ var desc = Object.getOwnPropertyDescriptor(m, k);
35
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
36
+ desc = { enumerable: true, get: function() { return m[k]; } };
37
+ }
38
+ Object.defineProperty(o, k2, desc);
39
+ }) : (function(o, m, k, k2) {
40
+ if (k2 === undefined) k2 = k;
41
+ o[k2] = m[k];
42
+ }));
43
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
44
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
45
+ }) : function(o, v) {
46
+ o["default"] = v;
47
+ });
48
+ var __importStar = (this && this.__importStar) || (function () {
49
+ var ownKeys = function(o) {
50
+ ownKeys = Object.getOwnPropertyNames || function (o) {
51
+ var ar = [];
52
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
53
+ return ar;
54
+ };
55
+ return ownKeys(o);
56
+ };
57
+ return function (mod) {
58
+ if (mod && mod.__esModule) return mod;
59
+ var result = {};
60
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
61
+ __setModuleDefault(result, mod);
62
+ return result;
63
+ };
64
+ })();
65
+ Object.defineProperty(exports, "__esModule", { value: true });
66
+ exports.AUDIT_OUTPUT_LIMIT = void 0;
67
+ exports.classifyOutcome = classifyOutcome;
68
+ exports.recordAudit = recordAudit;
69
+ exports.createJsonlAuditSink = createJsonlAuditSink;
70
+ exports.createMemoryAuditSink = createMemoryAuditSink;
71
+ exports.newAuditSessionId = newAuditSessionId;
72
+ const fs = __importStar(require("fs"));
73
+ const path = __importStar(require("path"));
74
+ /** Output is summarised, not archived — keeps the trail a trail. */
75
+ exports.AUDIT_OUTPUT_LIMIT = 2000;
76
+ function summarise(output) {
77
+ if (output === undefined || output === '')
78
+ return undefined;
79
+ if (output.length <= exports.AUDIT_OUTPUT_LIMIT)
80
+ return output;
81
+ return `${output.slice(0, exports.AUDIT_OUTPUT_LIMIT)}\n… [truncated ${output.length - exports.AUDIT_OUTPUT_LIMIT} chars]`;
82
+ }
83
+ /**
84
+ * Classify an outcome.
85
+ *
86
+ * A blocked call is NOT the same as a failed one, and collapsing the two would
87
+ * hide the security-relevant half of the trail: "the agent tried to write to
88
+ * production and was refused" must not read as "a tool errored".
89
+ *
90
+ * Detection is by the loop's own refusal messages. If those strings change, a
91
+ * blocked call degrades to `error` — still recorded, still visibly not-ok, so
92
+ * the failure mode is a less precise label rather than a missing entry.
93
+ */
94
+ function classifyOutcome(ok, error) {
95
+ if (ok)
96
+ return 'ok';
97
+ const e = error ?? '';
98
+ const blocked = e.startsWith('Permission denied') ||
99
+ e.includes('not allowed to use') || // ToolNotAllowedError
100
+ e.includes('Blocked by PreToolUse hook') ||
101
+ e.includes('read-only') || // plan mode refusals
102
+ e.includes('plan mode') ||
103
+ e.includes('Plan mode') ||
104
+ e.includes('was CUT OFF'); // truncated tool call, refused unexecuted
105
+ return blocked ? 'blocked' : 'error';
106
+ }
107
+ /**
108
+ * Build + emit one record. Fire-and-forget by design.
109
+ *
110
+ * An audit trail is a compliance artefact, not a correctness dependency: a full
111
+ * disk, a wedged SIEM or a buggy custom sink must not kill a run that is
112
+ * halfway through real work. So every sink failure — sync throw or rejected
113
+ * promise — is swallowed here, and the sink is never awaited (the tool round is
114
+ * on the latency-critical path; the Desktop app targets a ~0 ms local loop).
115
+ *
116
+ * The stricter "fail closed" policy (abort the run when the trail cannot be
117
+ * written) is a real requirement in some deployments but changes the loop's
118
+ * failure semantics, so it is intentionally not bolted on here.
119
+ */
120
+ function recordAudit(ctx, tool, input, ok, output, error, exitCode) {
121
+ try {
122
+ const base = {
123
+ ts: new Date().toISOString(),
124
+ sessionId: ctx.sessionId,
125
+ actor: ctx.actor,
126
+ depth: ctx.depth,
127
+ tool,
128
+ input,
129
+ ok,
130
+ outcome: classifyOutcome(ok, error),
131
+ workDir: ctx.workDir,
132
+ };
133
+ // Optional fields assigned conditionally so a record never carries
134
+ // `"userId": undefined` noise into JSONL.
135
+ if (ctx.config.userId !== undefined)
136
+ base.userId = ctx.config.userId;
137
+ if (ctx.agentType !== undefined)
138
+ base.agentType = ctx.agentType;
139
+ if (ctx.model !== undefined)
140
+ base.model = ctx.model;
141
+ if (error !== undefined)
142
+ base.error = error;
143
+ if (exitCode !== undefined)
144
+ base.exitCode = exitCode;
145
+ const summary = summarise(output);
146
+ if (summary !== undefined)
147
+ base.outputSummary = summary;
148
+ const entry = ctx.config.redact ? ctx.config.redact(base) : base;
149
+ if (entry === null)
150
+ return;
151
+ const maybe = ctx.config.sink.record(entry);
152
+ if (maybe && typeof maybe.catch === 'function') {
153
+ void maybe.catch(() => { });
154
+ }
155
+ }
156
+ catch {
157
+ // Never propagate. See the doc comment above.
158
+ }
159
+ }
160
+ /**
161
+ * Append-only JSONL sink — the reference implementation.
162
+ *
163
+ * One JSON object per line, appended with `fs.appendFileSync`. Chosen over a
164
+ * buffered writer because an audit line that is still sitting in a buffer when
165
+ * the process is killed is an audit line that does not exist; appending each
166
+ * record keeps the on-disk trail consistent with what actually ran. Writes are
167
+ * small and the call site never awaits, so this does not sit on the latency path.
168
+ *
169
+ * Not a tamper-EVIDENCE claim: it makes no cryptographic guarantee. Deployments
170
+ * needing that should point this at WORM storage or supply their own sink.
171
+ * Created with mode 0600 — a trail can contain business-sensitive arguments.
172
+ */
173
+ function createJsonlAuditSink(filePath) {
174
+ let ensured = false;
175
+ return {
176
+ record(entry) {
177
+ if (!ensured) {
178
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
179
+ ensured = true;
180
+ }
181
+ fs.appendFileSync(filePath, `${JSON.stringify(entry)}\n`, { mode: 0o600 });
182
+ },
183
+ };
184
+ }
185
+ /** In-memory sink — for tests and for hosts that forward records themselves. */
186
+ function createMemoryAuditSink() {
187
+ const records = [];
188
+ return {
189
+ records,
190
+ record(entry) {
191
+ records.push(entry);
192
+ },
193
+ };
194
+ }
195
+ /** Stable-enough id without pulling in a uuid dependency. */
196
+ function newAuditSessionId() {
197
+ return `sess_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
198
+ }
199
+ //# sourceMappingURL=audit.js.map
@@ -1,5 +1,5 @@
1
1
  import type { Message, ToolResult, AgentLoopOptions, EnvContext } from '../types';
2
- import { type AgentMemoryScope } from './agentTypes';
2
+ import { type AgentType, type AgentMemoryScope } from './agentTypes';
3
3
  import { bashNeedsRepoLock } from '../permissions/bashClassify';
4
4
  export { bashNeedsRepoLock };
5
5
  /**
@@ -419,6 +419,21 @@ export declare function compactMessagesForResume(messages: Message[], opts: {
419
419
  env?: EnvContext;
420
420
  onNotice?: (text: string) => void;
421
421
  }): Promise<boolean>;
422
+ /**
423
+ * Dispatch one `task` (sub-agent) call — the exact same path the `task` tool's
424
+ * `runAgentLoop` switch-case uses (session-budget claim, per-depth concurrency
425
+ * limiter, in-flight accounting, `runSubTask` itself), extracted into its own
426
+ * function so `@nexrall/agent`'s `delegate()`/`spawn()` can drive it directly
427
+ * instead of re-implementing depth/budget/concurrency enforcement a second
428
+ * time. `runAgentLoop`'s own `task` handling calls this too — there is only
429
+ * ONE dispatch path, not two that could drift apart.
430
+ *
431
+ * `agentTypes` is the caller's already-loaded, permission-filtered catalogue
432
+ * (see `loadAgentTypesWithWarnings` + the `deny` filter in `runAgentLoop`) —
433
+ * passed in rather than reloaded here so this function has no opinion of its
434
+ * own about where agent definitions come from.
435
+ */
436
+ export declare function dispatchSubAgent(input: Record<string, unknown>, options: AgentLoopOptions, agentTypes: AgentType[]): Promise<ToolResult>;
422
437
  export declare function runAgentLoop(initialMessages: Message[], options: AgentLoopOptions): Promise<Message[]>;
423
438
  /**
424
439
  * Cut a history back to the last point the API will accept as a resumable
@@ -1 +1 @@
1
- {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,7 @@ exports.ledgerSummary = ledgerSummary;
66
66
  exports.pruneOldToolResults = pruneOldToolResults;
67
67
  exports.estimateTokensRough = estimateTokensRough;
68
68
  exports.compactMessagesForResume = compactMessagesForResume;
69
+ exports.dispatchSubAgent = dispatchSubAgent;
69
70
  exports.runAgentLoop = runAgentLoop;
70
71
  exports.trimToResumableBoundary = trimToResumableBoundary;
71
72
  const types_1 = require("../types");
@@ -86,6 +87,7 @@ const index_1 = require("../plugins/index");
86
87
  const testIntegrity_1 = require("./testIntegrity");
87
88
  const flaky_1 = require("./flaky");
88
89
  const claimEvidence_1 = require("./claimEvidence");
90
+ const audit_1 = require("./audit");
89
91
  const memory_1 = require("./memory");
90
92
  const safeSlice_1 = require("../util/safeSlice");
91
93
  const fs = __importStar(require("fs"));
@@ -1244,7 +1246,11 @@ started) {
1244
1246
  let agent = (0, agentTypes_1.findAgentType)(agentTypes, requestedType);
1245
1247
  let knownTypes = agentTypes;
1246
1248
  if (requestedType && !agent) {
1247
- knownTypes = (0, agentTypes_1.loadAgentTypes)(options.workDir);
1249
+ // Same `extra` list the top-of-run snapshot used (see runAgentLoop) — otherwise a
1250
+ // programmatically-registered agent (registerAgentType()) would resolve on the FIRST
1251
+ // call in a turn (present in the snapshot) but "miss" on this reload path, since it was
1252
+ // never written to disk for loadAgentTypes to rediscover.
1253
+ knownTypes = (0, agentTypes_1.loadAgentTypesWithWarnings)(options.workDir, options._extraAgentTypes ?? []).types;
1248
1254
  agent = (0, agentTypes_1.findAgentType)(knownTypes, requestedType);
1249
1255
  }
1250
1256
  if (requestedType && !agent) {
@@ -1443,6 +1449,12 @@ started) {
1443
1449
  // takes the opposite direction on purpose (inherited, because it RESTRICTS); identity
1444
1450
  // must not be inherited, capability must.
1445
1451
  _agentMemory: agent && memoryScope ? { agentName: agent.name, scope: memoryScope } : undefined,
1452
+ // Assigned unconditionally for the same reason as _agentMemory above: a
1453
+ // conditional spread would leave the PARENT's type name in place, so an
1454
+ // untyped (general-purpose) child would be recorded in the audit trail
1455
+ // under its parent's agent type — a wrong attribution, which is worse in a
1456
+ // compliance record than an absent one.
1457
+ _agentTypeName: agent?.name,
1446
1458
  // The same set `gatedPermission` enforces above, so prompt and permission agree
1447
1459
  // by construction instead of by two people remembering to update both.
1448
1460
  _allowedTools: allowed ?? undefined,
@@ -2349,6 +2361,48 @@ async function compactMessagesForResume(messages, opts) {
2349
2361
  }
2350
2362
  return compacted;
2351
2363
  }
2364
+ /**
2365
+ * Dispatch one `task` (sub-agent) call — the exact same path the `task` tool's
2366
+ * `runAgentLoop` switch-case uses (session-budget claim, per-depth concurrency
2367
+ * limiter, in-flight accounting, `runSubTask` itself), extracted into its own
2368
+ * function so `@nexrall/agent`'s `delegate()`/`spawn()` can drive it directly
2369
+ * instead of re-implementing depth/budget/concurrency enforcement a second
2370
+ * time. `runAgentLoop`'s own `task` handling calls this too — there is only
2371
+ * ONE dispatch path, not two that could drift apart.
2372
+ *
2373
+ * `agentTypes` is the caller's already-loaded, permission-filtered catalogue
2374
+ * (see `loadAgentTypesWithWarnings` + the `deny` filter in `runAgentLoop`) —
2375
+ * passed in rather than reloaded here so this function has no opinion of its
2376
+ * own about where agent definitions come from.
2377
+ */
2378
+ async function dispatchSubAgent(input, options, agentTypes) {
2379
+ const depth = options._depth ?? 0;
2380
+ const overBudget = claimSessionSubAgentSlot(options.workDir, options.onNotice ?? options.onText);
2381
+ if (overBudget)
2382
+ return { error: overBudget };
2383
+ const childDepth = depth + 1;
2384
+ const { run: limitRun, max: limitMax } = subTaskLimiter(childDepth, options.workDir);
2385
+ const inFlight = _inFlightByDepth.get(childDepth) ?? 0;
2386
+ if (inFlight >= limitMax) {
2387
+ (options.onNotice ?? options.onText)(`\u23f3 Queued: ${limitMax} sub-agent(s) already running at this level, so this one ` +
2388
+ `starts when a slot frees up (raise "maxConcurrentSubtasks" in .nexrall/settings.json ` +
2389
+ 'to widen it).');
2390
+ }
2391
+ _inFlightByDepth.set(childDepth, inFlight + 1);
2392
+ const started = { value: false };
2393
+ try {
2394
+ return await limitRun(() => runSubTask(input, options, agentTypes, started));
2395
+ }
2396
+ finally {
2397
+ if (!started.value)
2398
+ refundSessionSubAgentSlot();
2399
+ const n = (_inFlightByDepth.get(childDepth) ?? 1) - 1;
2400
+ if (n > 0)
2401
+ _inFlightByDepth.set(childDepth, n);
2402
+ else
2403
+ _inFlightByDepth.delete(childDepth);
2404
+ }
2405
+ }
2352
2406
  // ─── Agent Loop ───────────────────────────────────────────────────────────────
2353
2407
  async function runAgentLoop(initialMessages, options) {
2354
2408
  const messages = [...initialMessages];
@@ -2356,6 +2410,36 @@ async function runAgentLoop(initialMessages, options) {
2356
2410
  const hooks = loadHooks(options.workDir);
2357
2411
  const depth = options._depth ?? 0;
2358
2412
  const agentScope = options._agentScope ?? 'root';
2413
+ // ── Audit trail (opt-in) ────────────────────────────────────────────────────
2414
+ //
2415
+ // Undefined for every caller that hasn't opted in, which is what keeps this
2416
+ // change behaviour-neutral: `auditCtx` stays undefined and the one emit site
2417
+ // below is skipped entirely.
2418
+ //
2419
+ // The session id is resolved ONCE here and, when the host didn't supply one,
2420
+ // pushed down to sub-agents through `auditOptions` (below) rather than left to
2421
+ // each nested loop to generate its own. Otherwise every sub-agent would open a
2422
+ // NEW session id and the trail would no longer show that a delegated write and
2423
+ // the user request that caused it belong to the same run — which is precisely
2424
+ // the chain of custody the trail exists to prove.
2425
+ const auditCfg = options.audit
2426
+ ? (options.audit.sessionId ? options.audit : { ...options.audit, sessionId: (0, audit_1.newAuditSessionId)() })
2427
+ : undefined;
2428
+ const auditCtx = auditCfg
2429
+ ? {
2430
+ config: auditCfg,
2431
+ sessionId: auditCfg.sessionId,
2432
+ actor: agentScope,
2433
+ depth,
2434
+ agentType: options._agentTypeName,
2435
+ model,
2436
+ workDir: options.workDir,
2437
+ }
2438
+ : undefined;
2439
+ // Sub-agents must inherit the RESOLVED config (with the session id filled in).
2440
+ // Copied, never mutated in place: `options` belongs to the caller, and this
2441
+ // loop runs concurrently with sibling sub-agents sharing that object.
2442
+ const auditOptions = auditCfg && auditCfg !== options.audit ? { ...options, audit: auditCfg } : options;
2359
2443
  // Settings are read before the agent catalogue because a `deny` rule can
2360
2444
  // switch a sub-agent off, and an agent that may not run must not be
2361
2445
  // advertised (see below).
@@ -2368,7 +2452,7 @@ async function runAgentLoop(initialMessages, options) {
2368
2452
  // spend a tool call discovering the refusal, and "available types: …" on the
2369
2453
  // error path would name it again. Enforcement still happens at dispatch
2370
2454
  // (runSubTask) — this is the cosmetic half; that is the load-bearing half.
2371
- const agentTypes = (0, agentTypes_1.loadAgentTypes)(options.workDir).filter((t) => (0, rules_1.evaluatePermission)(settings.permissions, 'task', { subagent_type: t.name }, options.workDir) !== 'deny');
2455
+ const agentTypes = (0, agentTypes_1.loadAgentTypesWithWarnings)(options.workDir, options._extraAgentTypes ?? []).types.filter((t) => (0, rules_1.evaluatePermission)(settings.permissions, 'task', { subagent_type: t.name }, options.workDir) !== 'deny');
2372
2456
  // Can THIS run delegate at all? Previously only the catalogue was gated (`depth === 0`)
2373
2457
  // while the tool schema and its instructions went to every run — see canSpawnSubAgents.
2374
2458
  //
@@ -2382,7 +2466,7 @@ async function runAgentLoop(initialMessages, options) {
2382
2466
  // just a reusable prompt template (via use_skill), not another spawn point, so
2383
2467
  // sub-agents benefit from the same playbooks without the recursion concerns that
2384
2468
  // gate agentsCatalogue to the top level.
2385
- const skillsCatalogue = (0, skills_1.summariseSkills)((0, skills_1.loadSkills)(options.workDir));
2469
+ const skillsCatalogue = (0, skills_1.summariseSkills)((0, skills_1.loadSkillsWithWarnings)(options.workDir, options._extraSkills ?? []).skills);
2386
2470
  // Plan mode instructions ride the project-instructions channel, which is
2387
2471
  // authoritative in the system prompt. Prepended rather than appended: the
2388
2472
  // lock has to be read before the project conventions it overrides.
@@ -3052,64 +3136,13 @@ async function runAgentLoop(initialMessages, options) {
3052
3136
  // Gated so a burst of `task` blocks in one message becomes a QUEUE
3053
3137
  // rather than N concurrent agent loops (see MAX_CONCURRENT_SUBTASKS).
3054
3138
  //
3055
- // The gate wraps the CALL, not the inside of runSubTask, and that
3056
- // placement is the whole trick: runSubTask arms its own 10-minute stall
3057
- // timeout as its first act, so acquiring the slot inside it would start
3058
- // that clock while the sub-task was still sitting in the queue. A
3059
- // sub-task queued behind three long-running siblings could then be
3060
- // "stopped for stalling" having never executed a single step.
3061
- //
3062
- // EVERY level is gated, each against its own depth's limiter.
3063
- //
3064
- // This used to be `depth === 0` only, because one shared limiter deadlocks if a
3065
- // slot-holder re-enters it — and with sub-agents as leaves, skipping the nested
3066
- // case was free. Now that nesting is real, skipping it would leave fan-out below
3067
- // level 1 completely unbounded. Per-depth limiters give bounded concurrency at
3068
- // every level while keeping the wait-for graph a DAG (a depth-D holder only ever
3069
- // waits on depth-D+1), so there is no cycle to deadlock on. See _subTaskLimiters.
3070
- // Session budget FIRST, outside the limiter. runSubTask runs inside limitRun, so
3071
- // claiming in there meant a spawn that was already over budget queued behind up to
3072
- // `max` running siblings before hearing no — in a runaway, i.e. the exact case this
3073
- // guard exists for, refusals trickled out at sibling-completion rate.
3074
- const overBudget = claimSessionSubAgentSlot(options.workDir, options.onNotice ?? options.onText);
3075
- if (overBudget) {
3076
- result = { error: overBudget };
3077
- }
3078
- else {
3079
- const childDepth = depth + 1;
3080
- const { run: limitRun, max: limitMax } = subTaskLimiter(childDepth, options.workDir);
3081
- // Tell the user when a sub-task is WAITING rather than working.
3082
- //
3083
- // With a burst of 8 and a ceiling of 4, the last four sat silently in the
3084
- // queue. From the outside they looked started, so a long wait read as a
3085
- // hang — and the fix for a hang (Ctrl+C and retry) is exactly wrong here,
3086
- // since the work was about to run. Counted per depth, so a level-2 queue is
3087
- // not reported using a level-1 count.
3088
- const inFlight = _inFlightByDepth.get(childDepth) ?? 0;
3089
- if (inFlight >= limitMax) {
3090
- (options.onNotice ?? options.onText)(`\u23f3 Queued: ${limitMax} sub-agent(s) already running at this level, so this one ` +
3091
- `starts when a slot frees up (raise "maxConcurrentSubtasks" in .nexrall/settings.json ` +
3092
- 'to widen it).');
3093
- }
3094
- _inFlightByDepth.set(childDepth, inFlight + 1);
3095
- // runSubTask flips this at its point of no return, so a spawn rejected by its own
3096
- // validation (empty prompt, a deny rule, an unusable resume id) gives the slot
3097
- // back. Without it, a model retrying against a deny rule would burn the entire
3098
- // allowance on spawns that never ran and then lose delegation for the session.
3099
- const started = { value: false };
3100
- try {
3101
- result = await limitRun(() => runSubTask(input, options, agentTypes, started));
3102
- }
3103
- finally {
3104
- if (!started.value)
3105
- refundSessionSubAgentSlot();
3106
- const n = (_inFlightByDepth.get(childDepth) ?? 1) - 1;
3107
- if (n > 0)
3108
- _inFlightByDepth.set(childDepth, n);
3109
- else
3110
- _inFlightByDepth.delete(childDepth); // don't retain a key per depth forever
3111
- }
3112
- }
3139
+ // EVERY level is gated, each against its own depth's limiter — see
3140
+ // dispatchSubAgent's own doc comment for why the gate wraps the call
3141
+ // rather than the inside of runSubTask, and why every depth (not just
3142
+ // depth 0) needs its own limiter. Extracted into dispatchSubAgent so
3143
+ // `@nexrall/agent`'s delegate()/spawn() drive the SAME path instead of
3144
+ // reimplementing depth/budget/concurrency enforcement a second time.
3145
+ result = await dispatchSubAgent(input, auditOptions, agentTypes);
3113
3146
  }
3114
3147
  else {
3115
3148
  const pre = runToolHooks(hooks.PreToolUse, 'PreToolUse', name, input, options.workDir);
@@ -3214,6 +3247,15 @@ async function runAgentLoop(initialMessages, options) {
3214
3247
  // exitCode lets the ledger tell a PASSED verification from a FAILED one
3215
3248
  // (a `npm test` that exits non-zero is not an `error`, but it IS a fail).
3216
3249
  ledgerRecord(ledger, block.name, block.input, ok, rawOutput ?? result.output, result.exitCode);
3250
+ // Audit emission rides alongside the ledger because THIS is the one place
3251
+ // every tool call of this loop passes exactly once, whatever happened to it:
3252
+ // executed, errored, permission-denied, plan-mode-refused, hook-blocked or
3253
+ // refused as a truncated call. Auditing onToolUse/onToolResult instead would
3254
+ // have double-counted every nested call, since runSubTask re-emits a child's
3255
+ // tool events through the parent's callbacks (see audit.ts's header).
3256
+ if (auditCtx) {
3257
+ (0, audit_1.recordAudit)(auditCtx, block.name, block.input, ok, result.output, result.error, result.exitCode);
3258
+ }
3217
3259
  if (!ok)
3218
3260
  continue; // failed calls don't count either way
3219
3261
  if (exports.WRITE_TOOL_NAMES.has(block.name))
@@ -11,7 +11,15 @@ export interface Skill {
11
11
  model?: string;
12
12
  mode?: string;
13
13
  body: string;
14
- source: 'project' | 'global' | 'builtin' | 'plugin';
14
+ /**
15
+ * 'programmatic' = registered in code via an embedding application (see the
16
+ * `extra` parameter of loadSkillsWithWarnings below), as opposed to
17
+ * discovered from a `.nexrall/skills/<name>/SKILL.md` (or legacy flat
18
+ * command) file. Added for `@nexrall/agent`'s `registerSkills()`, which lets
19
+ * a library author bundle a skill inside an npm package instead of asking
20
+ * consumers to copy a Markdown file into their project.
21
+ */
22
+ source: 'project' | 'global' | 'builtin' | 'plugin' | 'programmatic';
15
23
  /** Absolute path to the skill's own directory, for resolving supporting files. Undefined for flat command-style skills (no directory). */
16
24
  dir?: string;
17
25
  /** true → only `/name` invokes it; the model must not auto-trigger it (side-effecting workflows like /deploy). */
@@ -30,17 +38,24 @@ export interface Skill {
30
38
  /**
31
39
  * Discover all skills, with diagnostics.
32
40
  *
33
- * Precedence, most to least authoritative: project `.nexrall/skills` >
34
- * project `.nexrall/commands` > project `.agents/skills` (cross-client) >
35
- * global `.nexrall/commands` > global `.nexrall/skills` > global
36
- * `.agents/skills` (cross-client) > plugin > builtin.
41
+ * Precedence, most to least authoritative: `extra` (programmatic) > project
42
+ * `.nexrall/skills` > project `.nexrall/commands` > project `.agents/skills`
43
+ * (cross-client) > global `.nexrall/commands` > global `.nexrall/skills` >
44
+ * global `.agents/skills` (cross-client) > plugin > builtin.
37
45
  *
38
46
  * The `.agents/skills` scans are always the weakest source within their tier
39
47
  * — see the module comment above for why. Directory-style
40
48
  * `.nexrall/skills/<name>/SKILL.md` beats a flat `.nexrall/commands/<name>.md`
41
49
  * of the same name within the same precedence tier.
50
+ *
51
+ * `extra` — skills supplied directly by the embedding application (e.g.
52
+ * `@nexrall/agent`'s `registerSkills()`), rather than discovered from a
53
+ * `SKILL.md`/command file. Wins on name collision at any tier, for the same
54
+ * reason `loadAgentTypesWithWarnings`'s `extra` does: code the host
55
+ * application registered is more specific than a file a project happens to
56
+ * contain. Defaults to `[]`, so every existing caller is unaffected.
42
57
  */
43
- export declare function loadSkillsWithWarnings(workDir: string): {
58
+ export declare function loadSkillsWithWarnings(workDir: string, extra?: Skill[]): {
44
59
  skills: Skill[];
45
60
  warnings: SkillWarning[];
46
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/agent/skills.ts"],"names":[],"mappings":"AA0EA,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpD,0IAA0I;IAC1I,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kHAAkH;IAClH,sBAAsB,EAAE,OAAO,CAAC;IAChC,iGAAiG;IACjG,aAAa,EAAE,OAAO,CAAC;IACvB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8GAA8G;IAC9G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,0JAA0J;IAC1J,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AA6MD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAsBrG;AAED,kKAAkK;AAClK,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAEnD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAG1E;AAED,6GAA6G;AAC7G,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAE5D;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAE5D;AAED,oHAAoH;AACpH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAIvD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAcpF"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/agent/skills.ts"],"names":[],"mappings":"AA0EA,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;IACrE,0IAA0I;IAC1I,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kHAAkH;IAClH,sBAAsB,EAAE,OAAO,CAAC;IAChC,iGAAiG;IACjG,aAAa,EAAE,OAAO,CAAC;IACvB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8GAA8G;IAC9G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,0JAA0J;IAC1J,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AA6MD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,KAAK,EAAO,GAAG;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;CAAE,CAwB1H;AAED,kKAAkK;AAClK,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAEnD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAG1E;AAED,6GAA6G;AAC7G,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAE5D;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAE5D;AAED,oHAAoH;AACpH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAIvD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAcpF"}
@@ -259,17 +259,24 @@ const BUILTIN_SKILLS = [
259
259
  /**
260
260
  * Discover all skills, with diagnostics.
261
261
  *
262
- * Precedence, most to least authoritative: project `.nexrall/skills` >
263
- * project `.nexrall/commands` > project `.agents/skills` (cross-client) >
264
- * global `.nexrall/commands` > global `.nexrall/skills` > global
265
- * `.agents/skills` (cross-client) > plugin > builtin.
262
+ * Precedence, most to least authoritative: `extra` (programmatic) > project
263
+ * `.nexrall/skills` > project `.nexrall/commands` > project `.agents/skills`
264
+ * (cross-client) > global `.nexrall/commands` > global `.nexrall/skills` >
265
+ * global `.agents/skills` (cross-client) > plugin > builtin.
266
266
  *
267
267
  * The `.agents/skills` scans are always the weakest source within their tier
268
268
  * — see the module comment above for why. Directory-style
269
269
  * `.nexrall/skills/<name>/SKILL.md` beats a flat `.nexrall/commands/<name>.md`
270
270
  * of the same name within the same precedence tier.
271
+ *
272
+ * `extra` — skills supplied directly by the embedding application (e.g.
273
+ * `@nexrall/agent`'s `registerSkills()`), rather than discovered from a
274
+ * `SKILL.md`/command file. Wins on name collision at any tier, for the same
275
+ * reason `loadAgentTypesWithWarnings`'s `extra` does: code the host
276
+ * application registered is more specific than a file a project happens to
277
+ * contain. Defaults to `[]`, so every existing caller is unaffected.
271
278
  */
272
- function loadSkillsWithWarnings(workDir) {
279
+ function loadSkillsWithWarnings(workDir, extra = []) {
273
280
  const out = new Map();
274
281
  const warnings = [];
275
282
  // Project tier is last-write-wins (see loadSkillDir/loadFlatCommandDir's
@@ -290,6 +297,9 @@ function loadSkillsWithWarnings(workDir) {
290
297
  if (!out.has(skill.name))
291
298
  out.set(skill.name, skill);
292
299
  }
300
+ // Programmatic entries win on name collision — see doc comment above.
301
+ for (const skill of extra)
302
+ out.set(skill.name, skill);
293
303
  return { skills: [...out.values()], warnings };
294
304
  }
295
305
  /** Discover all skills (project overrides global overrides plugin overrides builtin). See loadSkillsWithWarnings for the full precedence rule and diagnostics. */
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export * from './agent/securityLint';
9
9
  export * from './agent/crossFile';
10
10
  export * from './agent/flaky';
11
11
  export * from './agent/claimEvidence';
12
+ export * from './agent/audit';
12
13
  export * from './agent/memory';
13
14
  export * from './agent/skills';
14
15
  export * from './mcp/client';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -25,6 +25,7 @@ __exportStar(require("./agent/securityLint"), exports);
25
25
  __exportStar(require("./agent/crossFile"), exports);
26
26
  __exportStar(require("./agent/flaky"), exports);
27
27
  __exportStar(require("./agent/claimEvidence"), exports);
28
+ __exportStar(require("./agent/audit"), exports);
28
29
  __exportStar(require("./agent/memory"), exports);
29
30
  __exportStar(require("./agent/skills"), exports);
30
31
  __exportStar(require("./mcp/client"), exports);
package/dist/types.d.ts CHANGED
@@ -422,6 +422,47 @@ export interface AgentLoopOptions {
422
422
  * any agent without that flag would write production source on its behalf.
423
423
  */
424
424
  _testFilesOnly?: boolean;
425
+ /**
426
+ * Agent types registered programmatically by the embedding application (e.g.
427
+ * `@nexrall/agent`'s `registerAgentType()`), merged into BOTH the catalogue
428
+ * snapshot the loop takes at the top of a run AND the reload-on-miss path
429
+ * `task` dispatch falls back to when a name isn't in that snapshot (a file
430
+ * just written mid-turn) — passing it to only one of the two would make a
431
+ * programmatic agent resolvable sometimes and "unknown" other times,
432
+ * depending on timing. See `agentTypes.ts`'s `loadAgentTypesWithWarnings`
433
+ * for the merge/precedence rule this list participates in.
434
+ */
435
+ _extraAgentTypes?: import('./agent/agentTypes').AgentType[];
436
+ /** As `_extraAgentTypes`, for `@nexrall/agent`'s `registerSkills()`. */
437
+ _extraSkills?: import('./agent/skills').Skill[];
438
+ /**
439
+ * Internal: the sub-agent TYPE name this run is executing as (e.g. 'reviewer'),
440
+ * or undefined for the main agent.
441
+ *
442
+ * Carried for the audit trail: `_agentScope` identifies the run instance
443
+ * ('sub_3'), which is meaningless to an auditor on its own — "which agent did
444
+ * this" has to name the definition that granted the capability, not just the
445
+ * slot number it happened to run in.
446
+ */
447
+ _agentTypeName?: string;
448
+ /**
449
+ * Opt-in tool-call audit trail (compliance/regulated deployments).
450
+ *
451
+ * Absent — which is every existing caller — means auditing is entirely off and
452
+ * the loop behaves exactly as before: the added code is one `if` that is false.
453
+ * Supplied, it records every tool call this run makes, INCLUDING calls that were
454
+ * refused and never executed, to the host-provided sink.
455
+ *
456
+ * Lives at this level rather than in the SDK or the Desktop app on purpose: all
457
+ * of them (CLI, VS Code, SDK, Desktop) funnel through this one loop, and a
458
+ * guarantee implemented once per client is a guarantee that drifts apart per
459
+ * client — which for an audit trail means one entry path silently logging
460
+ * nothing. Sub-agents inherit it through the options spread in runSubTask, so a
461
+ * delegated call is recorded by the sub-agent's own loop, exactly once.
462
+ *
463
+ * See docs/NEXRALL_AUDIT_TRAIL_LAYER.md.
464
+ */
465
+ audit?: import('./agent/audit').AuditConfig;
425
466
  }
426
467
  /**
427
468
  * Thrown by `runAgentLoop` when a turn cannot continue (stream died, upstream
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAKD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,iBAAiB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,aAAa,CAAC;AAInG,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,0HAA0H;AAC1H,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,eAAe,GACf,uBAAuB,GACvB,aAAa,GACb,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,wBAAwB,GACxB,qBAAqB,GACrB,aAAa,GACb,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,CAAC;AAI1B,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,8DAA8D;IAC9D,oBAAoB,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChH,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvF,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9E;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/E;;;;;OAKG;IACH,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACnG,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,eAAe,EAAE,UAAU,CAAC;IAChD,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,OAAO,sBAAsB,EAAE,iBAAiB,CAAC;IACrE;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IAClC,+FAA+F;IAC/F,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC3C;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1E;;;;;OAKG;IACH,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,oBAAoB,EAAE,SAAS,EAAE,CAAC;IAC5D,wEAAwE;IACxE,YAAY,CAAC,EAAE,OAAO,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAChD;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,EAAE,OAAO,eAAe,EAAE,WAAW,CAAC;CAC7C;AAID;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC7B;;;;;;;;OAQG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAOzF;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAG7D"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nexrall/code-core",
3
- "version": "1.4.49",
4
- "description": "Core agent loop, tools, and extension primitives for Nexrall Code embed an AI coding agent in any Node.js application.",
3
+ "version": "1.4.51",
4
+ "description": "Core agent loop, tools, and extension primitives for Nexrall Code \u2014 embed an AI coding agent in any Node.js application.",
5
5
  "license": "MIT",
6
6
  "author": "Nexrall <support@nexrall.com> (https://nexrall.com)",
7
7
  "homepage": "https://github.com/nexrall/nexrall-code#readme",