natroc 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/server/dist/agent/auto-improver.d.ts +33 -0
- package/server/dist/agent/auto-improver.js +125 -0
- package/server/dist/agent/auto-improver.js.map +1 -0
- package/server/dist/agent/home-context.js +81 -14
- package/server/dist/agent/home-context.js.map +1 -1
- package/server/dist/agent/improvement-engine.d.ts +1 -0
- package/server/dist/agent/improvement-engine.js +18 -0
- package/server/dist/agent/improvement-engine.js.map +1 -1
- package/server/dist/agent/tools/types.d.ts +6 -0
- package/server/dist/agent/tools/write-file.js +11 -1
- package/server/dist/agent/tools/write-file.js.map +1 -1
- package/server/dist/config/natroc-config.d.ts +6 -0
- package/server/dist/config/natroc-config.js +22 -0
- package/server/dist/config/natroc-config.js.map +1 -1
- package/server/dist/gateway/agent-service.d.ts +15 -1
- package/server/dist/gateway/agent-service.js +58 -6
- package/server/dist/gateway/agent-service.js.map +1 -1
- package/server/dist/gateway/gateway.js +7 -0
- package/server/dist/gateway/gateway.js.map +1 -1
- package/server/dist/gateway/rpc/agent.js +47 -0
- package/server/dist/gateway/rpc/agent.js.map +1 -1
- package/server/dist/gateway/rpc/conversations.js +11 -2
- package/server/dist/gateway/rpc/conversations.js.map +1 -1
- package/server/dist/runtime.d.ts +2 -0
- package/server/dist/runtime.js.map +1 -1
- package/server/dist/storage/auth-repository.d.ts +5 -0
- package/server/dist/storage/auth-repository.js +6 -0
- package/server/dist/storage/auth-repository.js.map +1 -1
- package/server/dist/storage/memory-repository.d.ts +8 -0
- package/server/dist/storage/memory-repository.js +49 -26
- package/server/dist/storage/memory-repository.js.map +1 -1
- package/ui/dist/assets/{index-BiU8FgKo.js → index-C9vuE6UQ.js} +1 -1
- package/ui/dist/assets/index-DHIA01cO.css +2 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-Dosh6wwG.css +0 -2
package/package.json
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RuntimeState } from "../runtime.js";
|
|
2
|
+
export type AutoImproveStatus = {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
killSwitch: boolean;
|
|
5
|
+
intervalMs: number;
|
|
6
|
+
runAfterEachConversation: boolean;
|
|
7
|
+
lastCycleAt: string | null;
|
|
8
|
+
lastCycleDurationMs: number | null;
|
|
9
|
+
lastCycleStatus: "ok" | "skipped" | "error" | null;
|
|
10
|
+
lastCycleReason: string | null;
|
|
11
|
+
lastCycleUserId: string | null;
|
|
12
|
+
inFlightUserIds: string[];
|
|
13
|
+
};
|
|
14
|
+
export declare class AutoImprover {
|
|
15
|
+
private readonly runtime;
|
|
16
|
+
private timer;
|
|
17
|
+
private readonly inFlight;
|
|
18
|
+
private lastCycleAt;
|
|
19
|
+
private lastCycleDurationMs;
|
|
20
|
+
private lastCycleStatus;
|
|
21
|
+
private lastCycleReason;
|
|
22
|
+
private lastCycleUserId;
|
|
23
|
+
constructor(runtime: RuntimeState);
|
|
24
|
+
start(): void;
|
|
25
|
+
stop(): void;
|
|
26
|
+
status(): AutoImproveStatus;
|
|
27
|
+
runAllUsers(): Promise<void>;
|
|
28
|
+
runForUser(userId: string): Promise<void>;
|
|
29
|
+
private recordSuccess;
|
|
30
|
+
private recordError;
|
|
31
|
+
private recordSkipped;
|
|
32
|
+
private broadcast;
|
|
33
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { runReflectionTurn } from "../gateway/agent-service.js";
|
|
3
|
+
export class AutoImprover {
|
|
4
|
+
runtime;
|
|
5
|
+
timer = null;
|
|
6
|
+
inFlight = new Set();
|
|
7
|
+
lastCycleAt = null;
|
|
8
|
+
lastCycleDurationMs = null;
|
|
9
|
+
lastCycleStatus = null;
|
|
10
|
+
lastCycleReason = null;
|
|
11
|
+
lastCycleUserId = null;
|
|
12
|
+
constructor(runtime) {
|
|
13
|
+
this.runtime = runtime;
|
|
14
|
+
}
|
|
15
|
+
start() {
|
|
16
|
+
this.stop();
|
|
17
|
+
const config = this.runtime.config?.autoImprove;
|
|
18
|
+
if (!config?.enabled)
|
|
19
|
+
return;
|
|
20
|
+
const intervalMs = Math.max(10_000, config.intervalMs);
|
|
21
|
+
this.timer = setInterval(() => {
|
|
22
|
+
void this.runAllUsers().catch(() => undefined);
|
|
23
|
+
}, intervalMs);
|
|
24
|
+
if (typeof this.timer.unref === "function")
|
|
25
|
+
this.timer.unref();
|
|
26
|
+
}
|
|
27
|
+
stop() {
|
|
28
|
+
if (this.timer) {
|
|
29
|
+
clearInterval(this.timer);
|
|
30
|
+
this.timer = null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
status() {
|
|
34
|
+
const config = this.runtime.config?.autoImprove;
|
|
35
|
+
return {
|
|
36
|
+
enabled: config?.enabled ?? false,
|
|
37
|
+
killSwitch: config?.killSwitch ?? false,
|
|
38
|
+
intervalMs: config?.intervalMs ?? 0,
|
|
39
|
+
runAfterEachConversation: config?.runAfterEachConversation ?? false,
|
|
40
|
+
lastCycleAt: this.lastCycleAt,
|
|
41
|
+
lastCycleDurationMs: this.lastCycleDurationMs,
|
|
42
|
+
lastCycleStatus: this.lastCycleStatus,
|
|
43
|
+
lastCycleReason: this.lastCycleReason,
|
|
44
|
+
lastCycleUserId: this.lastCycleUserId,
|
|
45
|
+
inFlightUserIds: Array.from(this.inFlight),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async runAllUsers() {
|
|
49
|
+
const config = this.runtime.config?.autoImprove;
|
|
50
|
+
if (!config?.enabled || config.killSwitch) {
|
|
51
|
+
this.recordSkipped(null, config?.killSwitch ? "kill_switch" : "disabled");
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const users = this.runtime.auth.listUsers();
|
|
55
|
+
for (const user of users) {
|
|
56
|
+
await this.runForUser(user.id).catch(() => undefined);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async runForUser(userId) {
|
|
60
|
+
const config = this.runtime.config?.autoImprove;
|
|
61
|
+
if (!config?.enabled || config.killSwitch) {
|
|
62
|
+
this.recordSkipped(userId, config?.killSwitch ? "kill_switch" : "disabled");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (this.inFlight.has(userId)) {
|
|
66
|
+
this.recordSkipped(userId, "concurrent");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.inFlight.add(userId);
|
|
70
|
+
const cycleId = randomUUID();
|
|
71
|
+
const startedAtMs = Date.now();
|
|
72
|
+
this.broadcast({ cycleId, userId, status: "started" });
|
|
73
|
+
try {
|
|
74
|
+
const result = await runReflectionTurn(this.runtime, userId);
|
|
75
|
+
this.recordSuccess(userId, Date.now() - startedAtMs);
|
|
76
|
+
this.broadcast({
|
|
77
|
+
cycleId,
|
|
78
|
+
userId,
|
|
79
|
+
status: "ok",
|
|
80
|
+
durationMs: Date.now() - startedAtMs,
|
|
81
|
+
toolCalls: result?.toolCallsCount ?? 0,
|
|
82
|
+
workspaceWrites: result?.workspaceWrites ?? 0,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const reason = error instanceof Error ? error.message : "unknown_error";
|
|
87
|
+
this.recordError(userId, Date.now() - startedAtMs, reason);
|
|
88
|
+
this.broadcast({
|
|
89
|
+
cycleId,
|
|
90
|
+
userId,
|
|
91
|
+
status: "error",
|
|
92
|
+
durationMs: Date.now() - startedAtMs,
|
|
93
|
+
reason,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
this.inFlight.delete(userId);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
recordSuccess(userId, durationMs) {
|
|
101
|
+
this.lastCycleAt = new Date().toISOString();
|
|
102
|
+
this.lastCycleDurationMs = durationMs;
|
|
103
|
+
this.lastCycleStatus = "ok";
|
|
104
|
+
this.lastCycleReason = null;
|
|
105
|
+
this.lastCycleUserId = userId;
|
|
106
|
+
}
|
|
107
|
+
recordError(userId, durationMs, reason) {
|
|
108
|
+
this.lastCycleAt = new Date().toISOString();
|
|
109
|
+
this.lastCycleDurationMs = durationMs;
|
|
110
|
+
this.lastCycleStatus = "error";
|
|
111
|
+
this.lastCycleReason = reason;
|
|
112
|
+
this.lastCycleUserId = userId;
|
|
113
|
+
}
|
|
114
|
+
recordSkipped(userId, reason) {
|
|
115
|
+
this.lastCycleAt = new Date().toISOString();
|
|
116
|
+
this.lastCycleDurationMs = 0;
|
|
117
|
+
this.lastCycleStatus = "skipped";
|
|
118
|
+
this.lastCycleReason = reason;
|
|
119
|
+
this.lastCycleUserId = userId;
|
|
120
|
+
}
|
|
121
|
+
broadcast(payload) {
|
|
122
|
+
this.runtime.broadcaster?.broadcast("auto-improve", payload);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=auto-improver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-improver.js","sourceRoot":"","sources":["../../src/agent/auto-improver.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,9 @@ export async function loadHomeContext(paths, options = {}) {
|
|
|
7
7
|
throw new Error("Natroc home path is not configured.");
|
|
8
8
|
}
|
|
9
9
|
const homeDir = resolve(paths.homeDir);
|
|
10
|
-
|
|
10
|
+
// Default ~16 KB (~4k tokens) so canonical files (BOOTSTRAP/AGENTS/USER/…)
|
|
11
|
+
// are injected in full; truncation only kicks in for unusually large files.
|
|
12
|
+
const maxFileCharacters = options.maxFileCharacters ?? 16000;
|
|
11
13
|
const homeFiles = await listHomeMarkdownFiles(homeDir);
|
|
12
14
|
const files = await Promise.all(homeFiles.map(async ({ absolutePath, name }) => {
|
|
13
15
|
assertInsideHome(homeDir, absolutePath);
|
|
@@ -73,26 +75,91 @@ export async function writeHomeFile(paths, fileName, content) {
|
|
|
73
75
|
modifiedAt: stats.mtime.toISOString(),
|
|
74
76
|
};
|
|
75
77
|
}
|
|
78
|
+
/** Canonical workspace files that get dedicated sections in the system prompt. */
|
|
79
|
+
const CANONICAL_FILES = {
|
|
80
|
+
bootstrap: "BOOTSTRAP.md",
|
|
81
|
+
agents: "AGENTS.md",
|
|
82
|
+
identity: "IDENTITY.md",
|
|
83
|
+
soul: "SOUL.md",
|
|
84
|
+
user: "USER.md",
|
|
85
|
+
memory: "MEMORY.md",
|
|
86
|
+
};
|
|
87
|
+
function bucketWorkspaceFiles(files) {
|
|
88
|
+
const bucket = { other: [] };
|
|
89
|
+
for (const file of files) {
|
|
90
|
+
const upper = file.name.toUpperCase();
|
|
91
|
+
if (upper === CANONICAL_FILES.bootstrap.toUpperCase())
|
|
92
|
+
bucket.bootstrap = file;
|
|
93
|
+
else if (upper === CANONICAL_FILES.agents.toUpperCase())
|
|
94
|
+
bucket.agents = file;
|
|
95
|
+
else if (upper === CANONICAL_FILES.identity.toUpperCase())
|
|
96
|
+
bucket.identity = file;
|
|
97
|
+
else if (upper === CANONICAL_FILES.soul.toUpperCase())
|
|
98
|
+
bucket.soul = file;
|
|
99
|
+
else if (upper === CANONICAL_FILES.user.toUpperCase())
|
|
100
|
+
bucket.user = file;
|
|
101
|
+
else if (upper === CANONICAL_FILES.memory.toUpperCase())
|
|
102
|
+
bucket.memory = file;
|
|
103
|
+
else
|
|
104
|
+
bucket.other.push(file);
|
|
105
|
+
}
|
|
106
|
+
return bucket;
|
|
107
|
+
}
|
|
76
108
|
export function buildAgentSystemPrompt(context, memories = [], conversationThreads = [], options = {}) {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
|
|
109
|
+
const bucket = bucketWorkspaceFiles(context.files);
|
|
110
|
+
const sections = [];
|
|
111
|
+
sections.push([
|
|
112
|
+
"## Your Identity & Purpose",
|
|
113
|
+
"You are this user's **personal AI assistant**, running locally on their machine via Natroc — a private, always-on agent runtime they own and operate.",
|
|
114
|
+
"You are NOT a generic chatbot. You serve this specific user across sessions: drafting, planning, code, decisions, lookups, and operating on their local workspace.",
|
|
115
|
+
"You remember them through stored memory and the workspace files below; you continue threads across days.",
|
|
116
|
+
"Be honest, direct, concise. Do not claim to have changed memory, files, services, commits, processes, or external state unless the runtime actually performed the change.",
|
|
117
|
+
].join("\n"));
|
|
83
118
|
if (options.workspacePath || context.files.length > 0) {
|
|
84
119
|
const workspaceLines = ["## Workspace"];
|
|
85
120
|
if (options.workspacePath) {
|
|
86
|
-
workspaceLines.push(`Your personal workspace lives at:
|
|
121
|
+
workspaceLines.push(`Your personal workspace lives at: \`${options.workspacePath}\``);
|
|
87
122
|
}
|
|
88
123
|
if (context.files.length > 0) {
|
|
89
|
-
workspaceLines.push("Files currently present (
|
|
124
|
+
workspaceLines.push("Files currently present (each is part of your operating context):", ...context.files.map((file) => `- ${file.name}`));
|
|
90
125
|
}
|
|
91
|
-
workspaceLines.push("Use the `list_directory`, `read_file`, and `write_file` tools to inspect or modify any file in this workspace.", "
|
|
126
|
+
workspaceLines.push("Use the `list_directory`, `read_file`, and `write_file` tools to inspect or modify any file in this workspace.", "If a file's instructions imply it is one-time (for example anything saying \"remove me after applying\"), follow it and delete the file when done.");
|
|
92
127
|
sections.push(workspaceLines.join("\n"));
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
128
|
+
}
|
|
129
|
+
if (bucket.bootstrap) {
|
|
130
|
+
sections.push([
|
|
131
|
+
"## ⚠ ACTIVE BOOTSTRAP — DO THIS FIRST",
|
|
132
|
+
"Your workspace is **not fully initialized**. `BOOTSTRAP.md` exists and is your one-time initialization script.",
|
|
133
|
+
"**Before doing any other task, walk through `BOOTSTRAP.md` step by step.** Ask the user only for the minimum information you need to fill the workspace files it lists. When every step is complete, delete `BOOTSTRAP.md` (it explicitly tells you to).",
|
|
134
|
+
"",
|
|
135
|
+
"### BOOTSTRAP.md",
|
|
136
|
+
bucket.bootstrap.content,
|
|
137
|
+
].join("\n"));
|
|
138
|
+
}
|
|
139
|
+
if (bucket.agents) {
|
|
140
|
+
sections.push([
|
|
141
|
+
"## Operating Rules",
|
|
142
|
+
"The following is your authoritative operating policy for this workspace. It outranks personality, memory, and conversation history (but never user intent or safety).",
|
|
143
|
+
"",
|
|
144
|
+
"### AGENTS.md",
|
|
145
|
+
bucket.agents.content,
|
|
146
|
+
].join("\n"));
|
|
147
|
+
}
|
|
148
|
+
if (bucket.identity) {
|
|
149
|
+
sections.push(["## Agent Identity", "", bucket.identity.content].join("\n"));
|
|
150
|
+
}
|
|
151
|
+
if (bucket.soul) {
|
|
152
|
+
sections.push(["## Personality & Tone", "", bucket.soul.content].join("\n"));
|
|
153
|
+
}
|
|
154
|
+
if (bucket.user) {
|
|
155
|
+
sections.push(["## User Profile", "", bucket.user.content].join("\n"));
|
|
156
|
+
}
|
|
157
|
+
if (bucket.memory) {
|
|
158
|
+
sections.push(["## Long-term Memory", "", bucket.memory.content].join("\n"));
|
|
159
|
+
}
|
|
160
|
+
if (bucket.other.length > 0) {
|
|
161
|
+
sections.push("## Other Workspace Files");
|
|
162
|
+
for (const file of bucket.other) {
|
|
96
163
|
sections.push(`### ${file.name}`, file.content);
|
|
97
164
|
}
|
|
98
165
|
}
|
|
@@ -103,7 +170,7 @@ export function buildAgentSystemPrompt(context, memories = [], conversationThrea
|
|
|
103
170
|
}
|
|
104
171
|
}
|
|
105
172
|
if (conversationThreads.length > 0) {
|
|
106
|
-
sections.push("## Prior Conversation Threads", "
|
|
173
|
+
sections.push("## Prior Conversation Threads", "Bounded snippets from prior Natroc conversations across sessions. Use them as recall, but treat Approved Agent Memory and the current user message as higher priority on conflict.");
|
|
107
174
|
for (const thread of conversationThreads) {
|
|
108
175
|
sections.push(formatConversationThread(thread));
|
|
109
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home-context.js","sourceRoot":"","sources":["../../src/agent/home-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAEvE,OAAO,EACL,mBAAmB,EAEpB,MAAM,0BAA0B,CAAA;AAOjC,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAA;AA4B9D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA8B,EAC9B,UAA0C,EAAE;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,
|
|
1
|
+
{"version":3,"file":"home-context.js","sourceRoot":"","sources":["../../src/agent/home-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare function buildHeuristicImprovementProposals(input: {
|
|
|
8
8
|
assistantMessage: string;
|
|
9
9
|
conversationId?: string | null;
|
|
10
10
|
}): ImprovementDraft[];
|
|
11
|
+
export declare function buildReflectionPrompt(): string;
|
|
11
12
|
export declare function generateImprovementProposals(input: {
|
|
12
13
|
adapter: ProviderAdapter;
|
|
13
14
|
model?: string;
|
|
@@ -24,6 +24,24 @@ export function buildHeuristicImprovementProposals(input) {
|
|
|
24
24
|
}
|
|
25
25
|
];
|
|
26
26
|
}
|
|
27
|
+
export function buildReflectionPrompt() {
|
|
28
|
+
return [
|
|
29
|
+
"You are running your scheduled self-improvement cycle. This is YOUR cycle — no user is waiting on you.",
|
|
30
|
+
"",
|
|
31
|
+
"Inspect, in order:",
|
|
32
|
+
"1. Recent conversations and tool calls since your previous cycle.",
|
|
33
|
+
"2. Your workspace files (AGENTS.md, USER.md, MEMORY.md, IDENTITY.md, SOUL.md, and anything else in the workspace).",
|
|
34
|
+
"3. Optionally, files elsewhere on the host filesystem if relevant context lives there.",
|
|
35
|
+
"",
|
|
36
|
+
"Decide what is worth keeping:",
|
|
37
|
+
"- Distill durable insights about this user, their tools, and their projects.",
|
|
38
|
+
"- Update workspace files via `write_file` to reflect what you learned. Writes are sandboxed to your workspace; writes outside will fail.",
|
|
39
|
+
"- Append a one-line summary of every change to `CHANGELOG.md` (create it if missing).",
|
|
40
|
+
"- If there is nothing meaningful to add this cycle, simply reply \"no changes this cycle\".",
|
|
41
|
+
"",
|
|
42
|
+
"You have full read access to the filesystem. ALL persisted state of your improvements must stay inside your workspace.",
|
|
43
|
+
].join("\n");
|
|
44
|
+
}
|
|
27
45
|
export async function generateImprovementProposals(input) {
|
|
28
46
|
const transcript = input.messages
|
|
29
47
|
.map((message) => `${message.role.toUpperCase()}: ${message.content}`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"improvement-engine.js","sourceRoot":"","sources":["../../src/agent/improvement-engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"improvement-engine.js","sourceRoot":"","sources":["../../src/agent/improvement-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,12 @@ export type ToolMode = "auto" | "readonly";
|
|
|
3
3
|
export type ToolContext = {
|
|
4
4
|
/** Default working directory used to resolve relative paths. */
|
|
5
5
|
cwd: string;
|
|
6
|
+
/**
|
|
7
|
+
* Optional sandbox for write-class tools. When set, writes outside this
|
|
8
|
+
* absolute directory are rejected. Self-improvement cycles use this to
|
|
9
|
+
* keep persisted state inside `~/.natroc/home/`.
|
|
10
|
+
*/
|
|
11
|
+
writeSandbox?: string;
|
|
6
12
|
};
|
|
7
13
|
export type ToolResult = {
|
|
8
14
|
ok: boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname } from "node:path";
|
|
2
|
+
import { dirname, relative, resolve } from "node:path";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { resolveUserPath } from "./util.js";
|
|
5
5
|
const schema = z.object({
|
|
@@ -14,6 +14,16 @@ export const writeFileTool = {
|
|
|
14
14
|
execute: async (args, context) => {
|
|
15
15
|
const { path, content } = schema.parse(args);
|
|
16
16
|
const target = resolveUserPath(path, context.cwd);
|
|
17
|
+
if (context.writeSandbox) {
|
|
18
|
+
const sandbox = resolve(context.writeSandbox);
|
|
19
|
+
const rel = relative(sandbox, target);
|
|
20
|
+
if (rel.startsWith("..") || rel === "" || /^([a-zA-Z]:)?[\\/]/.test(rel)) {
|
|
21
|
+
return {
|
|
22
|
+
ok: false,
|
|
23
|
+
output: `Write rejected: ${target} is outside the sandbox ${sandbox}.`,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
17
27
|
await mkdir(dirname(target), { recursive: true });
|
|
18
28
|
await writeFile(target, content, "utf8");
|
|
19
29
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../../src/agent/tools/write-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../../src/agent/tools/write-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,2HAA2H;IAC7H,UAAU,EAAE,uCAAuC;IACnD,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC/B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QAEjD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YACrC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzE,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,mBAAmB,MAAM,2BAA2B,OAAO,GAAG;iBACvE,CAAA;YACH,CAAC;QACH,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAExC,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,SAAS,OAAO,CAAC,MAAM,kBAAkB,MAAM,GAAG;SAC3D,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -25,6 +25,12 @@ export type NatrocConfig = {
|
|
|
25
25
|
sendReadReceipts: boolean;
|
|
26
26
|
};
|
|
27
27
|
};
|
|
28
|
+
autoImprove: {
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
intervalMs: number;
|
|
31
|
+
runAfterEachConversation: boolean;
|
|
32
|
+
killSwitch: boolean;
|
|
33
|
+
};
|
|
28
34
|
};
|
|
29
35
|
export declare const DEFAULT_NATROC_CONFIG: NatrocConfig;
|
|
30
36
|
export declare function getConfigPath(paths: NatrocPaths): string;
|
|
@@ -24,6 +24,12 @@ export const DEFAULT_NATROC_CONFIG = {
|
|
|
24
24
|
sendReadReceipts: false,
|
|
25
25
|
},
|
|
26
26
|
},
|
|
27
|
+
autoImprove: {
|
|
28
|
+
enabled: false,
|
|
29
|
+
intervalMs: 30 * 60 * 1000,
|
|
30
|
+
runAfterEachConversation: true,
|
|
31
|
+
killSwitch: false,
|
|
32
|
+
},
|
|
27
33
|
};
|
|
28
34
|
export function getConfigPath(paths) {
|
|
29
35
|
return join(paths.root, "natroc.json");
|
|
@@ -87,6 +93,22 @@ function mergeWithDefaults(input) {
|
|
|
87
93
|
applyTelegramDefaults(config.channels.telegramDefaults, root.channels.telegramDefaults);
|
|
88
94
|
applyWhatsappDefaults(config.channels.whatsappDefaults, root.channels.whatsappDefaults);
|
|
89
95
|
}
|
|
96
|
+
if (isRecord(root.autoImprove)) {
|
|
97
|
+
if (typeof root.autoImprove.enabled === "boolean") {
|
|
98
|
+
config.autoImprove.enabled = root.autoImprove.enabled;
|
|
99
|
+
}
|
|
100
|
+
if (typeof root.autoImprove.intervalMs === "number" &&
|
|
101
|
+
root.autoImprove.intervalMs >= 10_000) {
|
|
102
|
+
config.autoImprove.intervalMs = Math.floor(root.autoImprove.intervalMs);
|
|
103
|
+
}
|
|
104
|
+
if (typeof root.autoImprove.runAfterEachConversation === "boolean") {
|
|
105
|
+
config.autoImprove.runAfterEachConversation =
|
|
106
|
+
root.autoImprove.runAfterEachConversation;
|
|
107
|
+
}
|
|
108
|
+
if (typeof root.autoImprove.killSwitch === "boolean") {
|
|
109
|
+
config.autoImprove.killSwitch = root.autoImprove.killSwitch;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
90
112
|
return config;
|
|
91
113
|
}
|
|
92
114
|
function applyTelegramDefaults(target, source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"natroc-config.js","sourceRoot":"","sources":["../../src/config/natroc-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"natroc-config.js","sourceRoot":"","sources":["../../src/config/natroc-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AgentLoopEvent } from "../agent/agent-loop.js";
|
|
2
|
-
import
|
|
2
|
+
import { chatSchema } from "../routes/schemas.js";
|
|
3
3
|
import type { RuntimeState } from "../runtime.js";
|
|
4
4
|
type AgentChatInput = ReturnType<typeof chatSchema.parse>;
|
|
5
5
|
/**
|
|
@@ -12,5 +12,19 @@ export declare function runAgentTurn(runtime: RuntimeState, input: AgentChatInpu
|
|
|
12
12
|
userId: string;
|
|
13
13
|
agentId?: string | null;
|
|
14
14
|
channel?: string;
|
|
15
|
+
writeSandbox?: string;
|
|
15
16
|
}): AsyncGenerator<AgentLoopEvent, unknown>;
|
|
17
|
+
export type ReflectionTurnResult = {
|
|
18
|
+
conversationId: string;
|
|
19
|
+
toolCallsCount: number;
|
|
20
|
+
workspaceWrites: number;
|
|
21
|
+
content: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Drive one autonomous self-reflection turn for the given user. Reuses the
|
|
25
|
+
* persistent "self-reflection" channel conversation so the agent retains
|
|
26
|
+
* its own thought history across cycles. Writes are sandboxed to the
|
|
27
|
+
* Natroc home dir.
|
|
28
|
+
*/
|
|
29
|
+
export declare function runReflectionTurn(runtime: RuntimeState, userId: string): Promise<ReflectionTurnResult>;
|
|
16
30
|
export {};
|