@nifrajs/coding-agent 3.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/EXTENSIONS.md +25 -0
- package/PERFORMANCE.md +19 -0
- package/README.md +69 -0
- package/REGISTRY.md +15 -0
- package/SECURITY.md +32 -0
- package/dist/approvals.d.ts +70 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +174 -0
- package/dist/approvals.js.map +1 -0
- package/dist/capabilities.d.ts +20 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +49 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/cli.d.ts +24 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +380 -0
- package/dist/cli.js.map +1 -0
- package/dist/context.d.ts +17 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +66 -0
- package/dist/context.js.map +1 -0
- package/dist/deployment-adapters.d.ts +40 -0
- package/dist/deployment-adapters.d.ts.map +1 -0
- package/dist/deployment-adapters.js +147 -0
- package/dist/deployment-adapters.js.map +1 -0
- package/dist/diff.d.ts +17 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +61 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +35 -0
- package/dist/errors.js.map +1 -0
- package/dist/extensions.d.ts +104 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +284 -0
- package/dist/extensions.js.map +1 -0
- package/dist/handoffs.d.ts +97 -0
- package/dist/handoffs.d.ts.map +1 -0
- package/dist/handoffs.js +199 -0
- package/dist/handoffs.js.map +1 -0
- package/dist/healing.d.ts +56 -0
- package/dist/healing.d.ts.map +1 -0
- package/dist/healing.js +54 -0
- package/dist/healing.js.map +1 -0
- package/dist/host.d.ts +61 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +369 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/isolated-worker.d.ts +2 -0
- package/dist/isolated-worker.d.ts.map +1 -0
- package/dist/isolated-worker.js +155 -0
- package/dist/isolated-worker.js.map +1 -0
- package/dist/isolated.d.ts +52 -0
- package/dist/isolated.d.ts.map +1 -0
- package/dist/isolated.js +293 -0
- package/dist/isolated.js.map +1 -0
- package/dist/native.d.ts +92 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +339 -0
- package/dist/native.js.map +1 -0
- package/dist/orchestration/artifact-port.d.ts +30 -0
- package/dist/orchestration/artifact-port.d.ts.map +1 -0
- package/dist/orchestration/artifact-port.js +59 -0
- package/dist/orchestration/artifact-port.js.map +1 -0
- package/dist/orchestration/catalog.d.ts +71 -0
- package/dist/orchestration/catalog.d.ts.map +1 -0
- package/dist/orchestration/catalog.js +46 -0
- package/dist/orchestration/catalog.js.map +1 -0
- package/dist/orchestration/compile.d.ts +59 -0
- package/dist/orchestration/compile.d.ts.map +1 -0
- package/dist/orchestration/compile.js +268 -0
- package/dist/orchestration/compile.js.map +1 -0
- package/dist/orchestration/dispatch.d.ts +115 -0
- package/dist/orchestration/dispatch.d.ts.map +1 -0
- package/dist/orchestration/dispatch.js +220 -0
- package/dist/orchestration/dispatch.js.map +1 -0
- package/dist/orchestration/durable-jobs.d.ts +35 -0
- package/dist/orchestration/durable-jobs.d.ts.map +1 -0
- package/dist/orchestration/durable-jobs.js +273 -0
- package/dist/orchestration/durable-jobs.js.map +1 -0
- package/dist/orchestration/effect-key.d.ts +23 -0
- package/dist/orchestration/effect-key.d.ts.map +1 -0
- package/dist/orchestration/effect-key.js +24 -0
- package/dist/orchestration/effect-key.js.map +1 -0
- package/dist/orchestration/evidence-store.d.ts +75 -0
- package/dist/orchestration/evidence-store.d.ts.map +1 -0
- package/dist/orchestration/evidence-store.js +183 -0
- package/dist/orchestration/evidence-store.js.map +1 -0
- package/dist/orchestration/hash.d.ts +12 -0
- package/dist/orchestration/hash.d.ts.map +1 -0
- package/dist/orchestration/hash.js +43 -0
- package/dist/orchestration/hash.js.map +1 -0
- package/dist/orchestration/host.d.ts +121 -0
- package/dist/orchestration/host.d.ts.map +1 -0
- package/dist/orchestration/host.js +334 -0
- package/dist/orchestration/host.js.map +1 -0
- package/dist/orchestration/index.d.ts +20 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +19 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/policy.d.ts +63 -0
- package/dist/orchestration/policy.d.ts.map +1 -0
- package/dist/orchestration/policy.js +80 -0
- package/dist/orchestration/policy.js.map +1 -0
- package/dist/orchestration/recovery.d.ts +87 -0
- package/dist/orchestration/recovery.d.ts.map +1 -0
- package/dist/orchestration/recovery.js +197 -0
- package/dist/orchestration/recovery.js.map +1 -0
- package/dist/orchestration/tracer.d.ts +31 -0
- package/dist/orchestration/tracer.d.ts.map +1 -0
- package/dist/orchestration/tracer.js +141 -0
- package/dist/orchestration/tracer.js.map +1 -0
- package/dist/plans.d.ts +35 -0
- package/dist/plans.d.ts.map +1 -0
- package/dist/plans.js +63 -0
- package/dist/plans.js.map +1 -0
- package/dist/presets.d.ts +10 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +70 -0
- package/dist/presets.js.map +1 -0
- package/dist/process.d.ts +6 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +42 -0
- package/dist/process.js.map +1 -0
- package/dist/registry.d.ts +37 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +51 -0
- package/dist/registry.js.map +1 -0
- package/dist/replay.d.ts +24 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +154 -0
- package/dist/replay.js.map +1 -0
- package/dist/rpc.d.ts +51 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +412 -0
- package/dist/rpc.js.map +1 -0
- package/dist/session-migration.d.ts +59 -0
- package/dist/session-migration.d.ts.map +1 -0
- package/dist/session-migration.js +315 -0
- package/dist/session-migration.js.map +1 -0
- package/dist/sessions.d.ts +74 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +222 -0
- package/dist/sessions.js.map +1 -0
- package/dist/subagents.d.ts +51 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +141 -0
- package/dist/subagents.js.map +1 -0
- package/dist/tools.d.ts +13 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +37 -0
- package/dist/tools.js.map +1 -0
- package/dist/ui.d.ts +42 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +93 -0
- package/dist/ui.js.map +1 -0
- package/dist/verification.d.ts +34 -0
- package/dist/verification.d.ts.map +1 -0
- package/dist/verification.js +91 -0
- package/dist/verification.js.map +1 -0
- package/dist/workflows.d.ts +98 -0
- package/dist/workflows.d.ts.map +1 -0
- package/dist/workflows.js +174 -0
- package/dist/workflows.js.map +1 -0
- package/package.json +84 -0
- package/src/approvals.ts +249 -0
- package/src/capabilities.ts +74 -0
- package/src/cli.ts +405 -0
- package/src/context.ts +81 -0
- package/src/deployment-adapters.ts +181 -0
- package/src/diff.ts +80 -0
- package/src/errors.ts +46 -0
- package/src/extensions.ts +402 -0
- package/src/handoffs.ts +299 -0
- package/src/healing.ts +93 -0
- package/src/host.ts +465 -0
- package/src/index.ts +165 -0
- package/src/isolated-worker.ts +177 -0
- package/src/isolated.ts +344 -0
- package/src/native.ts +478 -0
- package/src/orchestration/artifact-port.ts +75 -0
- package/src/orchestration/catalog.ts +102 -0
- package/src/orchestration/compile.ts +373 -0
- package/src/orchestration/dispatch.ts +383 -0
- package/src/orchestration/durable-jobs.ts +374 -0
- package/src/orchestration/effect-key.ts +35 -0
- package/src/orchestration/evidence-store.ts +233 -0
- package/src/orchestration/hash.ts +43 -0
- package/src/orchestration/host.ts +445 -0
- package/src/orchestration/index.ts +131 -0
- package/src/orchestration/policy.ts +116 -0
- package/src/orchestration/recovery.ts +271 -0
- package/src/orchestration/tracer.ts +177 -0
- package/src/plans.ts +105 -0
- package/src/presets.ts +90 -0
- package/src/process.ts +47 -0
- package/src/registry.ts +80 -0
- package/src/replay.ts +190 -0
- package/src/rpc.ts +598 -0
- package/src/session-migration.ts +401 -0
- package/src/sessions.ts +303 -0
- package/src/subagents.ts +210 -0
- package/src/tools.ts +52 -0
- package/src/ui.ts +137 -0
- package/src/verification.ts +133 -0
- package/src/workflows.ts +279 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Truthful public deployment reference profiles.
|
|
3
|
+
*
|
|
4
|
+
* These adapters are deterministic lifecycle fixtures. They do not start a process, connect to a
|
|
5
|
+
* network, distribute secrets, or isolate hostile code. A real deployment implementation belongs
|
|
6
|
+
* behind the public `AgentDeploymentAdapter` contract and must provide its own security proof.
|
|
7
|
+
*/
|
|
8
|
+
import { DeploymentError, parseDeploymentCapabilityReport, } from "@nifrajs/agent";
|
|
9
|
+
const LOCAL_PROCESS_CAPABILITIES = Object.freeze({
|
|
10
|
+
schemaVersion: 1,
|
|
11
|
+
adapterId: "local-process",
|
|
12
|
+
capabilities: Object.freeze({
|
|
13
|
+
runtime: "local",
|
|
14
|
+
network: "none",
|
|
15
|
+
filesystem: "workspace",
|
|
16
|
+
process: "child",
|
|
17
|
+
secrets: "none",
|
|
18
|
+
workspace: Object.freeze({ mode: "scoped", maxBytes: 10_000_000_000 }),
|
|
19
|
+
cancellation: "cooperative",
|
|
20
|
+
hostileCodeIsolation: "none",
|
|
21
|
+
}),
|
|
22
|
+
limitations: Object.freeze(["not-a-sandbox", "trusted-local"]),
|
|
23
|
+
});
|
|
24
|
+
const CI_CAPABILITIES = Object.freeze({
|
|
25
|
+
schemaVersion: 1,
|
|
26
|
+
adapterId: "ci",
|
|
27
|
+
capabilities: Object.freeze({
|
|
28
|
+
runtime: "ci",
|
|
29
|
+
network: "none",
|
|
30
|
+
filesystem: "workspace",
|
|
31
|
+
process: "child",
|
|
32
|
+
secrets: "none",
|
|
33
|
+
workspace: Object.freeze({ mode: "scoped", maxBytes: 10_000_000_000 }),
|
|
34
|
+
cancellation: "cooperative",
|
|
35
|
+
hostileCodeIsolation: "none",
|
|
36
|
+
}),
|
|
37
|
+
limitations: Object.freeze(["not-a-sandbox", "ephemeral"]),
|
|
38
|
+
});
|
|
39
|
+
const REPLAY_CAPABILITIES = Object.freeze({
|
|
40
|
+
schemaVersion: 1,
|
|
41
|
+
adapterId: "replay",
|
|
42
|
+
capabilities: Object.freeze({
|
|
43
|
+
runtime: "replay",
|
|
44
|
+
network: "none",
|
|
45
|
+
filesystem: "none",
|
|
46
|
+
process: "none",
|
|
47
|
+
secrets: "none",
|
|
48
|
+
workspace: Object.freeze({ mode: "none", maxBytes: 0 }),
|
|
49
|
+
cancellation: "cooperative",
|
|
50
|
+
hostileCodeIsolation: "none",
|
|
51
|
+
}),
|
|
52
|
+
limitations: Object.freeze(["not-a-sandbox", "no-side-effects"]),
|
|
53
|
+
});
|
|
54
|
+
class DeterministicDeploymentAdapter {
|
|
55
|
+
id;
|
|
56
|
+
report;
|
|
57
|
+
states = new Map();
|
|
58
|
+
constructor(report) {
|
|
59
|
+
this.report = parseDeploymentCapabilityReport(report);
|
|
60
|
+
this.id = this.report.adapterId;
|
|
61
|
+
}
|
|
62
|
+
capabilityReport() {
|
|
63
|
+
return this.report;
|
|
64
|
+
}
|
|
65
|
+
prepare(request) {
|
|
66
|
+
this.assertActive(request.signal);
|
|
67
|
+
const deploymentId = request.plan.deploymentId;
|
|
68
|
+
if (this.states.has(deploymentId))
|
|
69
|
+
throw new DeploymentError("invalid_transition");
|
|
70
|
+
this.states.set(deploymentId, "prepared");
|
|
71
|
+
return Object.freeze({
|
|
72
|
+
deploymentId,
|
|
73
|
+
state: "prepared",
|
|
74
|
+
preparedRef: `${deploymentId}:prepared`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
start(request) {
|
|
78
|
+
this.assertActive(request.signal);
|
|
79
|
+
if (this.states.get(request.deploymentId) !== "prepared" ||
|
|
80
|
+
request.preparedRef !== `${request.deploymentId}:prepared`)
|
|
81
|
+
throw new DeploymentError("invalid_transition");
|
|
82
|
+
this.states.set(request.deploymentId, "running");
|
|
83
|
+
return Object.freeze({
|
|
84
|
+
deploymentId: request.deploymentId,
|
|
85
|
+
state: "running",
|
|
86
|
+
handleRef: `${request.deploymentId}:handle`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
inspect(request) {
|
|
90
|
+
this.assertActive(request.signal);
|
|
91
|
+
const state = this.states.get(request.deploymentId);
|
|
92
|
+
if (state === undefined)
|
|
93
|
+
throw new DeploymentError("invalid_transition");
|
|
94
|
+
return Object.freeze({
|
|
95
|
+
deploymentId: request.deploymentId,
|
|
96
|
+
state,
|
|
97
|
+
...(state === "running" ? { handleRef: `${request.deploymentId}:handle` } : {}),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
cancel(request) {
|
|
101
|
+
this.assertActive(request.signal);
|
|
102
|
+
const state = this.states.get(request.deploymentId);
|
|
103
|
+
if (state !== "prepared" && state !== "running")
|
|
104
|
+
throw new DeploymentError("invalid_transition");
|
|
105
|
+
this.states.set(request.deploymentId, "cancelled");
|
|
106
|
+
return Object.freeze({ deploymentId: request.deploymentId, state: "cancelled" });
|
|
107
|
+
}
|
|
108
|
+
dispose(request) {
|
|
109
|
+
this.assertActive(request.signal);
|
|
110
|
+
this.states.set(request.deploymentId, "disposed");
|
|
111
|
+
return Object.freeze({ deploymentId: request.deploymentId, state: "disposed" });
|
|
112
|
+
}
|
|
113
|
+
assertActive(signal) {
|
|
114
|
+
if (signal.aborted)
|
|
115
|
+
throw new DeploymentError("cancelled");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export class LocalProcessDeploymentAdapter extends DeterministicDeploymentAdapter {
|
|
119
|
+
constructor() {
|
|
120
|
+
super(LOCAL_PROCESS_CAPABILITIES);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export class CiDeploymentAdapter extends DeterministicDeploymentAdapter {
|
|
124
|
+
constructor() {
|
|
125
|
+
super(CI_CAPABILITIES);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export class ReplayDeploymentAdapter extends DeterministicDeploymentAdapter {
|
|
129
|
+
constructor() {
|
|
130
|
+
super(REPLAY_CAPABILITIES);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export function createLocalProcessDeploymentAdapter() {
|
|
134
|
+
return new LocalProcessDeploymentAdapter();
|
|
135
|
+
}
|
|
136
|
+
export function createCiDeploymentAdapter() {
|
|
137
|
+
return new CiDeploymentAdapter();
|
|
138
|
+
}
|
|
139
|
+
export function createReplayDeploymentAdapter() {
|
|
140
|
+
return new ReplayDeploymentAdapter();
|
|
141
|
+
}
|
|
142
|
+
export const DEPLOYMENT_REFERENCE_PROFILES = Object.freeze({
|
|
143
|
+
localProcess: LOCAL_PROCESS_CAPABILITIES,
|
|
144
|
+
ci: CI_CAPABILITIES,
|
|
145
|
+
replay: REPLAY_CAPABILITIES,
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=deployment-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-adapters.js","sourceRoot":"","sources":["../src/deployment-adapters.ts"],"names":[],"mappings":"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"}
|
package/dist/diff.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ProjectDiffOptions {
|
|
2
|
+
readonly cwd: string;
|
|
3
|
+
readonly timeoutMs?: number;
|
|
4
|
+
readonly maxOutputBytes?: number;
|
|
5
|
+
readonly exposeErrorStacks?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface ProjectDiffResult {
|
|
8
|
+
readonly ok: boolean;
|
|
9
|
+
readonly status: number | null;
|
|
10
|
+
readonly output?: string;
|
|
11
|
+
readonly truncated?: boolean;
|
|
12
|
+
readonly error?: string;
|
|
13
|
+
readonly stack?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Read a bounded, non-interactive git diff for review surfaces. No user-supplied git arguments are accepted. */
|
|
16
|
+
export declare function readProjectDiff(options: ProjectDiffOptions): Promise<ProjectDiffResult>;
|
|
17
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,iHAAiH;AACjH,wBAAsB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkD7F"}
|
package/dist/diff.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { publicErrorDetails } from "./errors.js";
|
|
2
|
+
import { readBoundedText } from "./process.js";
|
|
3
|
+
/** Read a bounded, non-interactive git diff for review surfaces. No user-supplied git arguments are accepted. */
|
|
4
|
+
export async function readProjectDiff(options) {
|
|
5
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
6
|
+
const maxOutputBytes = options.maxOutputBytes ?? 512 * 1024;
|
|
7
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 10 * 60_000)
|
|
8
|
+
throw new RangeError("project diff: timeoutMs is invalid");
|
|
9
|
+
if (!Number.isSafeInteger(maxOutputBytes) ||
|
|
10
|
+
maxOutputBytes < 1024 ||
|
|
11
|
+
maxOutputBytes > 16 * 1024 * 1024)
|
|
12
|
+
throw new RangeError("project diff: maxOutputBytes is invalid");
|
|
13
|
+
const proc = Bun.spawn(["git", "--no-pager", "diff", "HEAD", "--no-ext-diff", "--unified=3", "--"], {
|
|
14
|
+
cwd: options.cwd,
|
|
15
|
+
stdin: "ignore",
|
|
16
|
+
stdout: "pipe",
|
|
17
|
+
stderr: "pipe",
|
|
18
|
+
env: safeEnv(),
|
|
19
|
+
});
|
|
20
|
+
let timedOut = false;
|
|
21
|
+
const timer = setTimeout(() => {
|
|
22
|
+
timedOut = true;
|
|
23
|
+
proc.kill();
|
|
24
|
+
}, timeoutMs);
|
|
25
|
+
try {
|
|
26
|
+
const [stdout, stderr, status] = await Promise.all([
|
|
27
|
+
readBoundedText(proc.stdout, maxOutputBytes),
|
|
28
|
+
readBoundedText(proc.stderr, Math.min(maxOutputBytes, 64 * 1024)),
|
|
29
|
+
proc.exited,
|
|
30
|
+
]);
|
|
31
|
+
return {
|
|
32
|
+
ok: !timedOut && status === 0,
|
|
33
|
+
status,
|
|
34
|
+
output: stdout.text.length > 0 ? stdout.text : stderr.text,
|
|
35
|
+
...(stdout.truncated ? { truncated: true } : {}),
|
|
36
|
+
...(timedOut ? { error: `git diff timed out after ${timeoutMs}ms` } : {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const details = publicErrorDetails(error, "git diff failed", options.exposeErrorStacks === true);
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
status: null,
|
|
44
|
+
error: details.message,
|
|
45
|
+
...(details.stack === undefined ? {} : { stack: details.stack }),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
clearTimeout(timer);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function safeEnv() {
|
|
53
|
+
const result = {};
|
|
54
|
+
for (const name of ["PATH", "HOME", "LANG", "LC_ALL", "TERM", "GIT_PAGER"]) {
|
|
55
|
+
const value = name === "GIT_PAGER" ? "cat" : process.env[name];
|
|
56
|
+
if (value !== undefined)
|
|
57
|
+
result[name] = value;
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=diff.js.map
|
package/dist/diff.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface PublicErrorDetails {
|
|
2
|
+
readonly message: string;
|
|
3
|
+
readonly stack?: string;
|
|
4
|
+
}
|
|
5
|
+
/** Return the useful diagnostic without serializing an Error object or its stack. */
|
|
6
|
+
export declare function publicErrorMessage(error: unknown, fallback: string): string;
|
|
7
|
+
/** Add a bounded stack only for an explicitly trusted local diagnostics channel. */
|
|
8
|
+
export declare function publicErrorDetails(error: unknown, fallback: string, includeStack?: boolean): PublicErrorDetails;
|
|
9
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAa3E;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,UAAQ,GACnB,kBAAkB,CAgBpB"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const MAX_PUBLIC_ERROR_LENGTH = 4096;
|
|
2
|
+
const MAX_PUBLIC_STACK_LENGTH = 16 * 1024;
|
|
3
|
+
/** Return the useful diagnostic without serializing an Error object or its stack. */
|
|
4
|
+
export function publicErrorMessage(error, fallback) {
|
|
5
|
+
const message = error instanceof Error
|
|
6
|
+
? error.message
|
|
7
|
+
: typeof error === "string"
|
|
8
|
+
? error
|
|
9
|
+
: error !== null && typeof error === "object" && "message" in error
|
|
10
|
+
? error.message
|
|
11
|
+
: undefined;
|
|
12
|
+
if (typeof message !== "string" || message.length === 0)
|
|
13
|
+
return fallback;
|
|
14
|
+
return message.length > MAX_PUBLIC_ERROR_LENGTH
|
|
15
|
+
? `${message.slice(0, MAX_PUBLIC_ERROR_LENGTH)}…`
|
|
16
|
+
: message;
|
|
17
|
+
}
|
|
18
|
+
/** Add a bounded stack only for an explicitly trusted local diagnostics channel. */
|
|
19
|
+
export function publicErrorDetails(error, fallback, includeStack = false) {
|
|
20
|
+
const message = publicErrorMessage(error, fallback);
|
|
21
|
+
if (!includeStack || !(error instanceof Error) || typeof error.stack !== "string")
|
|
22
|
+
return { message };
|
|
23
|
+
const stack = error.stack;
|
|
24
|
+
return {
|
|
25
|
+
message,
|
|
26
|
+
...(stack.length === 0
|
|
27
|
+
? {}
|
|
28
|
+
: {
|
|
29
|
+
stack: stack.length > MAX_PUBLIC_STACK_LENGTH
|
|
30
|
+
? `${stack.slice(0, MAX_PUBLIC_STACK_LENGTH)}…`
|
|
31
|
+
: stack,
|
|
32
|
+
}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG,IAAI,CAAA;AACpC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAA;AAOzC,qFAAqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,QAAgB;IACjE,MAAM,OAAO,GACX,KAAK,YAAY,KAAK;QACpB,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK;gBACjE,CAAC,CAAE,KAAwC,CAAC,OAAO;gBACnD,CAAC,CAAC,SAAS,CAAA;IACnB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IACxE,OAAO,OAAO,CAAC,MAAM,GAAG,uBAAuB;QAC7C,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,GAAG;QACjD,CAAC,CAAC,OAAO,CAAA;AACb,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,QAAgB,EAChB,YAAY,GAAG,KAAK;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnD,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,OAAO;QACL,OAAO;QACP,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACpB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,KAAK,EACH,KAAK,CAAC,MAAM,GAAG,uBAAuB;oBACpC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,GAAG;oBAC/C,CAAC,CAAC,KAAK;aACZ,CAAC;KACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { type WorkflowEvent, type WorkflowResult, type WorkflowStep } from "./workflows.js";
|
|
2
|
+
export interface ExtensionContext {
|
|
3
|
+
readonly cwd: string;
|
|
4
|
+
readonly registerCommand: (name: string, handler: ExtensionCommand) => void;
|
|
5
|
+
readonly registerTool: (tool: ExtensionTool) => void;
|
|
6
|
+
readonly registerWorkflow: (name: string, workflow: ExtensionWorkflow) => void;
|
|
7
|
+
readonly registerSubagent: (role: ExtensionSubagent) => void;
|
|
8
|
+
readonly registerProvider: (provider: ExtensionProvider) => void;
|
|
9
|
+
readonly on: (event: string, handler: ExtensionEventHandler) => void;
|
|
10
|
+
}
|
|
11
|
+
export type ExtensionCommand = (args: string, context: ExtensionContext) => unknown | PromiseLike<unknown>;
|
|
12
|
+
export interface ExtensionTool {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly description: string;
|
|
15
|
+
readonly capabilities?: readonly string[];
|
|
16
|
+
readonly execute: (input: unknown, context: ExtensionContext) => unknown | PromiseLike<unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface ExtensionSubagent {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly description: string;
|
|
21
|
+
readonly prompt: string;
|
|
22
|
+
readonly capabilities?: readonly string[];
|
|
23
|
+
readonly maxDepth?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ExtensionProvider {
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly description: string;
|
|
28
|
+
readonly capabilities?: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export type ExtensionEventHandler = (payload: unknown, context: ExtensionContext) => unknown | PromiseLike<unknown>;
|
|
31
|
+
/** A workflow factory keeps orchestration lazy and lets every extension fully customize its steps. */
|
|
32
|
+
export type ExtensionWorkflow = (context: ExtensionContext) => WorkflowStep | PromiseLike<WorkflowStep>;
|
|
33
|
+
export interface WorkflowRunOptions {
|
|
34
|
+
readonly signal?: AbortSignal;
|
|
35
|
+
readonly maxSteps?: number;
|
|
36
|
+
readonly maxDepth?: number;
|
|
37
|
+
readonly onEvent?: (event: WorkflowEvent) => void | PromiseLike<void>;
|
|
38
|
+
readonly exposeErrorStacks?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface CodingAgentExtension {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly path: string;
|
|
43
|
+
readonly capabilities: readonly string[];
|
|
44
|
+
readonly dispose?: () => void | PromiseLike<void>;
|
|
45
|
+
}
|
|
46
|
+
export interface ExtensionReloadResult {
|
|
47
|
+
readonly revision: string;
|
|
48
|
+
readonly loaded: readonly string[];
|
|
49
|
+
readonly disabled: readonly string[];
|
|
50
|
+
readonly rolledBack: boolean;
|
|
51
|
+
readonly error?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface ExtensionHostOptions {
|
|
54
|
+
readonly cwd: string;
|
|
55
|
+
readonly roots: readonly string[];
|
|
56
|
+
readonly trustedCapabilities?: readonly string[];
|
|
57
|
+
/** Optional fast syntax/type/build gate that runs before a module is staged. */
|
|
58
|
+
readonly validate?: (path: string) => void | PromiseLike<void>;
|
|
59
|
+
readonly onError?: (error: {
|
|
60
|
+
readonly path: string;
|
|
61
|
+
readonly error: unknown;
|
|
62
|
+
}) => void;
|
|
63
|
+
}
|
|
64
|
+
/** Discover only project-local extension files; no home-directory or dependency scan is implicit. */
|
|
65
|
+
export declare function discoverExtensions(cwd: string): Promise<readonly string[]>;
|
|
66
|
+
/** Parse an extension without activating it. This is a fast syntax gate before staging. */
|
|
67
|
+
export declare function validateExtensionModule(path: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Transactional TypeScript extension loader for the Nifra-native backend.
|
|
70
|
+
*
|
|
71
|
+
* This loader only activates explicitly supplied files. It never scans a project implicitly and it
|
|
72
|
+
* leaves the previous extension graph intact when a staged reload fails.
|
|
73
|
+
*/
|
|
74
|
+
export declare class ExtensionHost {
|
|
75
|
+
private readonly options;
|
|
76
|
+
private active;
|
|
77
|
+
private commands;
|
|
78
|
+
private tools;
|
|
79
|
+
private workflows;
|
|
80
|
+
private subagents;
|
|
81
|
+
private providers;
|
|
82
|
+
private handlers;
|
|
83
|
+
private revision;
|
|
84
|
+
constructor(options: ExtensionHostOptions);
|
|
85
|
+
get extensions(): readonly CodingAgentExtension[];
|
|
86
|
+
get currentRevision(): string;
|
|
87
|
+
get availableCommands(): readonly string[];
|
|
88
|
+
get availableTools(): readonly ExtensionTool[];
|
|
89
|
+
get availableWorkflows(): readonly string[];
|
|
90
|
+
get availableSubagents(): readonly ExtensionSubagent[];
|
|
91
|
+
get availableProviders(): readonly ExtensionProvider[];
|
|
92
|
+
reload(): Promise<ExtensionReloadResult>;
|
|
93
|
+
close(): Promise<void>;
|
|
94
|
+
command(name: string): ExtensionCommand | undefined;
|
|
95
|
+
tool(name: string): ExtensionTool | undefined;
|
|
96
|
+
workflow(name: string): ExtensionWorkflow | undefined;
|
|
97
|
+
subagent(name: string): ExtensionSubagent | undefined;
|
|
98
|
+
provider(name: string): ExtensionProvider | undefined;
|
|
99
|
+
runWorkflow(name: string, options?: WorkflowRunOptions): Promise<WorkflowResult>;
|
|
100
|
+
emit(event: string, payload: unknown): Promise<void>;
|
|
101
|
+
private loadOne;
|
|
102
|
+
private context;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EAEnB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC3E,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAA;IACpD,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC9E,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAChE,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAA;CACrE;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,KACtB,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEnC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;CAChG;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC1C;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,gBAAgB,KACtB,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAEnC,sGAAsG;AACtG,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,gBAAgB,KACtB,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;AAE7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IACrE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChD,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;CACvF;AAED,qGAAqG;AACrG,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAQhF;AAED,2FAA2F;AAC3F,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUzE;AASD;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,QAAQ,CAAM;gBAEV,OAAO,EAAE,oBAAoB;IAQzC,IAAI,UAAU,IAAI,SAAS,oBAAoB,EAAE,CAEhD;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAEzC;IAED,IAAI,cAAc,IAAI,SAAS,aAAa,EAAE,CAE7C;IAED,IAAI,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAE1C;IAED,IAAI,kBAAkB,IAAI,SAAS,iBAAiB,EAAE,CAErD;IAED,IAAI,kBAAkB,IAAI,SAAS,iBAAiB,EAAE,CAErD;IAEK,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAqFxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAInD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI7C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIrD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIrD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI/C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IAOpF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAI5C,OAAO;IAoCrB,OAAO,CAAC,OAAO;CAsDhB"}
|