@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.
@@ -5,6 +5,7 @@ interface ChatSession {
5
5
  id: string;
6
6
  label: string;
7
7
  type: "main" | "background";
8
+ meta: string | null;
8
9
  created_at: string;
9
10
  }
10
11
  interface ChatMessage {
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 sessions = db.prepare(
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 sessions = db.prepare(
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sna-sdk/core",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Skills-Native Application runtime — server, providers, session management, database, and CLI",
5
5
  "type": "module",
6
6
  "bin": {