smriti 0.1.0 → 0.3.0
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/auth/credentials.d.ts +11 -0
- package/dist/auth/credentials.d.ts.map +1 -0
- package/dist/auth/credentials.js +64 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/auth/github.d.ts +48 -0
- package/dist/auth/github.d.ts.map +1 -0
- package/dist/auth/github.js +128 -0
- package/dist/auth/github.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/consolidation/index.d.ts +16 -0
- package/dist/consolidation/index.d.ts.map +1 -0
- package/dist/consolidation/index.js +109 -0
- package/dist/consolidation/index.js.map +1 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +12 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/db/search.d.ts.map +1 -1
- package/dist/db/search.js +2 -0
- package/dist/db/search.js.map +1 -1
- package/dist/db/store.d.ts +12 -0
- package/dist/db/store.d.ts.map +1 -1
- package/dist/db/store.js +59 -2
- package/dist/db/store.js.map +1 -1
- package/dist/index.js +179 -12
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +103 -0
- package/dist/server.js.map +1 -1
- package/dist/sync/export.d.ts +9 -0
- package/dist/sync/export.d.ts.map +1 -0
- package/dist/sync/export.js +99 -0
- package/dist/sync/export.js.map +1 -0
- package/dist/sync/git.d.ts +10 -0
- package/dist/sync/git.d.ts.map +1 -0
- package/dist/sync/git.js +157 -0
- package/dist/sync/git.js.map +1 -0
- package/dist/sync/import.d.ts +9 -0
- package/dist/sync/import.d.ts.map +1 -0
- package/dist/sync/import.js +107 -0
- package/dist/sync/import.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function saveGitHubToken(token: string, username: string, repoFullName: string): void;
|
|
2
|
+
export declare function getGitHubToken(): string | null;
|
|
3
|
+
export declare function getGitHubUsername(): string | null;
|
|
4
|
+
export declare function getSyncRepo(): string | null;
|
|
5
|
+
export declare function clearCredentials(): void;
|
|
6
|
+
export declare function getAuthStatus(): {
|
|
7
|
+
authenticated: boolean;
|
|
8
|
+
username: string | null;
|
|
9
|
+
sync_repo: string | null;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AA8CA,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,IAAI,CAMN;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED,wBAAgB,aAAa,IAAI;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAOA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential store for Smriti.
|
|
3
|
+
* Stores tokens in ~/.smriti/credentials (chmod 600) —
|
|
4
|
+
* same pattern as ~/.aws/credentials, ~/.git-credentials.
|
|
5
|
+
* Abstracted behind an interface so we can swap in OS keychain later.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, writeFileSync, existsSync, unlinkSync, chmodSync, } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { getSmritiDir, ensureSmritiDir } from "../config.js";
|
|
10
|
+
const CREDS_FILENAME = "credentials";
|
|
11
|
+
function credsPath() {
|
|
12
|
+
return join(getSmritiDir(), CREDS_FILENAME);
|
|
13
|
+
}
|
|
14
|
+
function read() {
|
|
15
|
+
const p = credsPath();
|
|
16
|
+
if (!existsSync(p))
|
|
17
|
+
return {};
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(readFileSync(p, "utf-8"));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function write(store) {
|
|
26
|
+
ensureSmritiDir();
|
|
27
|
+
const p = credsPath();
|
|
28
|
+
writeFileSync(p, JSON.stringify(store, null, 2), { encoding: "utf-8", mode: 0o600 });
|
|
29
|
+
// Enforce strict perms (belt + suspenders)
|
|
30
|
+
try {
|
|
31
|
+
chmodSync(p, 0o600);
|
|
32
|
+
}
|
|
33
|
+
catch { /* ignore on Windows */ }
|
|
34
|
+
}
|
|
35
|
+
export function saveGitHubToken(token, username, repoFullName) {
|
|
36
|
+
const store = read();
|
|
37
|
+
store.github_token = token;
|
|
38
|
+
store.github_username = username;
|
|
39
|
+
store.sync_repo = repoFullName;
|
|
40
|
+
write(store);
|
|
41
|
+
}
|
|
42
|
+
export function getGitHubToken() {
|
|
43
|
+
return read().github_token ?? null;
|
|
44
|
+
}
|
|
45
|
+
export function getGitHubUsername() {
|
|
46
|
+
return read().github_username ?? null;
|
|
47
|
+
}
|
|
48
|
+
export function getSyncRepo() {
|
|
49
|
+
return read().sync_repo ?? null;
|
|
50
|
+
}
|
|
51
|
+
export function clearCredentials() {
|
|
52
|
+
const p = credsPath();
|
|
53
|
+
if (existsSync(p))
|
|
54
|
+
unlinkSync(p);
|
|
55
|
+
}
|
|
56
|
+
export function getAuthStatus() {
|
|
57
|
+
const store = read();
|
|
58
|
+
return {
|
|
59
|
+
authenticated: !!store.github_token,
|
|
60
|
+
username: store.github_username ?? null,
|
|
61
|
+
sync_repo: store.sync_repo ?? null,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,UAAU,EACV,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,cAAc,GAAG,aAAa,CAAC;AAErC,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,cAAc,CAAC,CAAC;AAC9C,CAAC;AAQD,SAAS,IAAI;IACX,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAoB,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,KAAsB;IACnC,eAAe,EAAE,CAAC;IAClB,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IACtB,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,2CAA2C;IAC3C,IAAI,CAAC;QAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,QAAgB,EAChB,YAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;IACrB,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC3B,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC;IACjC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;IAC/B,KAAK,CAAC,KAAK,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,EAAE,CAAC,YAAY,IAAI,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,EAAE,CAAC,eAAe,IAAI,IAAI,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,CAAC,GAAG,SAAS,EAAE,CAAC;IACtB,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa;IAK3B,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;IACrB,OAAO;QACL,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;QACnC,QAAQ,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;QACvC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub API client for Smriti sync.
|
|
3
|
+
* Uses fetch (Node 18+) — no extra dependencies.
|
|
4
|
+
* Token scopes required: repo (create/push private repos)
|
|
5
|
+
*/
|
|
6
|
+
export interface DeviceCodeResponse {
|
|
7
|
+
device_code: string;
|
|
8
|
+
user_code: string;
|
|
9
|
+
verification_uri: string;
|
|
10
|
+
expires_in: number;
|
|
11
|
+
interval: number;
|
|
12
|
+
}
|
|
13
|
+
/** Step 1: Request a device code from GitHub */
|
|
14
|
+
export declare function requestDeviceCode(): Promise<DeviceCodeResponse>;
|
|
15
|
+
export type TokenPollResult = {
|
|
16
|
+
status: "complete";
|
|
17
|
+
token: string;
|
|
18
|
+
} | {
|
|
19
|
+
status: "pending";
|
|
20
|
+
} | {
|
|
21
|
+
status: "expired";
|
|
22
|
+
} | {
|
|
23
|
+
status: "error";
|
|
24
|
+
message: string;
|
|
25
|
+
};
|
|
26
|
+
/** Step 2: Poll until user completes browser auth */
|
|
27
|
+
export declare function pollForToken(deviceCode: string, intervalSec: number): Promise<string>;
|
|
28
|
+
export declare function hasClientId(): boolean;
|
|
29
|
+
export interface GitHubUser {
|
|
30
|
+
login: string;
|
|
31
|
+
name: string | null;
|
|
32
|
+
email: string | null;
|
|
33
|
+
}
|
|
34
|
+
export declare function getAuthenticatedUser(token: string): Promise<GitHubUser>;
|
|
35
|
+
export interface SyncRepo {
|
|
36
|
+
full_name: string;
|
|
37
|
+
clone_url: string;
|
|
38
|
+
html_url: string;
|
|
39
|
+
private: boolean;
|
|
40
|
+
}
|
|
41
|
+
export declare function ensureSyncRepo(token: string, username: string): Promise<SyncRepo>;
|
|
42
|
+
/**
|
|
43
|
+
* Build an authenticated HTTPS clone URL.
|
|
44
|
+
* Format: https://{username}:{token}@github.com/{owner}/{repo}.git
|
|
45
|
+
* This avoids SSH key setup entirely.
|
|
46
|
+
*/
|
|
47
|
+
export declare function authenticatedCloneUrl(token: string, username: string, repoFullName: string): string;
|
|
48
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/auth/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gDAAgD;AAChD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAsBrE;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,qDAAqD;AACrD,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAmBD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQ7E;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+BvF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnG"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub API client for Smriti sync.
|
|
3
|
+
* Uses fetch (Node 18+) — no extra dependencies.
|
|
4
|
+
* Token scopes required: repo (create/push private repos)
|
|
5
|
+
*/
|
|
6
|
+
const GITHUB_API = "https://api.github.com";
|
|
7
|
+
const SYNC_REPO_NAME = "smriti-memories";
|
|
8
|
+
// Register at: https://github.com/settings/developers → OAuth Apps
|
|
9
|
+
// Enable "Device Flow" on the app. Client ID is public — no secret needed.
|
|
10
|
+
// Override with SMRITI_CLIENT_ID env var for forks/custom deployments.
|
|
11
|
+
const OAUTH_CLIENT_ID = process.env["SMRITI_CLIENT_ID"] ?? "Ov23li6kZdAWOlq402bQ";
|
|
12
|
+
/** Step 1: Request a device code from GitHub */
|
|
13
|
+
export async function requestDeviceCode() {
|
|
14
|
+
const res = await fetch("https://github.com/login/device/code", {
|
|
15
|
+
method: "POST",
|
|
16
|
+
headers: {
|
|
17
|
+
Accept: "application/json",
|
|
18
|
+
"Content-Type": "application/json",
|
|
19
|
+
},
|
|
20
|
+
body: JSON.stringify({
|
|
21
|
+
client_id: OAUTH_CLIENT_ID,
|
|
22
|
+
scope: "repo",
|
|
23
|
+
}),
|
|
24
|
+
});
|
|
25
|
+
if (!res.ok) {
|
|
26
|
+
throw new Error(`GitHub device code request failed: ${res.status} ${await res.text()}`);
|
|
27
|
+
}
|
|
28
|
+
const data = await res.json();
|
|
29
|
+
if (data.error) {
|
|
30
|
+
throw new Error(`GitHub error: ${data.error}`);
|
|
31
|
+
}
|
|
32
|
+
return data;
|
|
33
|
+
}
|
|
34
|
+
/** Step 2: Poll until user completes browser auth */
|
|
35
|
+
export async function pollForToken(deviceCode, intervalSec) {
|
|
36
|
+
const deadline = Date.now() + 10 * 60 * 1000; // 10 min max
|
|
37
|
+
while (Date.now() < deadline) {
|
|
38
|
+
await new Promise(r => setTimeout(r, intervalSec * 1000));
|
|
39
|
+
const res = await fetch("https://github.com/login/oauth/access_token", {
|
|
40
|
+
method: "POST",
|
|
41
|
+
headers: {
|
|
42
|
+
Accept: "application/json",
|
|
43
|
+
"Content-Type": "application/json",
|
|
44
|
+
},
|
|
45
|
+
body: JSON.stringify({
|
|
46
|
+
client_id: OAUTH_CLIENT_ID,
|
|
47
|
+
device_code: deviceCode,
|
|
48
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
49
|
+
}),
|
|
50
|
+
});
|
|
51
|
+
const data = await res.json();
|
|
52
|
+
if (data.access_token)
|
|
53
|
+
return data.access_token;
|
|
54
|
+
if (data.error === "authorization_pending")
|
|
55
|
+
continue;
|
|
56
|
+
if (data.error === "slow_down") {
|
|
57
|
+
await new Promise(r => setTimeout(r, 5000));
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (data.error === "expired_token")
|
|
61
|
+
throw new Error("Device code expired. Run smriti auth again.");
|
|
62
|
+
if (data.error === "access_denied")
|
|
63
|
+
throw new Error("Access denied by user.");
|
|
64
|
+
if (data.error)
|
|
65
|
+
throw new Error(`GitHub error: ${data.error}`);
|
|
66
|
+
}
|
|
67
|
+
throw new Error("Auth timed out. Run smriti auth again.");
|
|
68
|
+
}
|
|
69
|
+
export function hasClientId() {
|
|
70
|
+
return OAUTH_CLIENT_ID !== "Ov23liYOUR_CLIENT_ID_HERE";
|
|
71
|
+
}
|
|
72
|
+
async function ghFetch(path, token, opts = {}) {
|
|
73
|
+
return fetch(`${GITHUB_API}${path}`, {
|
|
74
|
+
...opts,
|
|
75
|
+
headers: {
|
|
76
|
+
Authorization: `Bearer ${token}`,
|
|
77
|
+
Accept: "application/vnd.github+json",
|
|
78
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
79
|
+
"Content-Type": "application/json",
|
|
80
|
+
...(opts.headers ?? {}),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export async function getAuthenticatedUser(token) {
|
|
85
|
+
const res = await ghFetch("/user", token);
|
|
86
|
+
if (!res.ok) {
|
|
87
|
+
const body = await res.text();
|
|
88
|
+
throw new Error(`GitHub auth failed (${res.status}): ${body}`);
|
|
89
|
+
}
|
|
90
|
+
const data = (await res.json());
|
|
91
|
+
return { login: data.login, name: data.name ?? null, email: data.email ?? null };
|
|
92
|
+
}
|
|
93
|
+
export async function ensureSyncRepo(token, username) {
|
|
94
|
+
// Check if repo already exists
|
|
95
|
+
const checkRes = await ghFetch(`/repos/${username}/${SYNC_REPO_NAME}`, token);
|
|
96
|
+
if (checkRes.ok) {
|
|
97
|
+
const repo = (await checkRes.json());
|
|
98
|
+
return repo;
|
|
99
|
+
}
|
|
100
|
+
if (checkRes.status !== 404) {
|
|
101
|
+
throw new Error(`GitHub API error: ${checkRes.status} ${await checkRes.text()}`);
|
|
102
|
+
}
|
|
103
|
+
// Create the repo
|
|
104
|
+
const createRes = await ghFetch("/user/repos", token, {
|
|
105
|
+
method: "POST",
|
|
106
|
+
body: JSON.stringify({
|
|
107
|
+
name: SYNC_REPO_NAME,
|
|
108
|
+
description: "Smriti persistent memory sync — auto-managed by npx smriti",
|
|
109
|
+
private: true,
|
|
110
|
+
auto_init: true,
|
|
111
|
+
}),
|
|
112
|
+
});
|
|
113
|
+
if (!createRes.ok) {
|
|
114
|
+
throw new Error(`Failed to create sync repo: ${createRes.status} ${await createRes.text()}`);
|
|
115
|
+
}
|
|
116
|
+
const repo = (await createRes.json());
|
|
117
|
+
console.log(`✅ Created private repo: ${repo.html_url}`);
|
|
118
|
+
return repo;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Build an authenticated HTTPS clone URL.
|
|
122
|
+
* Format: https://{username}:{token}@github.com/{owner}/{repo}.git
|
|
123
|
+
* This avoids SSH key setup entirely.
|
|
124
|
+
*/
|
|
125
|
+
export function authenticatedCloneUrl(token, username, repoFullName) {
|
|
126
|
+
return `https://${username}:${token}@github.com/${repoFullName}.git`;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/auth/github.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -11,6 +11,11 @@ export interface SmritiConfig {
|
|
|
11
11
|
transport: "stdio" | "http";
|
|
12
12
|
port: number;
|
|
13
13
|
};
|
|
14
|
+
sync: {
|
|
15
|
+
export_dir: string;
|
|
16
|
+
repo_path: string | null;
|
|
17
|
+
auto_sync_hours: number | null;
|
|
18
|
+
};
|
|
14
19
|
}
|
|
15
20
|
export declare function ensureSmritiDir(): void;
|
|
16
21
|
export declare function loadConfig(): SmritiConfig;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC;KAC3B,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,EAAE;QACJ,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;KAChC,CAAC;CACH;AAyBD,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED,wBAAgB,UAAU,IAAI,YAAY,CAazC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
package/dist/config.js
CHANGED
|
@@ -16,6 +16,11 @@ const DEFAULT_CONFIG = {
|
|
|
16
16
|
transport: "stdio",
|
|
17
17
|
port: 3838,
|
|
18
18
|
},
|
|
19
|
+
sync: {
|
|
20
|
+
export_dir: join(SMRITI_DIR, "export"),
|
|
21
|
+
repo_path: null,
|
|
22
|
+
auto_sync_hours: null,
|
|
23
|
+
},
|
|
19
24
|
};
|
|
20
25
|
export function ensureSmritiDir() {
|
|
21
26
|
if (!existsSync(SMRITI_DIR)) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAsBlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,cAAc,GAAiB;IACnC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;IACrC,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,yBAAyB;KACjC;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO;KAClB;IACD,MAAM,EAAE;QACN,SAAS,EAAE,OAAO;QAClB,IAAI,EAAE,IAAI;KACX;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC;QACtC,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,eAAe,EAAE,CAAC;IAClB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;YACxD,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { EmbeddingEngine } from "../embedding/engine.js";
|
|
3
|
+
export interface ConsolidationResult {
|
|
4
|
+
merged: number;
|
|
5
|
+
promoted: number;
|
|
6
|
+
archived: number;
|
|
7
|
+
groups: Array<{
|
|
8
|
+
summary: string;
|
|
9
|
+
source_ids: string[];
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare function consolidateMemories(db: Database.Database, embedder: EmbeddingEngine, opts?: {
|
|
13
|
+
dry_run?: boolean;
|
|
14
|
+
days?: number;
|
|
15
|
+
}): Promise<ConsolidationResult>;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/consolidation/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC1D;AA0BD,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,eAAe,EACzB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,mBAAmB,CAAC,CA+F9B"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { getAllThoughts, insertThought, archiveThoughts, updateThoughtTier } from "../db/store.js";
|
|
2
|
+
import { vectorSearch } from "../db/search.js";
|
|
3
|
+
import { RulesExtractor } from "../extraction/rules.js";
|
|
4
|
+
const SIMILARITY_THRESHOLD = 0.88;
|
|
5
|
+
const MIN_GROUP_SIZE = 3;
|
|
6
|
+
const STALE_DAYS = 30;
|
|
7
|
+
/** Cosine similarity between two Float32Arrays */
|
|
8
|
+
function cosineSim(a, b) {
|
|
9
|
+
let dot = 0, normA = 0, normB = 0;
|
|
10
|
+
for (let i = 0; i < a.length; i++) {
|
|
11
|
+
dot += a[i] * b[i];
|
|
12
|
+
normA += a[i] * a[i];
|
|
13
|
+
normB += b[i] * b[i];
|
|
14
|
+
}
|
|
15
|
+
return dot / (Math.sqrt(normA) * Math.sqrt(normB) + 1e-8);
|
|
16
|
+
}
|
|
17
|
+
/** Summarise a group of thoughts into one representative sentence */
|
|
18
|
+
function summariseGroup(thoughts) {
|
|
19
|
+
// Heuristic: pick the longest thought as the base, then append unique topics
|
|
20
|
+
const base = [...thoughts].sort((a, b) => b.text.length - a.text.length)[0];
|
|
21
|
+
const allTopics = [...new Set(thoughts.flatMap(t => t.topics))].slice(0, 5);
|
|
22
|
+
const topicSuffix = allTopics.length > 0 ? ` [Topics: ${allTopics.join(", ")}]` : "";
|
|
23
|
+
return base.text.trim() + topicSuffix;
|
|
24
|
+
}
|
|
25
|
+
export async function consolidateMemories(db, embedder, opts = {}) {
|
|
26
|
+
const dry = opts.dry_run ?? false;
|
|
27
|
+
const since = new Date(Date.now() - (opts.days ?? 7) * 86400_000).toISOString();
|
|
28
|
+
// 1. Get recent working thoughts
|
|
29
|
+
const thoughts = getAllThoughts(db, { tier: "working", since });
|
|
30
|
+
if (thoughts.length < MIN_GROUP_SIZE) {
|
|
31
|
+
return { merged: 0, promoted: 0, archived: 0, groups: [] };
|
|
32
|
+
}
|
|
33
|
+
// 2. Embed all thoughts (batch)
|
|
34
|
+
const embeddings = await Promise.all(thoughts.map(t => embedder.embed(t.text)));
|
|
35
|
+
// 3. Greedy grouping by similarity
|
|
36
|
+
const used = new Set();
|
|
37
|
+
const groups = [];
|
|
38
|
+
for (let i = 0; i < thoughts.length; i++) {
|
|
39
|
+
if (used.has(i))
|
|
40
|
+
continue;
|
|
41
|
+
const group = [i];
|
|
42
|
+
for (let j = i + 1; j < thoughts.length; j++) {
|
|
43
|
+
if (used.has(j))
|
|
44
|
+
continue;
|
|
45
|
+
if (cosineSim(embeddings[i], embeddings[j]) >= SIMILARITY_THRESHOLD) {
|
|
46
|
+
group.push(j);
|
|
47
|
+
used.add(j);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (group.length >= MIN_GROUP_SIZE) {
|
|
51
|
+
group.forEach(idx => used.add(idx));
|
|
52
|
+
groups.push({ indices: group });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const extractor = new RulesExtractor();
|
|
56
|
+
const mergedGroups = [];
|
|
57
|
+
let mergedCount = 0;
|
|
58
|
+
let archivedCount = 0;
|
|
59
|
+
// 4. Merge each group
|
|
60
|
+
for (const group of groups) {
|
|
61
|
+
const groupThoughts = group.indices.map(i => thoughts[i]);
|
|
62
|
+
const summary = summariseGroup(groupThoughts);
|
|
63
|
+
const sourceIds = groupThoughts.map(t => t.id);
|
|
64
|
+
if (!dry) {
|
|
65
|
+
const metadata = extractor.extract(summary);
|
|
66
|
+
metadata.type = "insight";
|
|
67
|
+
const embedding = await embedder.embed(summary);
|
|
68
|
+
insertThought(db, summary, embedding, {
|
|
69
|
+
...metadata,
|
|
70
|
+
tier: "long_term",
|
|
71
|
+
consolidated_from: sourceIds,
|
|
72
|
+
source: "consolidation",
|
|
73
|
+
});
|
|
74
|
+
archivedCount += archiveThoughts(db, sourceIds);
|
|
75
|
+
mergedCount++;
|
|
76
|
+
}
|
|
77
|
+
mergedGroups.push({ summary, source_ids: sourceIds });
|
|
78
|
+
}
|
|
79
|
+
// 5. Promote well-connected non-grouped working thoughts → long_term
|
|
80
|
+
const staleDate = new Date(Date.now() - STALE_DAYS * 86400_000).toISOString();
|
|
81
|
+
const staleThoughts = getAllThoughts(db, { tier: "working" }).filter(t => t.created_at < staleDate);
|
|
82
|
+
let promotedCount = 0;
|
|
83
|
+
for (const t of staleThoughts) {
|
|
84
|
+
if (!dry) {
|
|
85
|
+
// Check if this thought has semantic neighbours (suggests it's important)
|
|
86
|
+
const emb = await embedder.embed(t.text);
|
|
87
|
+
const neighbours = vectorSearch(db, emb, { limit: 3 });
|
|
88
|
+
const hasNeighbours = neighbours.filter(n => n.thought.id !== t.id && n.score > 0.75).length >= 2;
|
|
89
|
+
if (hasNeighbours) {
|
|
90
|
+
updateThoughtTier(db, t.id, "long_term");
|
|
91
|
+
promotedCount++;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
archiveThoughts(db, [t.id]);
|
|
95
|
+
archivedCount++;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
promotedCount++; // dry-run estimate
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
merged: mergedCount,
|
|
104
|
+
promoted: promotedCount,
|
|
105
|
+
archived: archivedCount,
|
|
106
|
+
groups: mergedGroups,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/consolidation/index.ts"],"names":[],"mappings":"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"}
|
package/dist/db/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAsD9D"}
|
package/dist/db/schema.js
CHANGED
|
@@ -16,6 +16,8 @@ export function initDatabase(dbPath) {
|
|
|
16
16
|
topics TEXT NOT NULL DEFAULT '[]',
|
|
17
17
|
actions TEXT NOT NULL DEFAULT '[]',
|
|
18
18
|
sentiment TEXT NOT NULL DEFAULT 'neutral',
|
|
19
|
+
tier TEXT NOT NULL DEFAULT 'working',
|
|
20
|
+
consolidated_from TEXT NOT NULL DEFAULT '[]',
|
|
19
21
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
20
22
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
21
23
|
);
|
|
@@ -23,6 +25,16 @@ export function initDatabase(dbPath) {
|
|
|
23
25
|
CREATE INDEX IF NOT EXISTS idx_thoughts_type ON thoughts(type);
|
|
24
26
|
CREATE INDEX IF NOT EXISTS idx_thoughts_created ON thoughts(created_at);
|
|
25
27
|
`);
|
|
28
|
+
// v0.2 migration: add tier + consolidated_from columns if they don't exist
|
|
29
|
+
const cols = db.prepare("PRAGMA table_info(thoughts)").all().map(c => c.name);
|
|
30
|
+
if (!cols.includes("tier")) {
|
|
31
|
+
db.exec("ALTER TABLE thoughts ADD COLUMN tier TEXT NOT NULL DEFAULT 'working'");
|
|
32
|
+
}
|
|
33
|
+
if (!cols.includes("consolidated_from")) {
|
|
34
|
+
db.exec("ALTER TABLE thoughts ADD COLUMN consolidated_from TEXT NOT NULL DEFAULT '[]'");
|
|
35
|
+
}
|
|
36
|
+
// Create tier index after migration (column guaranteed to exist)
|
|
37
|
+
db.exec("CREATE INDEX IF NOT EXISTS idx_thoughts_tier ON thoughts(tier)");
|
|
26
38
|
// Create virtual table for vector search if it doesn't exist
|
|
27
39
|
const vtableExists = db
|
|
28
40
|
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='thought_vectors'")
|
package/dist/db/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC,CAAC,mBAAmB;AAErD,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnB,EAAE,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC,CAAC,mBAAmB;AAErD,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;GAmBP,CAAC,CAAC;IAEH,2EAA2E;IAC3E,MAAM,IAAI,GAAI,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACxC,EAAE,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC1F,CAAC;IAED,iEAAiE;IACjE,EAAE,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IAE1E,6DAA6D;IAC7D,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CACN,8EAA8E,CAC/E;SACA,GAAG,EAAE,CAAC;IAET,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,IAAI,CAAC;;0BAEc,aAAa;;KAElC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/dist/db/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/db/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/db/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAiB1C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,cAAc,EAAE,YAAY,EAC5B,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACA,YAAY,EAAE,CAiDhB"}
|
package/dist/db/search.js
CHANGED
|
@@ -25,9 +25,11 @@ export function vectorSearch(db, queryEmbedding, opts) {
|
|
|
25
25
|
results.push({
|
|
26
26
|
thought: {
|
|
27
27
|
...row,
|
|
28
|
+
tier: (row.tier ?? "working"),
|
|
28
29
|
people: JSON.parse(row.people),
|
|
29
30
|
topics: JSON.parse(row.topics),
|
|
30
31
|
actions: JSON.parse(row.actions),
|
|
32
|
+
consolidated_from: JSON.parse(row.consolidated_from ?? "[]"),
|
|
31
33
|
},
|
|
32
34
|
distance: vr.distance,
|
|
33
35
|
score: Math.round(Math.max(0, 1 / (1 + vr.distance)) * 100) / 100,
|
package/dist/db/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/db/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/db/search.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,YAAY,CAC1B,EAAqB,EACrB,cAA4B,EAC5B,IAIC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAE9B,0CAA0C;IAC1C,MAAM,UAAU,GAAG,EAAE;SAClB,OAAO,CACN;;;;eAIS,CACV;SACA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAGjD,CAAC;IAEJ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,EAAE;aACX,OAAO,CAAC,wCAAwC,CAAC;aACjD,GAAG,CAAC,EAAE,CAAC,KAAK,CAA2B,CAAC;QAE3C,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,gBAAgB;QAChB,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;YAAE,SAAS;QACxD,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,SAAS;QAElD,OAAO,CAAC,IAAI,CAAC;YACX,OAAO,EAAE;gBACP,GAAG,GAAG;gBACN,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS,CAAqC;gBACjE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAa;gBAC1C,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAa;gBAC1C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAa;gBAC5C,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAa;aACzE;YACD,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;SAClE,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/db/store.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type Database from "better-sqlite3";
|
|
2
|
+
export type ThoughtTier = "working" | "long_term" | "archived";
|
|
2
3
|
export interface Thought {
|
|
3
4
|
id: string;
|
|
4
5
|
text: string;
|
|
@@ -8,6 +9,8 @@ export interface Thought {
|
|
|
8
9
|
topics: string[];
|
|
9
10
|
actions: string[];
|
|
10
11
|
sentiment: string;
|
|
12
|
+
tier: ThoughtTier;
|
|
13
|
+
consolidated_from: string[];
|
|
11
14
|
created_at: string;
|
|
12
15
|
updated_at: string;
|
|
13
16
|
}
|
|
@@ -18,7 +21,15 @@ export declare function insertThought(db: Database.Database, text: string, embed
|
|
|
18
21
|
topics?: string[];
|
|
19
22
|
actions?: string[];
|
|
20
23
|
sentiment?: string;
|
|
24
|
+
tier?: ThoughtTier;
|
|
25
|
+
consolidated_from?: string[];
|
|
21
26
|
}): Thought;
|
|
27
|
+
export declare function updateThoughtTier(db: Database.Database, id: string, tier: ThoughtTier): boolean;
|
|
28
|
+
export declare function archiveThoughts(db: Database.Database, ids: string[]): number;
|
|
29
|
+
export declare function getAllThoughts(db: Database.Database, opts?: {
|
|
30
|
+
tier?: ThoughtTier | "active";
|
|
31
|
+
since?: string;
|
|
32
|
+
}): Thought[];
|
|
22
33
|
export declare function getThought(db: Database.Database, id: string): Thought | null;
|
|
23
34
|
export declare function deleteThought(db: Database.Database, id: string): boolean;
|
|
24
35
|
export declare function getRecentThoughts(db: Database.Database, opts: {
|
|
@@ -27,6 +38,7 @@ export declare function getRecentThoughts(db: Database.Database, opts: {
|
|
|
27
38
|
topic?: string;
|
|
28
39
|
person?: string;
|
|
29
40
|
limit?: number;
|
|
41
|
+
tier?: ThoughtTier | "active";
|
|
30
42
|
}): Thought[];
|
|
31
43
|
export declare function getStats(db: Database.Database, period: "week" | "month" | "all"): {
|
|
32
44
|
total: number;
|
package/dist/db/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/db/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/db/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AA4BD,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,GACA,OAAO,CA2CT;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,WAAW,GAChB,OAAO,CAMT;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAW5E;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,EAAE,CAoBX;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,GACT,OAAO,GAAG,IAAI,CAKhB;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAOxE;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;CAC/B,GACA,OAAO,EAAE,CA0CX;AAED,wBAAgB,QAAQ,CACtB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAC/B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC/B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB,CAyDA"}
|