natroc 0.0.4 → 0.0.5
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/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/gateway/agent-service.d.ts +4 -4
- package/server/dist/gateway/agent-service.js +27 -7
- 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 +6 -34
- package/server/dist/gateway/gateway.js.map +1 -1
- package/server/dist/gateway/index.d.ts +0 -1
- package/server/dist/gateway/index.js +0 -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 +0 -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/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/runtime.d.ts +3 -3
- 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-BiVH3g6R.js} +2 -2
- package/ui/dist/index.html +1 -1
|
@@ -8,7 +8,6 @@ import { requireAuth } from "../types.js";
|
|
|
8
8
|
const providerTargetSchema = z.object({
|
|
9
9
|
provider: z.enum(["openrouter", "ollama"]),
|
|
10
10
|
});
|
|
11
|
-
/** Mendaftarkan method RPC `providers.*` pada gateway. */
|
|
12
11
|
export function registerProviderMethods(gateway) {
|
|
13
12
|
gateway.registerUnary("providers.list", handleList);
|
|
14
13
|
gateway.registerUnary("providers.setActive", handleSetActive);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/gateway/rpc/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAA;AACjF,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,OAAO,EAAE,WAAW,EAA0B,MAAM,aAAa,CAAA;AAEjE,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;CAC3C,CAAC,CAAA;AAEF,
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/gateway/rpc/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,13 @@
|
|
|
1
1
|
import type { AgentLoopEvent } from "../agent/agent-loop.js";
|
|
2
2
|
import type { RuntimeState } from "../runtime.js";
|
|
3
|
-
/**
|
|
4
|
-
* Konteks satu koneksi gateway, dibagikan ke setiap handler method.
|
|
5
|
-
* `userId` bersifat mutable: diisi oleh handler auth (Milestone 2) dan
|
|
6
|
-
* bertahan selama koneksi hidup.
|
|
7
|
-
*/
|
|
8
3
|
export type ConnectionContext = {
|
|
9
4
|
readonly connectionId: string;
|
|
10
5
|
readonly runtime: RuntimeState;
|
|
11
6
|
userId: string | null;
|
|
12
7
|
token: string | null;
|
|
13
8
|
};
|
|
14
|
-
/** Handler RPC request-response (auth, CRUD). */
|
|
15
9
|
export type UnaryHandler = (ctx: ConnectionContext, params: unknown) => Promise<unknown> | unknown;
|
|
16
|
-
/**
|
|
17
|
-
* Handler RPC streaming (chat agent). Generator yield event antara; nilai
|
|
18
|
-
* `return`-nya dikirim sebagai `result` pada frame `end`.
|
|
19
|
-
*/
|
|
20
10
|
export type StreamHandler = (ctx: ConnectionContext, params: unknown, signal: AbortSignal) => AsyncGenerator<AgentLoopEvent, unknown>;
|
|
21
|
-
/**
|
|
22
|
-
* Method terdaftar pada gateway. `public: true` boleh dipanggil tanpa
|
|
23
|
-
* autentikasi (mis. `auth.login`); selain itu koneksi wajib authenticated.
|
|
24
|
-
*/
|
|
25
11
|
export type MethodHandler = {
|
|
26
12
|
kind: "unary";
|
|
27
13
|
handler: UnaryHandler;
|
|
@@ -31,13 +17,9 @@ export type MethodHandler = {
|
|
|
31
17
|
handler: StreamHandler;
|
|
32
18
|
public: boolean;
|
|
33
19
|
};
|
|
34
|
-
/**
|
|
35
|
-
* Error yang boleh dilempar handler untuk dikirim sebagai frame `error`
|
|
36
|
-
* dengan pesan & kode terkontrol (tanpa membocorkan detail internal).
|
|
37
|
-
*/
|
|
20
|
+
/** Error thrown by handlers to surface a controlled code + message to the client. */
|
|
38
21
|
export declare class GatewayRpcError extends Error {
|
|
39
22
|
readonly code?: string;
|
|
40
23
|
constructor(message: string, code?: string);
|
|
41
24
|
}
|
|
42
|
-
/** Memastikan koneksi sudah authenticated; mengembalikan userId atau melempar. */
|
|
43
25
|
export declare function requireAuth(ctx: ConnectionContext): string;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Error yang boleh dilempar handler untuk dikirim sebagai frame `error`
|
|
3
|
-
* dengan pesan & kode terkontrol (tanpa membocorkan detail internal).
|
|
4
|
-
*/
|
|
1
|
+
/** Error thrown by handlers to surface a controlled code + message to the client. */
|
|
5
2
|
export class GatewayRpcError extends Error {
|
|
6
3
|
code;
|
|
7
4
|
constructor(message, code) {
|
|
@@ -10,7 +7,6 @@ export class GatewayRpcError extends Error {
|
|
|
10
7
|
this.code = code;
|
|
11
8
|
}
|
|
12
9
|
}
|
|
13
|
-
/** Memastikan koneksi sudah authenticated; mengembalikan userId atau melempar. */
|
|
14
10
|
export function requireAuth(ctx) {
|
|
15
11
|
if (!ctx.userId) {
|
|
16
12
|
throw new GatewayRpcError("Authentication required.", "unauthenticated");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gateway/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gateway/types.ts"],"names":[],"mappings":"AAyBA,qFAAqF;AACrF,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAS;IAEtB,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,GAAsB;IAChD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,IAAI,eAAe,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,GAAG,CAAC,MAAM,CAAA;AACnB,CAAC"}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import type { FastifyInstance } from "fastify";
|
|
2
2
|
import type { Gateway } from "./gateway.js";
|
|
3
|
-
/** Path WebSocket tempat semua client gateway menyambung. */
|
|
4
3
|
export declare const GATEWAY_WS_PATH = "/gateway";
|
|
5
|
-
/**
|
|
6
|
-
* Mendaftarkan endpoint WebSocket gateway pada instance Fastify.
|
|
7
|
-
* Plugin @fastify/websocket dan route-nya didaftarkan dalam satu scope
|
|
8
|
-
* plugin agar urutan registrasinya terjamin.
|
|
9
|
-
*/
|
|
10
4
|
export declare function registerGatewayWebSocket(app: FastifyInstance, gateway: Gateway): void;
|
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import websocket from "@fastify/websocket";
|
|
2
|
-
/** Path WebSocket tempat semua client gateway menyambung. */
|
|
3
2
|
export const GATEWAY_WS_PATH = "/gateway";
|
|
4
|
-
/**
|
|
5
|
-
* Mendaftarkan endpoint WebSocket gateway pada instance Fastify.
|
|
6
|
-
* Plugin @fastify/websocket dan route-nya didaftarkan dalam satu scope
|
|
7
|
-
* plugin agar urutan registrasinya terjamin.
|
|
8
|
-
*/
|
|
9
3
|
export function registerGatewayWebSocket(app, gateway) {
|
|
4
|
+
// The websocket plugin and its route share one async scope so that the
|
|
5
|
+
// plugin finishes registering before the route reads it.
|
|
10
6
|
app.register(async (instance) => {
|
|
11
7
|
await instance.register(websocket);
|
|
12
8
|
instance.get(GATEWAY_WS_PATH, { websocket: true }, (socket) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-server.js","sourceRoot":"","sources":["../../src/gateway/ws-server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAM1C,
|
|
1
|
+
{"version":3,"file":"ws-server.js","sourceRoot":"","sources":["../../src/gateway/ws-server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAM1C,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AAEzC,MAAM,UAAU,wBAAwB,CACtC,GAAoB,EACpB,OAAgB;IAEhB,uEAAuE;IACvE,yDAAyD;IACzD,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC9B,MAAM,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAElC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAiB,EAAE,EAAE;YACvE,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;gBACnD,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;oBACtC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnB,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,QAAiB,EAAE,EAAE;gBACvD,IAAI,QAAQ;oBAAE,OAAM;gBACpB,UAAU,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;YAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,UAAU,CAAC,WAAW,EAAE,CAAA;gBACxB,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACzC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAY;IACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAClE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC1C,CAAC"}
|
package/server/dist/runtime.d.ts
CHANGED
|
@@ -36,9 +36,9 @@ export type RuntimeState = {
|
|
|
36
36
|
projects: ProjectRepository;
|
|
37
37
|
auth: AuthRepository;
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
39
|
+
* Set by the gateway at startup. Other modules emit server-push events
|
|
40
|
+
* (`tick` / `presence` / `health`) via `runtime.broadcaster?.broadcast(...)`
|
|
41
|
+
* without importing the gateway directly.
|
|
42
42
|
*/
|
|
43
43
|
broadcaster?: {
|
|
44
44
|
broadcast: (event: string, payload: unknown) => void;
|
|
@@ -27,11 +27,7 @@ export declare class AuthRepository {
|
|
|
27
27
|
private readonly db;
|
|
28
28
|
constructor(db: DatabaseConnection);
|
|
29
29
|
countUsers(): number;
|
|
30
|
-
/**
|
|
31
|
-
* Mengambil id user yang paling pertama dibuat. Dipakai oleh CLI helper
|
|
32
|
-
* (`natroc cli-token`) untuk asumsi single-user. Mengembalikan null bila
|
|
33
|
-
* belum ada user.
|
|
34
|
-
*/
|
|
30
|
+
/** Returns the id of the earliest-created user, or null if none exist. */
|
|
35
31
|
getFirstUserId(): string | null;
|
|
36
32
|
createUser(input: CreateUserInput): UserRecord;
|
|
37
33
|
getUserByUsername(username: string): UserWithSecret | null;
|
|
@@ -12,11 +12,7 @@ export class AuthRepository {
|
|
|
12
12
|
.get();
|
|
13
13
|
return row.count;
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Mengambil id user yang paling pertama dibuat. Dipakai oleh CLI helper
|
|
17
|
-
* (`natroc cli-token`) untuk asumsi single-user. Mengembalikan null bila
|
|
18
|
-
* belum ada user.
|
|
19
|
-
*/
|
|
15
|
+
/** Returns the id of the earliest-created user, or null if none exist. */
|
|
20
16
|
getFirstUserId() {
|
|
21
17
|
const row = this.db
|
|
22
18
|
.prepare("SELECT id FROM users ORDER BY created_at ASC LIMIT 1")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-repository.js","sourceRoot":"","sources":["../../src/storage/auth-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EACL,4BAA4B,GAE7B,MAAM,eAAe,CAAA;AAgDtB,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA,CAAC,UAAU;AAE1D,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,EAAsB;QAAtB,OAAE,GAAF,EAAE,CAAoB;IAAG,CAAC;IAEvD,UAAU;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,qCAAqC,CAAC;aAC9C,GAAG,EAAuB,CAAA;QAE7B,OAAO,GAAG,CAAC,KAAK,CAAA;IAClB,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"auth-repository.js","sourceRoot":"","sources":["../../src/storage/auth-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,8 @@ export type ChannelAccountRecord = {
|
|
|
18
18
|
updatedAt: string;
|
|
19
19
|
};
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
22
|
-
* {@link DEFAULT_CHANNEL_POLICY}.
|
|
21
|
+
* Per-account policy stored on `metadata.policy` (no schema migration
|
|
22
|
+
* required). All fields are optional; defaults live in {@link DEFAULT_CHANNEL_POLICY}.
|
|
23
23
|
*/
|
|
24
24
|
export type ChannelAccountPolicy = {
|
|
25
25
|
dmPolicy?: "pairing" | "allowlist" | "open" | "disabled";
|
|
@@ -32,8 +32,8 @@ export type ChannelAccountPolicy = {
|
|
|
32
32
|
requireMention?: boolean;
|
|
33
33
|
};
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
35
|
+
* Conservative defaults — DM allowlist + groups disabled — so an unconfigured
|
|
36
|
+
* channel will not reply to anyone who has not been explicitly approved.
|
|
37
37
|
*/
|
|
38
38
|
export declare const DEFAULT_CHANNEL_POLICY: Required<ChannelAccountPolicy>;
|
|
39
39
|
/** Mengambil policy efektif (defaults + override dari `account.metadata.policy`). */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Conservative defaults — DM allowlist + groups disabled — so an unconfigured
|
|
3
|
+
* channel will not reply to anyone who has not been explicitly approved.
|
|
4
4
|
*/
|
|
5
5
|
export const DEFAULT_CHANNEL_POLICY = {
|
|
6
6
|
dmPolicy: "allowlist",
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { DatabaseConnection } from "./database.js";
|
|
2
2
|
import type { ProviderName, ChatRole } from "../providers/types.js";
|
|
3
|
+
export type MessageToolEvent = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
args: Record<string, unknown>;
|
|
7
|
+
risk: "low" | "high";
|
|
8
|
+
status: "ok" | "error";
|
|
9
|
+
output: string;
|
|
10
|
+
};
|
|
3
11
|
export type ConversationRecord = {
|
|
4
12
|
id: string;
|
|
5
13
|
userId: string | null;
|
|
@@ -16,6 +24,9 @@ export type MessageRecord = {
|
|
|
16
24
|
conversationId: string;
|
|
17
25
|
role: ChatRole;
|
|
18
26
|
content: string;
|
|
27
|
+
reasoningText: string | null;
|
|
28
|
+
thinkingDurationMs: number | null;
|
|
29
|
+
toolEvents: MessageToolEvent[];
|
|
19
30
|
provider: ProviderName | null;
|
|
20
31
|
model: string | null;
|
|
21
32
|
createdAt: string;
|
|
@@ -51,6 +62,8 @@ export declare class ConversationRepository {
|
|
|
51
62
|
conversationId: string;
|
|
52
63
|
role: ChatRole;
|
|
53
64
|
content: string;
|
|
65
|
+
reasoningText?: string | null;
|
|
66
|
+
thinkingDurationMs?: number | null;
|
|
54
67
|
provider?: ProviderName | null;
|
|
55
68
|
model?: string | null;
|
|
56
69
|
}): MessageRecord;
|
|
@@ -47,7 +47,16 @@ export class ConversationRepository {
|
|
|
47
47
|
: this.db
|
|
48
48
|
.prepare("SELECT * FROM messages WHERE conversation_id = ? ORDER BY created_at ASC, rowid ASC")
|
|
49
49
|
.all(conversationId);
|
|
50
|
-
|
|
50
|
+
const toolRows = options.userId
|
|
51
|
+
? this.db
|
|
52
|
+
.prepare("SELECT id, message_id, conversation_id, tool_name, args_json, result_output, status, risk, created_at FROM agent_tool_calls WHERE conversation_id = ? AND user_id = ? ORDER BY created_at ASC, rowid ASC")
|
|
53
|
+
.all(conversationId, options.userId)
|
|
54
|
+
: this.db
|
|
55
|
+
.prepare("SELECT id, message_id, conversation_id, tool_name, args_json, result_output, status, risk, created_at FROM agent_tool_calls WHERE conversation_id = ? ORDER BY created_at ASC, rowid ASC")
|
|
56
|
+
.all(conversationId);
|
|
57
|
+
const messages = rows.map(mapMessageRow);
|
|
58
|
+
attachToolEvents(messages, toolRows);
|
|
59
|
+
return messages;
|
|
51
60
|
}
|
|
52
61
|
getRecentMessages(conversationId, limit, options = {}) {
|
|
53
62
|
const rows = options.userId
|
|
@@ -85,17 +94,17 @@ export class ConversationRepository {
|
|
|
85
94
|
const now = new Date().toISOString();
|
|
86
95
|
const normalizedTitle = title.trim().slice(0, 60) || "New conversation";
|
|
87
96
|
this.db
|
|
88
|
-
.prepare(`
|
|
89
|
-
INSERT INTO conversations (
|
|
97
|
+
.prepare(`
|
|
98
|
+
INSERT INTO conversations (
|
|
90
99
|
id,
|
|
91
100
|
user_id,
|
|
92
101
|
agent_id,
|
|
93
102
|
channel,
|
|
94
103
|
title,
|
|
95
|
-
active_provider,
|
|
96
|
-
created_at,
|
|
97
|
-
updated_at
|
|
98
|
-
)
|
|
104
|
+
active_provider,
|
|
105
|
+
created_at,
|
|
106
|
+
updated_at
|
|
107
|
+
)
|
|
99
108
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
100
109
|
`)
|
|
101
110
|
.run(id, options.userId ?? null, options.agentId ?? null, options.channel ?? null, normalizedTitle, provider, now, now);
|
|
@@ -114,20 +123,22 @@ export class ConversationRepository {
|
|
|
114
123
|
const now = new Date().toISOString();
|
|
115
124
|
const id = crypto.randomUUID();
|
|
116
125
|
this.db
|
|
117
|
-
.prepare(`
|
|
118
|
-
INSERT INTO messages (
|
|
126
|
+
.prepare(`
|
|
127
|
+
INSERT INTO messages (
|
|
119
128
|
id,
|
|
120
129
|
user_id,
|
|
121
130
|
conversation_id,
|
|
122
|
-
role,
|
|
123
|
-
content,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
role,
|
|
132
|
+
content,
|
|
133
|
+
reasoning_text,
|
|
134
|
+
thinking_duration_ms,
|
|
135
|
+
provider,
|
|
136
|
+
model,
|
|
137
|
+
created_at
|
|
138
|
+
)
|
|
139
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
129
140
|
`)
|
|
130
|
-
.run(id, input.userId ?? null, input.conversationId, input.role, input.content, input.provider ?? null, input.model ?? null, now);
|
|
141
|
+
.run(id, input.userId ?? null, input.conversationId, input.role, input.content, input.reasoningText ?? null, input.thinkingDurationMs ?? null, input.provider ?? null, input.model ?? null, now);
|
|
131
142
|
this.db
|
|
132
143
|
.prepare("UPDATE conversations SET updated_at = ?, active_provider = COALESCE(?, active_provider) WHERE id = ?")
|
|
133
144
|
.run(now, input.provider ?? null, input.conversationId);
|
|
@@ -137,6 +148,9 @@ export class ConversationRepository {
|
|
|
137
148
|
conversationId: input.conversationId,
|
|
138
149
|
role: input.role,
|
|
139
150
|
content: input.content,
|
|
151
|
+
reasoningText: input.reasoningText ?? null,
|
|
152
|
+
thinkingDurationMs: input.thinkingDurationMs ?? null,
|
|
153
|
+
toolEvents: [],
|
|
140
154
|
provider: input.provider ?? null,
|
|
141
155
|
model: input.model ?? null,
|
|
142
156
|
createdAt: now,
|
|
@@ -180,11 +194,63 @@ function mapMessageRow(row) {
|
|
|
180
194
|
conversationId: row.conversation_id,
|
|
181
195
|
role: row.role,
|
|
182
196
|
content: row.content,
|
|
197
|
+
reasoningText: row.reasoning_text,
|
|
198
|
+
thinkingDurationMs: row.thinking_duration_ms,
|
|
199
|
+
toolEvents: [],
|
|
183
200
|
provider: row.provider,
|
|
184
201
|
model: row.model,
|
|
185
202
|
createdAt: row.created_at,
|
|
186
203
|
};
|
|
187
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Bind tool calls onto their owning assistant message. Calls with a
|
|
207
|
+
* `message_id` go straight to that row; legacy calls without one are
|
|
208
|
+
* attached to the latest assistant message whose timestamp does not
|
|
209
|
+
* exceed the tool call's `created_at`.
|
|
210
|
+
*/
|
|
211
|
+
function attachToolEvents(messages, toolRows) {
|
|
212
|
+
const byMessageId = new Map();
|
|
213
|
+
for (const message of messages)
|
|
214
|
+
byMessageId.set(message.id, message);
|
|
215
|
+
for (const row of toolRows) {
|
|
216
|
+
const event = {
|
|
217
|
+
id: row.id,
|
|
218
|
+
name: row.tool_name,
|
|
219
|
+
args: safeParseArgs(row.args_json),
|
|
220
|
+
risk: row.risk,
|
|
221
|
+
status: row.status,
|
|
222
|
+
output: row.result_output,
|
|
223
|
+
};
|
|
224
|
+
if (row.message_id) {
|
|
225
|
+
byMessageId.get(row.message_id)?.toolEvents.push(event);
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
const target = lastAssistantBefore(messages, row.created_at);
|
|
229
|
+
target?.toolEvents.push(event);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function lastAssistantBefore(messages, timestamp) {
|
|
233
|
+
let candidate;
|
|
234
|
+
for (const message of messages) {
|
|
235
|
+
if (message.role !== "assistant")
|
|
236
|
+
continue;
|
|
237
|
+
if (message.createdAt > timestamp)
|
|
238
|
+
break;
|
|
239
|
+
candidate = message;
|
|
240
|
+
}
|
|
241
|
+
return candidate;
|
|
242
|
+
}
|
|
243
|
+
function safeParseArgs(value) {
|
|
244
|
+
try {
|
|
245
|
+
const parsed = JSON.parse(value);
|
|
246
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed)
|
|
247
|
+
? parsed
|
|
248
|
+
: {};
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return {};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
188
254
|
function normalizeMessageContent(value) {
|
|
189
255
|
return value.trim().replace(/\s+/g, " ");
|
|
190
256
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-repository.js","sourceRoot":"","sources":["../../src/storage/conversation-repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversation-repository.js","sourceRoot":"","sources":["../../src/storage/conversation-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,6 @@ import { DatabaseSync } from "node:sqlite";
|
|
|
2
2
|
export type DatabaseConnection = DatabaseSync;
|
|
3
3
|
export declare function openDatabase(path: string): DatabaseConnection;
|
|
4
4
|
export declare function migrateDatabase(db: DatabaseConnection): void;
|
|
5
|
-
/**
|
|
6
|
-
* Menjalankan `fn` dalam satu transaksi (BEGIN/COMMIT; ROLLBACK saat error).
|
|
7
|
-
* Pengganti `db.transaction()` milik better-sqlite3 yang tidak tersedia di
|
|
8
|
-
* node:sqlite.
|
|
9
|
-
*/
|
|
5
|
+
/** Execute `fn` inside a BEGIN/COMMIT transaction, rolling back on error. */
|
|
10
6
|
export declare function runInTransaction<T>(db: DatabaseConnection, fn: () => T): T;
|
|
11
7
|
export declare function assignLegacyDataToSingleUser(db: DatabaseConnection): void;
|
|
@@ -249,16 +249,15 @@ export function migrateDatabase(db) {
|
|
|
249
249
|
ensureColumn(db, "conversations", "agent_id", "TEXT");
|
|
250
250
|
ensureColumn(db, "conversations", "channel", "TEXT");
|
|
251
251
|
ensureColumn(db, "messages", "user_id", "TEXT");
|
|
252
|
+
ensureColumn(db, "messages", "reasoning_text", "TEXT");
|
|
253
|
+
ensureColumn(db, "messages", "thinking_duration_ms", "INTEGER");
|
|
252
254
|
ensureColumn(db, "agent_memory_entries", "user_id", "TEXT");
|
|
253
255
|
ensureColumn(db, "improvement_proposals", "user_id", "TEXT");
|
|
254
256
|
ensureColumn(db, "agent_tool_calls", "user_id", "TEXT");
|
|
257
|
+
ensureColumn(db, "agent_tool_calls", "message_id", "TEXT");
|
|
255
258
|
assignLegacyDataToSingleUser(db);
|
|
256
259
|
}
|
|
257
|
-
/**
|
|
258
|
-
* Menjalankan `fn` dalam satu transaksi (BEGIN/COMMIT; ROLLBACK saat error).
|
|
259
|
-
* Pengganti `db.transaction()` milik better-sqlite3 yang tidak tersedia di
|
|
260
|
-
* node:sqlite.
|
|
261
|
-
*/
|
|
260
|
+
/** Execute `fn` inside a BEGIN/COMMIT transaction, rolling back on error. */
|
|
262
261
|
export function runInTransaction(db, fn) {
|
|
263
262
|
db.exec("BEGIN");
|
|
264
263
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAInC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsOlB,CAAA;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;IACjC,eAAe,CAAC,EAAE,CAAC,CAAA;IACnB,OAAO,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAsB;IACpD,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACrC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IACpC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAEnB,+BAA+B,CAAC,EAAE,CAAC,CAAA;IACnC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;IACrD,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACvD,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACpD,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;IACrD,YAAY,CAAC,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACpD,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAC/C,YAAY,CAAC,EAAE,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAC3D,YAAY,CAAC,EAAE,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAC5D,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACvD,4BAA4B,CAAC,EAAE,CAAC,CAAA;AAClC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export type ToolCallRecord = {
|
|
|
5
5
|
id: string;
|
|
6
6
|
userId: string | null;
|
|
7
7
|
conversationId: string;
|
|
8
|
+
messageId: string | null;
|
|
8
9
|
toolName: string;
|
|
9
10
|
args: Record<string, unknown>;
|
|
10
11
|
output: string;
|
|
@@ -16,6 +17,7 @@ export type CreateToolCallInput = {
|
|
|
16
17
|
id?: string;
|
|
17
18
|
userId?: string | null;
|
|
18
19
|
conversationId: string;
|
|
20
|
+
messageId?: string | null;
|
|
19
21
|
toolName: string;
|
|
20
22
|
args: Record<string, unknown>;
|
|
21
23
|
output: string;
|
|
@@ -9,10 +9,11 @@ export class ToolCallRepository {
|
|
|
9
9
|
const argsJson = JSON.stringify(input.args ?? {});
|
|
10
10
|
this.db
|
|
11
11
|
.prepare(`
|
|
12
|
-
INSERT INTO agent_tool_calls (
|
|
13
|
-
id,
|
|
14
|
-
user_id,
|
|
15
|
-
conversation_id,
|
|
12
|
+
INSERT INTO agent_tool_calls (
|
|
13
|
+
id,
|
|
14
|
+
user_id,
|
|
15
|
+
conversation_id,
|
|
16
|
+
message_id,
|
|
16
17
|
tool_name,
|
|
17
18
|
args_json,
|
|
18
19
|
result_output,
|
|
@@ -20,13 +21,14 @@ export class ToolCallRepository {
|
|
|
20
21
|
risk,
|
|
21
22
|
created_at
|
|
22
23
|
)
|
|
23
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
24
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
24
25
|
`)
|
|
25
|
-
.run(id, input.userId ?? null, input.conversationId, input.toolName, argsJson, input.output, input.status, input.risk, now);
|
|
26
|
+
.run(id, input.userId ?? null, input.conversationId, input.messageId ?? null, input.toolName, argsJson, input.output, input.status, input.risk, now);
|
|
26
27
|
return {
|
|
27
28
|
id,
|
|
28
29
|
userId: input.userId ?? null,
|
|
29
30
|
conversationId: input.conversationId,
|
|
31
|
+
messageId: input.messageId ?? null,
|
|
30
32
|
toolName: input.toolName,
|
|
31
33
|
args: input.args ?? {},
|
|
32
34
|
output: input.output,
|
|
@@ -61,6 +63,7 @@ function mapToolCallRow(row) {
|
|
|
61
63
|
id: row.id,
|
|
62
64
|
userId: row.user_id,
|
|
63
65
|
conversationId: row.conversation_id,
|
|
66
|
+
messageId: row.message_id,
|
|
64
67
|
toolName: row.tool_name,
|
|
65
68
|
args: safeParseArgs(row.args_json),
|
|
66
69
|
output: row.result_output,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-call-repository.js","sourceRoot":"","sources":["../../src/storage/tool-call-repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-call-repository.js","sourceRoot":"","sources":["../../src/storage/tool-call-repository.ts"],"names":[],"mappings":"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"}
|