natroc 0.0.4 → 0.0.6
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/README.md +343 -0
- package/package.json +1 -1
- package/server/dist/agent/home-context.d.ts +11 -1
- package/server/dist/agent/home-context.js +48 -5
- package/server/dist/agent/home-context.js.map +1 -1
- package/server/dist/app.js +7 -11
- package/server/dist/app.js.map +1 -1
- package/server/dist/channels/channel-runtime.d.ts +3 -4
- package/server/dist/channels/channel-runtime.js +5 -15
- package/server/dist/channels/channel-runtime.js.map +1 -1
- package/server/dist/cli/agent-deliver.d.ts +0 -2
- package/server/dist/cli/agent-deliver.js +1 -14
- package/server/dist/cli/agent-deliver.js.map +1 -1
- package/server/dist/cli/cli-token.js +0 -5
- package/server/dist/cli/cli-token.js.map +1 -1
- package/server/dist/cli/daemon.d.ts +2 -16
- package/server/dist/cli/daemon.js +5 -37
- package/server/dist/cli/daemon.js.map +1 -1
- package/server/dist/cli/setup.d.ts +0 -1
- package/server/dist/cli/setup.js +2 -20
- package/server/dist/cli/setup.js.map +1 -1
- package/server/dist/config/natroc-config.d.ts +35 -0
- package/server/dist/config/natroc-config.js +138 -0
- package/server/dist/config/natroc-config.js.map +1 -0
- package/server/dist/gateway/agent-service.d.ts +4 -4
- package/server/dist/gateway/agent-service.js +29 -9
- package/server/dist/gateway/agent-service.js.map +1 -1
- package/server/dist/gateway/connection.d.ts +6 -15
- package/server/dist/gateway/connection.js +12 -23
- package/server/dist/gateway/connection.js.map +1 -1
- package/server/dist/gateway/gateway.d.ts +2 -31
- package/server/dist/gateway/gateway.js +8 -35
- package/server/dist/gateway/gateway.js.map +1 -1
- package/server/dist/gateway/index.d.ts +0 -1
- package/server/dist/gateway/index.js +2 -1
- package/server/dist/gateway/index.js.map +1 -1
- package/server/dist/gateway/protocol.d.ts +12 -22
- package/server/dist/gateway/protocol.js +1 -4
- package/server/dist/gateway/protocol.js.map +1 -1
- package/server/dist/gateway/rpc/agent.d.ts +0 -1
- package/server/dist/gateway/rpc/agent.js +0 -1
- package/server/dist/gateway/rpc/agent.js.map +1 -1
- package/server/dist/gateway/rpc/auth.d.ts +0 -1
- package/server/dist/gateway/rpc/auth.js +4 -1
- package/server/dist/gateway/rpc/auth.js.map +1 -1
- package/server/dist/gateway/rpc/channels.js +0 -1
- package/server/dist/gateway/rpc/channels.js.map +1 -1
- package/server/dist/gateway/rpc/conversations.d.ts +0 -1
- package/server/dist/gateway/rpc/conversations.js +0 -1
- package/server/dist/gateway/rpc/conversations.js.map +1 -1
- package/server/dist/gateway/rpc/home.d.ts +2 -0
- package/server/dist/gateway/rpc/home.js +45 -0
- package/server/dist/gateway/rpc/home.js.map +1 -0
- package/server/dist/gateway/rpc/projects.d.ts +0 -1
- package/server/dist/gateway/rpc/projects.js +0 -1
- package/server/dist/gateway/rpc/projects.js.map +1 -1
- package/server/dist/gateway/rpc/providers.d.ts +0 -1
- package/server/dist/gateway/rpc/providers.js +0 -1
- package/server/dist/gateway/rpc/providers.js.map +1 -1
- package/server/dist/gateway/types.d.ts +1 -19
- package/server/dist/gateway/types.js +1 -5
- package/server/dist/gateway/types.js.map +1 -1
- package/server/dist/gateway/ws-server.d.ts +0 -6
- package/server/dist/gateway/ws-server.js +2 -6
- package/server/dist/gateway/ws-server.js.map +1 -1
- package/server/dist/local-runtime.d.ts +2 -0
- package/server/dist/local-runtime.js +5 -1
- package/server/dist/local-runtime.js.map +1 -1
- package/server/dist/runtime.d.ts +6 -4
- package/server/dist/runtime.js +2 -1
- package/server/dist/runtime.js.map +1 -1
- package/server/dist/server.js +6 -3
- package/server/dist/server.js.map +1 -1
- package/server/dist/storage/auth-repository.d.ts +1 -5
- package/server/dist/storage/auth-repository.js +1 -5
- package/server/dist/storage/auth-repository.js.map +1 -1
- package/server/dist/storage/channel-repository.d.ts +4 -4
- package/server/dist/storage/channel-repository.js +2 -2
- package/server/dist/storage/conversation-repository.d.ts +13 -0
- package/server/dist/storage/conversation-repository.js +83 -17
- package/server/dist/storage/conversation-repository.js.map +1 -1
- package/server/dist/storage/database.d.ts +1 -5
- package/server/dist/storage/database.js +4 -5
- package/server/dist/storage/database.js.map +1 -1
- package/server/dist/storage/tool-call-repository.d.ts +2 -0
- package/server/dist/storage/tool-call-repository.js +9 -6
- package/server/dist/storage/tool-call-repository.js.map +1 -1
- package/ui/dist/assets/{index-DKaFmZNO.js → index-BiU8FgKo.js} +3 -3
- package/ui/dist/assets/index-Dosh6wwG.css +2 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-DOfPcjx3.css +0 -2
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export const DEFAULT_NATROC_CONFIG = {
|
|
4
|
+
server: {
|
|
5
|
+
host: "127.0.0.1",
|
|
6
|
+
port: 37789,
|
|
7
|
+
},
|
|
8
|
+
gateway: {
|
|
9
|
+
tickIntervalMs: 30 * 60 * 1000,
|
|
10
|
+
},
|
|
11
|
+
channels: {
|
|
12
|
+
telegramDefaults: {
|
|
13
|
+
dmPolicy: "allowlist",
|
|
14
|
+
groupPolicy: "disabled",
|
|
15
|
+
requireMention: true,
|
|
16
|
+
textChunkLimit: 4000,
|
|
17
|
+
},
|
|
18
|
+
whatsappDefaults: {
|
|
19
|
+
dmPolicy: "allowlist",
|
|
20
|
+
groupPolicy: "disabled",
|
|
21
|
+
requireMention: true,
|
|
22
|
+
textChunkLimit: 4000,
|
|
23
|
+
mediaMaxMb: 50,
|
|
24
|
+
sendReadReceipts: false,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export function getConfigPath(paths) {
|
|
29
|
+
return join(paths.root, "natroc.json");
|
|
30
|
+
}
|
|
31
|
+
/** Load and merge with defaults. Missing or invalid file returns defaults. */
|
|
32
|
+
export async function loadNatrocConfig(paths) {
|
|
33
|
+
const filePath = getConfigPath(paths);
|
|
34
|
+
let raw;
|
|
35
|
+
try {
|
|
36
|
+
raw = await readFile(filePath, "utf8");
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return cloneDefaults();
|
|
40
|
+
}
|
|
41
|
+
let parsed;
|
|
42
|
+
try {
|
|
43
|
+
parsed = JSON.parse(raw);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return cloneDefaults();
|
|
47
|
+
}
|
|
48
|
+
return mergeWithDefaults(parsed);
|
|
49
|
+
}
|
|
50
|
+
/** Write defaults if the file does not exist yet. */
|
|
51
|
+
export async function ensureNatrocConfig(paths) {
|
|
52
|
+
const filePath = getConfigPath(paths);
|
|
53
|
+
try {
|
|
54
|
+
await readFile(filePath, "utf8");
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
await writeFile(filePath, `${JSON.stringify(DEFAULT_NATROC_CONFIG, null, 2)}\n`, "utf8");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export async function writeNatrocConfig(paths, config) {
|
|
62
|
+
await writeFile(getConfigPath(paths), `${JSON.stringify(config, null, 2)}\n`, "utf8");
|
|
63
|
+
}
|
|
64
|
+
function cloneDefaults() {
|
|
65
|
+
return JSON.parse(JSON.stringify(DEFAULT_NATROC_CONFIG));
|
|
66
|
+
}
|
|
67
|
+
function mergeWithDefaults(input) {
|
|
68
|
+
const config = cloneDefaults();
|
|
69
|
+
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
70
|
+
return config;
|
|
71
|
+
const root = input;
|
|
72
|
+
if (isRecord(root.server)) {
|
|
73
|
+
if (typeof root.server.host === "string") {
|
|
74
|
+
config.server.host = root.server.host;
|
|
75
|
+
}
|
|
76
|
+
if (typeof root.server.port === "number" && root.server.port > 0) {
|
|
77
|
+
config.server.port = Math.floor(root.server.port);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (isRecord(root.gateway)) {
|
|
81
|
+
if (typeof root.gateway.tickIntervalMs === "number" &&
|
|
82
|
+
root.gateway.tickIntervalMs > 0) {
|
|
83
|
+
config.gateway.tickIntervalMs = Math.floor(root.gateway.tickIntervalMs);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (isRecord(root.channels)) {
|
|
87
|
+
applyTelegramDefaults(config.channels.telegramDefaults, root.channels.telegramDefaults);
|
|
88
|
+
applyWhatsappDefaults(config.channels.whatsappDefaults, root.channels.whatsappDefaults);
|
|
89
|
+
}
|
|
90
|
+
return config;
|
|
91
|
+
}
|
|
92
|
+
function applyTelegramDefaults(target, source) {
|
|
93
|
+
if (!isRecord(source))
|
|
94
|
+
return;
|
|
95
|
+
if (isDmPolicy(source.dmPolicy))
|
|
96
|
+
target.dmPolicy = source.dmPolicy;
|
|
97
|
+
if (isGroupPolicy(source.groupPolicy))
|
|
98
|
+
target.groupPolicy = source.groupPolicy;
|
|
99
|
+
if (typeof source.requireMention === "boolean") {
|
|
100
|
+
target.requireMention = source.requireMention;
|
|
101
|
+
}
|
|
102
|
+
if (typeof source.textChunkLimit === "number" && source.textChunkLimit > 0) {
|
|
103
|
+
target.textChunkLimit = Math.floor(source.textChunkLimit);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function applyWhatsappDefaults(target, source) {
|
|
107
|
+
if (!isRecord(source))
|
|
108
|
+
return;
|
|
109
|
+
if (isDmPolicy(source.dmPolicy))
|
|
110
|
+
target.dmPolicy = source.dmPolicy;
|
|
111
|
+
if (isGroupPolicy(source.groupPolicy))
|
|
112
|
+
target.groupPolicy = source.groupPolicy;
|
|
113
|
+
if (typeof source.requireMention === "boolean") {
|
|
114
|
+
target.requireMention = source.requireMention;
|
|
115
|
+
}
|
|
116
|
+
if (typeof source.textChunkLimit === "number" && source.textChunkLimit > 0) {
|
|
117
|
+
target.textChunkLimit = Math.floor(source.textChunkLimit);
|
|
118
|
+
}
|
|
119
|
+
if (typeof source.mediaMaxMb === "number" && source.mediaMaxMb > 0) {
|
|
120
|
+
target.mediaMaxMb = source.mediaMaxMb;
|
|
121
|
+
}
|
|
122
|
+
if (typeof source.sendReadReceipts === "boolean") {
|
|
123
|
+
target.sendReadReceipts = source.sendReadReceipts;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function isRecord(value) {
|
|
127
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
128
|
+
}
|
|
129
|
+
function isDmPolicy(value) {
|
|
130
|
+
return (value === "pairing" ||
|
|
131
|
+
value === "allowlist" ||
|
|
132
|
+
value === "open" ||
|
|
133
|
+
value === "disabled");
|
|
134
|
+
}
|
|
135
|
+
function isGroupPolicy(value) {
|
|
136
|
+
return value === "allowlist" || value === "open" || value === "disabled";
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=natroc-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"natroc-config.js","sourceRoot":"","sources":["../../src/config/natroc-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@ import type { chatSchema } from "../routes/schemas.js";
|
|
|
3
3
|
import type { RuntimeState } from "../runtime.js";
|
|
4
4
|
type AgentChatInput = ReturnType<typeof chatSchema.parse>;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Run one channel-agnostic agent turn: assemble the active provider, system
|
|
7
|
+
* prompt (with shared memory injection), and conversation history, then drive
|
|
8
|
+
* the agent loop. Intermediate events are yielded; the generator returns the
|
|
9
|
+
* persisted result.
|
|
10
10
|
*/
|
|
11
11
|
export declare function runAgentTurn(runtime: RuntimeState, input: AgentChatInput, options: {
|
|
12
12
|
userId: string;
|
|
@@ -5,10 +5,10 @@ import { getAgentCwd, getToolMode } from "../agent/tools/index.js";
|
|
|
5
5
|
import { resolveConfiguredAdapter } from "../providers/configured-adapters.js";
|
|
6
6
|
import { GatewayRpcError } from "./types.js";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Run one channel-agnostic agent turn: assemble the active provider, system
|
|
9
|
+
* prompt (with shared memory injection), and conversation history, then drive
|
|
10
|
+
* the agent loop. Intermediate events are yielded; the generator returns the
|
|
11
|
+
* persisted result.
|
|
12
12
|
*/
|
|
13
13
|
export async function* runAgentTurn(runtime, input, options) {
|
|
14
14
|
const selectedAgent = input.agentId
|
|
@@ -40,7 +40,7 @@ export async function* runAgentTurn(runtime, input, options) {
|
|
|
40
40
|
maxMessageCharacters: 700,
|
|
41
41
|
maxMessagesPerConversation: 6,
|
|
42
42
|
});
|
|
43
|
-
const sharedSystemPrompt = buildAgentSystemPrompt(homeContext, memories, conversationThreads);
|
|
43
|
+
const sharedSystemPrompt = buildAgentSystemPrompt(homeContext, memories, conversationThreads, { workspacePath: runtime.paths?.homeDir });
|
|
44
44
|
const baseSystemPrompt = selectedAgent?.systemPrompt
|
|
45
45
|
? `${sharedSystemPrompt}\n\nAgent-specific instructions:\n${selectedAgent.systemPrompt}`
|
|
46
46
|
: sharedSystemPrompt;
|
|
@@ -53,6 +53,9 @@ export async function* runAgentTurn(runtime, input, options) {
|
|
|
53
53
|
let finalModel = selectedModel ?? "";
|
|
54
54
|
let toolCalls = [];
|
|
55
55
|
let usage = [];
|
|
56
|
+
let reasoningText = "";
|
|
57
|
+
let thinkingStartedAtMs = null;
|
|
58
|
+
let thinkingDurationMs = null;
|
|
56
59
|
for await (const event of runAgentLoop({
|
|
57
60
|
adapter,
|
|
58
61
|
provider: providerName,
|
|
@@ -62,18 +65,31 @@ export async function* runAgentTurn(runtime, input, options) {
|
|
|
62
65
|
model: selectedModel,
|
|
63
66
|
thinking: input.thinking,
|
|
64
67
|
mode: getToolMode(),
|
|
65
|
-
context: { cwd: getAgentCwd() },
|
|
68
|
+
context: { cwd: runtime.paths?.homeDir ?? getAgentCwd() },
|
|
66
69
|
})) {
|
|
67
70
|
if (event.type === "done") {
|
|
68
71
|
finalContent = event.content;
|
|
69
72
|
finalModel = event.model || finalModel;
|
|
70
73
|
toolCalls = event.toolCalls;
|
|
71
74
|
usage = event.usage;
|
|
75
|
+
if (thinkingStartedAtMs !== null && thinkingDurationMs === null) {
|
|
76
|
+
thinkingDurationMs = Date.now() - thinkingStartedAtMs;
|
|
77
|
+
}
|
|
72
78
|
break;
|
|
73
79
|
}
|
|
74
80
|
if (event.type === "error") {
|
|
75
81
|
throw new GatewayRpcError(event.error, "agent_error");
|
|
76
82
|
}
|
|
83
|
+
if (event.type === "reasoning") {
|
|
84
|
+
if (thinkingStartedAtMs === null)
|
|
85
|
+
thinkingStartedAtMs = Date.now();
|
|
86
|
+
reasoningText += event.delta;
|
|
87
|
+
}
|
|
88
|
+
else if (event.type === "text" &&
|
|
89
|
+
thinkingStartedAtMs !== null &&
|
|
90
|
+
thinkingDurationMs === null) {
|
|
91
|
+
thinkingDurationMs = Date.now() - thinkingStartedAtMs;
|
|
92
|
+
}
|
|
77
93
|
yield event;
|
|
78
94
|
}
|
|
79
95
|
const existingConversation = input.conversationId
|
|
@@ -97,6 +113,8 @@ export async function* runAgentTurn(runtime, input, options) {
|
|
|
97
113
|
toolCalls,
|
|
98
114
|
usage,
|
|
99
115
|
generatedTitle,
|
|
116
|
+
reasoningText: reasoningText.length > 0 ? reasoningText : null,
|
|
117
|
+
thinkingDurationMs,
|
|
100
118
|
});
|
|
101
119
|
}
|
|
102
120
|
function persistAgentChat(input) {
|
|
@@ -127,6 +145,8 @@ function persistAgentChat(input) {
|
|
|
127
145
|
conversationId: conversation.id,
|
|
128
146
|
role: "assistant",
|
|
129
147
|
content: input.content,
|
|
148
|
+
reasoningText: input.reasoningText,
|
|
149
|
+
thinkingDurationMs: input.thinkingDurationMs,
|
|
130
150
|
provider: input.provider,
|
|
131
151
|
model: input.model || null,
|
|
132
152
|
});
|
|
@@ -135,6 +155,7 @@ function persistAgentChat(input) {
|
|
|
135
155
|
id: call.id,
|
|
136
156
|
userId: input.userId,
|
|
137
157
|
conversationId: conversation.id,
|
|
158
|
+
messageId: assistantMessage.id,
|
|
138
159
|
toolName: call.name,
|
|
139
160
|
args: call.args,
|
|
140
161
|
output: call.output,
|
|
@@ -216,9 +237,8 @@ function deriveTitle(message) {
|
|
|
216
237
|
return firstLine ? firstLine.slice(0, 60) : "New conversation";
|
|
217
238
|
}
|
|
218
239
|
/**
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
* `deriveTitle` (kalimat pertama user).
|
|
240
|
+
* Ask the model for a short 3–6 word title for a new conversation. On
|
|
241
|
+
* failure the caller falls back to `deriveTitle`.
|
|
222
242
|
*/
|
|
223
243
|
async function generateConversationTitle(adapter, userMessage, assistantContent, model) {
|
|
224
244
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../src/gateway/agent-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAA;AACnF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AAQ9E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CACjC,OAAqB,EACrB,KAAqB,EACrB,OAAsE;IAEtE,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO;QACjC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACnE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAEzD,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAA;IAC5D,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC;QACzD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IACF,MAAM,YAAY,GAChB,aAAa,EAAE,eAAe,IAAI,cAAc,EAAE,QAAQ,IAAI,IAAI,CAAA;IACpE,MAAM,aAAa,GACjB,KAAK,CAAC,KAAK,IAAI,aAAa,EAAE,YAAY,IAAI,cAAc,EAAE,YAAY,IAAI,SAAS,CAAA;IAEzF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,eAAe,CACvB,yDAAyD,EACzD,oBAAoB,CACrB,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,YAAY,EAAE;QACrD,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC5C,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAA;IACF,MAAM,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC;QACxE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,qBAAqB,EAAE,KAAK,CAAC,cAAc;QAC3C,oBAAoB,EAAE,GAAG;QACzB,0BAA0B,EAAE,CAAC;KAC9B,CAAC,CAAA;IACF,MAAM,kBAAkB,GAAG,sBAAsB,CAC/C,WAAW,EACX,QAAQ,EACR,mBAAmB,
|
|
1
|
+
{"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../src/gateway/agent-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { type Gateway } from "./gateway.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Frame pertama WAJIB `connect`. Sebelum handshake selesai, frame lain
|
|
8
|
-
* dijawab dengan `not_handshaked`.
|
|
3
|
+
* One live WebSocket connection. The first frame must be `connect`; any
|
|
4
|
+
* other frame received before the handshake completes is replied to with
|
|
5
|
+
* `not_handshaked`.
|
|
9
6
|
*/
|
|
10
7
|
export declare class GatewayConnection {
|
|
11
8
|
private readonly gateway;
|
|
@@ -16,21 +13,15 @@ export declare class GatewayConnection {
|
|
|
16
13
|
private closed;
|
|
17
14
|
private handshakeComplete;
|
|
18
15
|
constructor(gateway: Gateway, sendRaw: (data: string) => void);
|
|
19
|
-
/** Memproses satu teks frame mentah dari socket. */
|
|
20
16
|
handleRawMessage(raw: string): void;
|
|
21
|
-
/** Membersihkan saat socket tertutup: batalkan semua stream berjalan. */
|
|
22
17
|
handleClose(): void;
|
|
23
|
-
/**
|
|
24
|
-
* Mengirim event broadcast (tanpa `id`) ke socket ini. Dipanggil oleh
|
|
25
|
-
* {@link Gateway.broadcast} dengan `seq` monotonik per topic.
|
|
26
|
-
*/
|
|
27
18
|
sendBroadcast(event: string, payload: unknown, seq: number): void;
|
|
28
19
|
private send;
|
|
29
20
|
private handleConnect;
|
|
30
21
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
22
|
+
* Apply an inbound token to the context. An invalid token does not fail
|
|
23
|
+
* the handshake — the reply just carries `auth.ok: false` so the client
|
|
24
|
+
* can clear stale credentials and prompt the user to log in again.
|
|
34
25
|
*/
|
|
35
26
|
private applyConnectAuth;
|
|
36
27
|
private dispatch;
|
|
@@ -3,12 +3,9 @@ import { GATEWAY_EVENTS, GATEWAY_POLICY, GATEWAY_SERVER_VERSION, } from "./gatew
|
|
|
3
3
|
import { GATEWAY_PROTOCOL_VERSION, GatewayFrameError, parseClientFrame, serializeServerFrame, } from "./protocol.js";
|
|
4
4
|
import { GatewayRpcError } from "./types.js";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Frame pertama WAJIB `connect`. Sebelum handshake selesai, frame lain
|
|
11
|
-
* dijawab dengan `not_handshaked`.
|
|
6
|
+
* One live WebSocket connection. The first frame must be `connect`; any
|
|
7
|
+
* other frame received before the handshake completes is replied to with
|
|
8
|
+
* `not_handshaked`.
|
|
12
9
|
*/
|
|
13
10
|
export class GatewayConnection {
|
|
14
11
|
gateway;
|
|
@@ -28,7 +25,6 @@ export class GatewayConnection {
|
|
|
28
25
|
token: null,
|
|
29
26
|
};
|
|
30
27
|
}
|
|
31
|
-
/** Memproses satu teks frame mentah dari socket. */
|
|
32
28
|
handleRawMessage(raw) {
|
|
33
29
|
let frame;
|
|
34
30
|
try {
|
|
@@ -36,7 +32,7 @@ export class GatewayConnection {
|
|
|
36
32
|
}
|
|
37
33
|
catch (error) {
|
|
38
34
|
if (error instanceof GatewayFrameError) {
|
|
39
|
-
//
|
|
35
|
+
// Without a valid id there is nothing to correlate a response to.
|
|
40
36
|
return;
|
|
41
37
|
}
|
|
42
38
|
throw error;
|
|
@@ -60,7 +56,6 @@ export class GatewayConnection {
|
|
|
60
56
|
}
|
|
61
57
|
void this.dispatch(frame);
|
|
62
58
|
}
|
|
63
|
-
/** Membersihkan saat socket tertutup: batalkan semua stream berjalan. */
|
|
64
59
|
handleClose() {
|
|
65
60
|
this.closed = true;
|
|
66
61
|
for (const controller of this.inFlight.values()) {
|
|
@@ -75,10 +70,6 @@ export class GatewayConnection {
|
|
|
75
70
|
});
|
|
76
71
|
}
|
|
77
72
|
}
|
|
78
|
-
/**
|
|
79
|
-
* Mengirim event broadcast (tanpa `id`) ke socket ini. Dipanggil oleh
|
|
80
|
-
* {@link Gateway.broadcast} dengan `seq` monotonik per topic.
|
|
81
|
-
*/
|
|
82
73
|
sendBroadcast(event, payload, seq) {
|
|
83
74
|
this.send({ type: "event", event, payload, seq });
|
|
84
75
|
}
|
|
@@ -120,9 +111,9 @@ export class GatewayConnection {
|
|
|
120
111
|
this.send({ type: "res", id: frame.id, ok: true, payload });
|
|
121
112
|
}
|
|
122
113
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
114
|
+
* Apply an inbound token to the context. An invalid token does not fail
|
|
115
|
+
* the handshake — the reply just carries `auth.ok: false` so the client
|
|
116
|
+
* can clear stale credentials and prompt the user to log in again.
|
|
126
117
|
*/
|
|
127
118
|
applyConnectAuth(params) {
|
|
128
119
|
const token = params?.auth?.token;
|
|
@@ -151,9 +142,8 @@ export class GatewayConnection {
|
|
|
151
142
|
});
|
|
152
143
|
return;
|
|
153
144
|
}
|
|
154
|
-
// Idempotency cache
|
|
155
|
-
//
|
|
156
|
-
// (key di-scope per user supaya tidak bertabrakan lintas-user).
|
|
145
|
+
// Idempotency cache is keyed per-user so that one user's retry cannot
|
|
146
|
+
// hit a cached entry from a different account.
|
|
157
147
|
const idempotencyKey = extractIdempotencyKey(frame.params);
|
|
158
148
|
const cacheKey = idempotencyKey && this.context.userId
|
|
159
149
|
? `${this.context.userId}:${frame.method}:${idempotencyKey}`
|
|
@@ -212,9 +202,9 @@ export class GatewayConnection {
|
|
|
212
202
|
}
|
|
213
203
|
const payload = step.done ? step.value : undefined;
|
|
214
204
|
this.send({ type: "res", id: frame.id, ok: true, payload });
|
|
215
|
-
//
|
|
216
|
-
//
|
|
217
|
-
//
|
|
205
|
+
// A cached stream replay sends only the terminal `res` — intermediate
|
|
206
|
+
// events are not replayed. Callers that depend on event history should
|
|
207
|
+
// not reuse the same idempotency key.
|
|
218
208
|
if (cacheKey) {
|
|
219
209
|
this.gateway.setIdempotent(cacheKey, { ok: true, payload });
|
|
220
210
|
}
|
|
@@ -234,7 +224,6 @@ export class GatewayConnection {
|
|
|
234
224
|
this.send({ type: "res", id, ok: false, error });
|
|
235
225
|
}
|
|
236
226
|
}
|
|
237
|
-
/** Mengambil `idempotencyKey` dari params bila berupa string non-kosong. */
|
|
238
227
|
function extractIdempotencyKey(params) {
|
|
239
228
|
if (!params || typeof params !== "object" || Array.isArray(params)) {
|
|
240
229
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/gateway/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,GAEvB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,GAMrB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAA0B,MAAM,YAAY,CAAA;AAEpE
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/gateway/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,14 @@
|
|
|
1
1
|
import type { RuntimeState } from "../runtime.js";
|
|
2
2
|
import { GatewayConnection } from "./connection.js";
|
|
3
3
|
import type { MethodHandler, StreamHandler, UnaryHandler } from "./types.js";
|
|
4
|
-
/**
|
|
5
|
-
* Inti gateway: pemilik RuntimeState, registry method RPC, dan registry
|
|
6
|
-
* koneksi aktif. Method didaftarkan oleh modul RPC pada milestone berikutnya.
|
|
7
|
-
*/
|
|
8
|
-
/** Versi server gateway. Ditampilkan di payload `hello-ok`. */
|
|
9
4
|
export declare const GATEWAY_SERVER_VERSION = "0.0.1";
|
|
10
|
-
/** Policy default — dilaporkan via `hello-ok` agar client tahu batasannya. */
|
|
11
5
|
export declare const GATEWAY_POLICY: {
|
|
12
|
-
/** Ukuran payload maksimum per frame (bytes). */
|
|
13
6
|
readonly maxPayload: number;
|
|
14
|
-
/** Buffer outbound maksimum per koneksi (bytes). */
|
|
15
7
|
readonly maxBufferedBytes: number;
|
|
16
|
-
/** Interval event `tick` (ms). Dipakai mulai Milestone 6. */
|
|
17
8
|
readonly tickIntervalMs: number;
|
|
18
9
|
};
|
|
19
|
-
/**
|
|
20
|
-
* Daftar event server-push yang DIDUKUNG.
|
|
21
|
-
* `agent` adalah event stream antara dari `agent.chat`; sisanya broadcast.
|
|
22
|
-
*/
|
|
23
10
|
export declare const GATEWAY_EVENTS: readonly string[];
|
|
24
|
-
/** TTL idempotency cache (5 menit) — mengikuti pola "short-lived dedup". */
|
|
25
11
|
export declare const IDEMPOTENCY_TTL_MS: number;
|
|
26
|
-
/** Hasil terakhir yang di-cache untuk satu `(user, method, key)`. */
|
|
27
12
|
export type IdempotencyEntry = {
|
|
28
13
|
ok: true;
|
|
29
14
|
payload?: unknown;
|
|
@@ -43,36 +28,22 @@ export declare class Gateway {
|
|
|
43
28
|
private readonly eventSeqByTopic;
|
|
44
29
|
private tickTimer;
|
|
45
30
|
constructor(runtime: RuntimeState);
|
|
46
|
-
/**
|
|
47
|
-
* Mengirim event broadcast ke SEMUA koneksi aktif dengan `seq`
|
|
48
|
-
* monotonik per topic. Tanpa `id` — frame dianggap broadcast (Milestone 6).
|
|
49
|
-
*/
|
|
31
|
+
/** Fan out a broadcast event with a monotonic per-topic `seq`. */
|
|
50
32
|
broadcast(event: string, payload: unknown): void;
|
|
51
|
-
/** Memberhentikan timer + me-detach broadcaster — dipanggil saat shutdown. */
|
|
52
33
|
dispose(): void;
|
|
53
|
-
/**
|
|
54
|
-
* Mengambil hasil cache idempotency. Mengembalikan undefined bila tidak ada
|
|
55
|
-
* atau sudah kadaluarsa (entri kadaluarsa dibersihkan saat dilihat).
|
|
56
|
-
*/
|
|
34
|
+
/** Return the cached idempotency entry, evicting it if it has expired. */
|
|
57
35
|
getIdempotent(key: string): IdempotencyEntry | undefined;
|
|
58
|
-
/** Menyimpan hasil ke cache idempotency dengan TTL pendek. */
|
|
59
36
|
setIdempotent(key: string, entry: IdempotencyEntry): void;
|
|
60
|
-
/** Nama seluruh method RPC terdaftar — dipakai di payload `hello-ok`. */
|
|
61
37
|
listMethodNames(): string[];
|
|
62
|
-
/** Uptime gateway dalam milidetik sejak konstruksi. */
|
|
63
38
|
uptimeMs(): number;
|
|
64
|
-
/** Mendaftarkan method RPC request-response. */
|
|
65
39
|
registerUnary(method: string, handler: UnaryHandler, options?: {
|
|
66
40
|
public?: boolean;
|
|
67
41
|
}): void;
|
|
68
|
-
/** Mendaftarkan method RPC streaming. */
|
|
69
42
|
registerStream(method: string, handler: StreamHandler, options?: {
|
|
70
43
|
public?: boolean;
|
|
71
44
|
}): void;
|
|
72
45
|
getMethod(method: string): MethodHandler | undefined;
|
|
73
|
-
/** Mendaftarkan koneksi WebSocket baru ke registry. */
|
|
74
46
|
handleConnection(sendRaw: (data: string) => void): GatewayConnection;
|
|
75
|
-
/** Melepas koneksi dari registry (dipanggil saat socket tertutup). */
|
|
76
47
|
removeConnection(connectionId: string): void;
|
|
77
48
|
get connectionCount(): number;
|
|
78
49
|
private assertMethodFree;
|