@sna-sdk/core 0.1.0 → 0.1.1
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/dist/db/schema.d.ts +1 -0
- package/dist/db/schema.js +8 -0
- package/dist/server/routes/agent.js +10 -2
- package/dist/server/routes/chat.js +9 -5
- package/dist/server/session-manager.d.ts +3 -0
- package/dist/server/session-manager.js +2 -0
- package/dist/server/standalone.js +29 -7
- package/package.json +1 -1
package/dist/db/schema.d.ts
CHANGED
package/dist/db/schema.js
CHANGED
|
@@ -23,13 +23,21 @@ function migrateSkillEvents(db) {
|
|
|
23
23
|
db.exec("DROP TABLE IF EXISTS skill_events");
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
+
function migrateChatSessionsMeta(db) {
|
|
27
|
+
const cols = db.prepare("PRAGMA table_info(chat_sessions)").all();
|
|
28
|
+
if (cols.length > 0 && !cols.some((c) => c.name === "meta")) {
|
|
29
|
+
db.exec("ALTER TABLE chat_sessions ADD COLUMN meta TEXT");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
26
32
|
function initSchema(db) {
|
|
27
33
|
migrateSkillEvents(db);
|
|
34
|
+
migrateChatSessionsMeta(db);
|
|
28
35
|
db.exec(`
|
|
29
36
|
CREATE TABLE IF NOT EXISTS chat_sessions (
|
|
30
37
|
id TEXT PRIMARY KEY,
|
|
31
38
|
label TEXT NOT NULL DEFAULT '',
|
|
32
39
|
type TEXT NOT NULL DEFAULT 'main',
|
|
40
|
+
meta TEXT,
|
|
33
41
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
34
42
|
);
|
|
35
43
|
|
|
@@ -15,10 +15,18 @@ function createAgentRoutes(sessionManager) {
|
|
|
15
15
|
try {
|
|
16
16
|
const session = sessionManager.createSession({
|
|
17
17
|
label: body.label,
|
|
18
|
-
cwd: body.cwd
|
|
18
|
+
cwd: body.cwd,
|
|
19
|
+
meta: body.meta
|
|
19
20
|
});
|
|
21
|
+
try {
|
|
22
|
+
const db = getDb();
|
|
23
|
+
db.prepare(
|
|
24
|
+
`INSERT OR IGNORE INTO chat_sessions (id, label, type, meta) VALUES (?, ?, 'main', ?)`
|
|
25
|
+
).run(session.id, session.label, session.meta ? JSON.stringify(session.meta) : null);
|
|
26
|
+
} catch {
|
|
27
|
+
}
|
|
20
28
|
logger.log("route", `POST /sessions \u2192 created "${session.id}"`);
|
|
21
|
-
return c.json({ status: "created", sessionId: session.id, label: session.label });
|
|
29
|
+
return c.json({ status: "created", sessionId: session.id, label: session.label, meta: session.meta });
|
|
22
30
|
} catch (e) {
|
|
23
31
|
logger.err("err", `POST /sessions \u2192 ${e.message}`);
|
|
24
32
|
return c.json({ status: "error", message: e.message }, 409);
|
|
@@ -5,9 +5,13 @@ function createChatRoutes() {
|
|
|
5
5
|
app.get("/sessions", (c) => {
|
|
6
6
|
try {
|
|
7
7
|
const db = getDb();
|
|
8
|
-
const
|
|
9
|
-
`SELECT id, label, type, created_at FROM chat_sessions ORDER BY created_at DESC`
|
|
8
|
+
const rows = db.prepare(
|
|
9
|
+
`SELECT id, label, type, meta, created_at FROM chat_sessions ORDER BY created_at DESC`
|
|
10
10
|
).all();
|
|
11
|
+
const sessions = rows.map((r) => ({
|
|
12
|
+
...r,
|
|
13
|
+
meta: r.meta ? JSON.parse(r.meta) : null
|
|
14
|
+
}));
|
|
11
15
|
return c.json({ sessions });
|
|
12
16
|
} catch (e) {
|
|
13
17
|
return c.json({ status: "error", message: e.message, stack: e.stack }, 500);
|
|
@@ -19,9 +23,9 @@ function createChatRoutes() {
|
|
|
19
23
|
try {
|
|
20
24
|
const db = getDb();
|
|
21
25
|
db.prepare(
|
|
22
|
-
`INSERT OR IGNORE INTO chat_sessions (id, label, type) VALUES (?, ?, ?)`
|
|
23
|
-
).run(id, body.label ?? id, body.type ?? "background");
|
|
24
|
-
return c.json({ status: "created", id });
|
|
26
|
+
`INSERT OR IGNORE INTO chat_sessions (id, label, type, meta) VALUES (?, ?, ?, ?)`
|
|
27
|
+
).run(id, body.label ?? id, body.type ?? "background", body.meta ? JSON.stringify(body.meta) : null);
|
|
28
|
+
return c.json({ status: "created", id, meta: body.meta ?? null });
|
|
25
29
|
} catch (e) {
|
|
26
30
|
return c.json({ status: "error", message: e.message }, 500);
|
|
27
31
|
}
|
|
@@ -15,6 +15,7 @@ interface Session {
|
|
|
15
15
|
eventCounter: number;
|
|
16
16
|
label: string;
|
|
17
17
|
cwd: string;
|
|
18
|
+
meta: Record<string, unknown> | null;
|
|
18
19
|
state: SessionState;
|
|
19
20
|
createdAt: number;
|
|
20
21
|
lastActivityAt: number;
|
|
@@ -25,6 +26,7 @@ interface SessionInfo {
|
|
|
25
26
|
alive: boolean;
|
|
26
27
|
state: SessionState;
|
|
27
28
|
cwd: string;
|
|
29
|
+
meta: Record<string, unknown> | null;
|
|
28
30
|
eventCount: number;
|
|
29
31
|
createdAt: number;
|
|
30
32
|
lastActivityAt: number;
|
|
@@ -41,6 +43,7 @@ declare class SessionManager {
|
|
|
41
43
|
id?: string;
|
|
42
44
|
label?: string;
|
|
43
45
|
cwd?: string;
|
|
46
|
+
meta?: Record<string, unknown> | null;
|
|
44
47
|
}): Session;
|
|
45
48
|
/** Get a session by ID. */
|
|
46
49
|
getSession(id: string): Session | undefined;
|
|
@@ -23,6 +23,7 @@ class SessionManager {
|
|
|
23
23
|
eventCounter: 0,
|
|
24
24
|
label: opts.label ?? id,
|
|
25
25
|
cwd: opts.cwd ?? process.cwd(),
|
|
26
|
+
meta: opts.meta ?? null,
|
|
26
27
|
state: "idle",
|
|
27
28
|
createdAt: Date.now(),
|
|
28
29
|
lastActivityAt: Date.now()
|
|
@@ -83,6 +84,7 @@ class SessionManager {
|
|
|
83
84
|
alive: s.process?.alive ?? false,
|
|
84
85
|
state: s.state,
|
|
85
86
|
cwd: s.cwd,
|
|
87
|
+
meta: s.meta,
|
|
86
88
|
eventCount: s.eventCounter,
|
|
87
89
|
createdAt: s.createdAt,
|
|
88
90
|
lastActivityAt: s.lastActivityAt
|
|
@@ -36,13 +36,21 @@ function migrateSkillEvents(db) {
|
|
|
36
36
|
db.exec("DROP TABLE IF EXISTS skill_events");
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
function migrateChatSessionsMeta(db) {
|
|
40
|
+
const cols = db.prepare("PRAGMA table_info(chat_sessions)").all();
|
|
41
|
+
if (cols.length > 0 && !cols.some((c) => c.name === "meta")) {
|
|
42
|
+
db.exec("ALTER TABLE chat_sessions ADD COLUMN meta TEXT");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
39
45
|
function initSchema(db) {
|
|
40
46
|
migrateSkillEvents(db);
|
|
47
|
+
migrateChatSessionsMeta(db);
|
|
41
48
|
db.exec(`
|
|
42
49
|
CREATE TABLE IF NOT EXISTS chat_sessions (
|
|
43
50
|
id TEXT PRIMARY KEY,
|
|
44
51
|
label TEXT NOT NULL DEFAULT '',
|
|
45
52
|
type TEXT NOT NULL DEFAULT 'main',
|
|
53
|
+
meta TEXT,
|
|
46
54
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
47
55
|
);
|
|
48
56
|
|
|
@@ -576,10 +584,18 @@ function createAgentRoutes(sessionManager2) {
|
|
|
576
584
|
try {
|
|
577
585
|
const session = sessionManager2.createSession({
|
|
578
586
|
label: body.label,
|
|
579
|
-
cwd: body.cwd
|
|
587
|
+
cwd: body.cwd,
|
|
588
|
+
meta: body.meta
|
|
580
589
|
});
|
|
590
|
+
try {
|
|
591
|
+
const db = getDb();
|
|
592
|
+
db.prepare(
|
|
593
|
+
`INSERT OR IGNORE INTO chat_sessions (id, label, type, meta) VALUES (?, ?, 'main', ?)`
|
|
594
|
+
).run(session.id, session.label, session.meta ? JSON.stringify(session.meta) : null);
|
|
595
|
+
} catch {
|
|
596
|
+
}
|
|
581
597
|
logger.log("route", `POST /sessions \u2192 created "${session.id}"`);
|
|
582
|
-
return c.json({ status: "created", sessionId: session.id, label: session.label });
|
|
598
|
+
return c.json({ status: "created", sessionId: session.id, label: session.label, meta: session.meta });
|
|
583
599
|
} catch (e) {
|
|
584
600
|
logger.err("err", `POST /sessions \u2192 ${e.message}`);
|
|
585
601
|
return c.json({ status: "error", message: e.message }, 409);
|
|
@@ -793,9 +809,13 @@ function createChatRoutes() {
|
|
|
793
809
|
app.get("/sessions", (c) => {
|
|
794
810
|
try {
|
|
795
811
|
const db = getDb();
|
|
796
|
-
const
|
|
797
|
-
`SELECT id, label, type, created_at FROM chat_sessions ORDER BY created_at DESC`
|
|
812
|
+
const rows = db.prepare(
|
|
813
|
+
`SELECT id, label, type, meta, created_at FROM chat_sessions ORDER BY created_at DESC`
|
|
798
814
|
).all();
|
|
815
|
+
const sessions = rows.map((r) => ({
|
|
816
|
+
...r,
|
|
817
|
+
meta: r.meta ? JSON.parse(r.meta) : null
|
|
818
|
+
}));
|
|
799
819
|
return c.json({ sessions });
|
|
800
820
|
} catch (e) {
|
|
801
821
|
return c.json({ status: "error", message: e.message, stack: e.stack }, 500);
|
|
@@ -807,9 +827,9 @@ function createChatRoutes() {
|
|
|
807
827
|
try {
|
|
808
828
|
const db = getDb();
|
|
809
829
|
db.prepare(
|
|
810
|
-
`INSERT OR IGNORE INTO chat_sessions (id, label, type) VALUES (?, ?, ?)`
|
|
811
|
-
).run(id, body.label ?? id, body.type ?? "background");
|
|
812
|
-
return c.json({ status: "created", id });
|
|
830
|
+
`INSERT OR IGNORE INTO chat_sessions (id, label, type, meta) VALUES (?, ?, ?, ?)`
|
|
831
|
+
).run(id, body.label ?? id, body.type ?? "background", body.meta ? JSON.stringify(body.meta) : null);
|
|
832
|
+
return c.json({ status: "created", id, meta: body.meta ?? null });
|
|
813
833
|
} catch (e) {
|
|
814
834
|
return c.json({ status: "error", message: e.message }, 500);
|
|
815
835
|
}
|
|
@@ -900,6 +920,7 @@ var SessionManager = class {
|
|
|
900
920
|
eventCounter: 0,
|
|
901
921
|
label: opts.label ?? id,
|
|
902
922
|
cwd: opts.cwd ?? process.cwd(),
|
|
923
|
+
meta: opts.meta ?? null,
|
|
903
924
|
state: "idle",
|
|
904
925
|
createdAt: Date.now(),
|
|
905
926
|
lastActivityAt: Date.now()
|
|
@@ -960,6 +981,7 @@ var SessionManager = class {
|
|
|
960
981
|
alive: s.process?.alive ?? false,
|
|
961
982
|
state: s.state,
|
|
962
983
|
cwd: s.cwd,
|
|
984
|
+
meta: s.meta,
|
|
963
985
|
eventCount: s.eventCounter,
|
|
964
986
|
createdAt: s.createdAt,
|
|
965
987
|
lastActivityAt: s.lastActivityAt
|