botnote 0.1.55 → 0.2.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/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/db/migrations/0028_workspaces.sql +65 -0
- package/dist/db/migrations/0029_drop_global_uniques.sql +38 -0
- package/dist/db/schema.d.ts +215 -2
- package/dist/db/schema.js +32 -4
- package/dist/db/schema.js.map +1 -1
- package/dist/rest/routes.js +58 -58
- package/dist/rest/routes.js.map +1 -1
- package/dist/rest/server.d.ts +11 -1
- package/dist/rest/server.js +19 -3
- package/dist/rest/server.js.map +1 -1
- package/dist/service/embedding.d.ts +5 -0
- package/dist/service/embedding.js +6 -1
- package/dist/service/embedding.js.map +1 -1
- package/dist/service/embedding_settings.d.ts +4 -3
- package/dist/service/embedding_settings.js +13 -16
- package/dist/service/embedding_settings.js.map +1 -1
- package/dist/service/entities.d.ts +29 -20
- package/dist/service/entities.js +101 -60
- package/dist/service/entities.js.map +1 -1
- package/dist/service/feedback.d.ts +3 -2
- package/dist/service/feedback.js +8 -4
- package/dist/service/feedback.js.map +1 -1
- package/dist/service/opening_brief.d.ts +2 -1
- package/dist/service/opening_brief.js +6 -7
- package/dist/service/opening_brief.js.map +1 -1
- package/dist/service/projects.d.ts +6 -5
- package/dist/service/projects.js +25 -13
- package/dist/service/projects.js.map +1 -1
- package/dist/service/recurrence.d.ts +7 -6
- package/dist/service/recurrence.js +36 -14
- package/dist/service/recurrence.js.map +1 -1
- package/dist/service/scope.d.ts +14 -0
- package/dist/service/scope.js +19 -0
- package/dist/service/scope.js.map +1 -0
- package/dist/service/search.d.ts +3 -2
- package/dist/service/search.js +12 -9
- package/dist/service/search.js.map +1 -1
- package/dist/service/sessions.d.ts +7 -8
- package/dist/service/sessions.js +8 -8
- package/dist/service/sessions.js.map +1 -1
- package/dist/service/tasks.d.ts +2 -1
- package/dist/service/tasks.js +13 -6
- package/dist/service/tasks.js.map +1 -1
- package/dist/service/tokens.d.ts +7 -6
- package/dist/service/tokens.js +17 -10
- package/dist/service/tokens.js.map +1 -1
- package/dist/service/workspace_settings.d.ts +3 -2
- package/dist/service/workspace_settings.js +11 -15
- package/dist/service/workspace_settings.js.map +1 -1
- package/package.json +1 -1
package/dist/rest/server.js
CHANGED
|
@@ -10,6 +10,7 @@ import { fileURLToPath } from "node:url";
|
|
|
10
10
|
import Fastify from "fastify";
|
|
11
11
|
import { hasZodFastifySchemaValidationErrors, isResponseSerializationError, jsonSchemaTransform, serializerCompiler, validatorCompiler } from "fastify-type-provider-zod";
|
|
12
12
|
import { corsOrigins, DEFAULT_PORT, envValue } from "../config.js";
|
|
13
|
+
import { DEFAULT_SCOPE, scopeFor } from "../service/scope.js";
|
|
13
14
|
import { consumeSession } from "../service/sessions.js";
|
|
14
15
|
import { consumeToken } from "../service/tokens.js";
|
|
15
16
|
import { VERSION } from "../version.js";
|
|
@@ -33,6 +34,7 @@ function resolveWebDist(explicit) {
|
|
|
33
34
|
export async function buildServer(opts) {
|
|
34
35
|
const isProduction = process.env.NODE_ENV === "production";
|
|
35
36
|
const auth = opts.auth ?? authConfigFromEnv();
|
|
37
|
+
const defaultScope = opts.defaultScope ?? DEFAULT_SCOPE;
|
|
36
38
|
const app = Fastify({
|
|
37
39
|
logger: { level: opts.logLevel ?? "info" },
|
|
38
40
|
// Only peers listed in BOTNOTE_TRUST_PROXY may rewrite req.ip through
|
|
@@ -153,6 +155,16 @@ export async function buildServer(opts) {
|
|
|
153
155
|
req.log.error({ err }, "unhandled error");
|
|
154
156
|
return reply.code(500).send({ error: "server_error" });
|
|
155
157
|
});
|
|
158
|
+
// ----- scope -----
|
|
159
|
+
// Every request starts in the default workspace. The auth hook below
|
|
160
|
+
// narrows it to the credential's workspace when one is presented, so a
|
|
161
|
+
// route handler can always pass req.scope straight into the service layer.
|
|
162
|
+
// null (not an object literal) so every request shares one hidden-class
|
|
163
|
+
// shape; the hook right below assigns the real value before any handler.
|
|
164
|
+
app.decorateRequest("scope", null);
|
|
165
|
+
app.addHook("onRequest", async (req) => {
|
|
166
|
+
req.scope = defaultScope;
|
|
167
|
+
});
|
|
156
168
|
// ----- auth -----
|
|
157
169
|
// Every /v1 request needs a session cookie or bearer token, except a direct
|
|
158
170
|
// loopback connection when BOTNOTE_TRUST_LOCALHOST is on. Whether a request
|
|
@@ -181,22 +193,26 @@ export async function buildServer(opts) {
|
|
|
181
193
|
const cookieToken = req.cookies?.botnote_session;
|
|
182
194
|
if (cookieToken) {
|
|
183
195
|
const session = await consumeSession(opts.db, cookieToken);
|
|
184
|
-
if (session)
|
|
196
|
+
if (session) {
|
|
197
|
+
req.scope = scopeFor(session.workspaceId);
|
|
185
198
|
return;
|
|
199
|
+
}
|
|
186
200
|
}
|
|
187
201
|
// CLI / MCP path: bearer token.
|
|
188
202
|
const authHeader = req.headers.authorization;
|
|
189
203
|
if (authHeader && authHeader.startsWith("Bearer ")) {
|
|
190
204
|
const plaintext = authHeader.slice("Bearer ".length).trim();
|
|
191
205
|
const tok = await consumeToken(opts.db, plaintext);
|
|
192
|
-
if (tok)
|
|
206
|
+
if (tok) {
|
|
207
|
+
req.scope = scopeFor(tok.workspaceId);
|
|
193
208
|
return;
|
|
209
|
+
}
|
|
194
210
|
}
|
|
195
211
|
return reply.code(401).send({ error: "unauthenticated" });
|
|
196
212
|
});
|
|
197
213
|
}
|
|
198
214
|
app.log.info(describeAuthConfig(auth));
|
|
199
|
-
await registerRoutes(app, { db: opts.db, embedding: opts.embedding, auth });
|
|
215
|
+
await registerRoutes(app, { db: opts.db, embedding: opts.embedding, auth, defaultScope });
|
|
200
216
|
const webDist = resolveWebDist(opts.webDist);
|
|
201
217
|
if (webDist) {
|
|
202
218
|
await app.register(fastifyStatic, {
|
package/dist/rest/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rest/server.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,OAAsD,MAAM,SAAS,CAAC;AAC7E,OAAO,EACL,mCAAmC,EACnC,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAE3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/rest/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Database } from "../db/client.js";
|
|
2
|
+
import { type Scope } from "./scope.js";
|
|
2
3
|
import type { EmbeddingProvider } from "./types.js";
|
|
3
4
|
export declare const EMBED_MODEL = "text-embedding-3-small";
|
|
4
5
|
export declare const EMBED_DIM = 384;
|
|
@@ -23,11 +24,15 @@ export declare class EmbeddingService {
|
|
|
23
24
|
private queue;
|
|
24
25
|
private working;
|
|
25
26
|
private envApiKey;
|
|
27
|
+
/** The daemon runs one embedding worker; its provider config is read from
|
|
28
|
+
* this workspace's embedding_settings row (the default workspace today). */
|
|
29
|
+
private scope;
|
|
26
30
|
private status;
|
|
27
31
|
constructor(db: Database["db"], opts?: {
|
|
28
32
|
apiKey?: string | undefined;
|
|
29
33
|
embedFn?: EmbedFn;
|
|
30
34
|
logger?: (msg: string) => void;
|
|
35
|
+
scope?: Scope;
|
|
31
36
|
});
|
|
32
37
|
private log;
|
|
33
38
|
reloadConfig(): Promise<EmbeddingRuntimeStatus>;
|
|
@@ -3,6 +3,7 @@ import { and, asc, inArray, isNull } from "drizzle-orm";
|
|
|
3
3
|
import { entities as entitiesTable, VECTOR_DIMENSIONS } from "../db/schema.js";
|
|
4
4
|
import { DEFAULT_EMBEDDING_MODEL, DEFAULT_EMBEDDING_PROVIDER, getEmbeddingSettings, previewSecret } from "./embedding_settings.js";
|
|
5
5
|
import { setBodyVec } from "./entities.js";
|
|
6
|
+
import { DEFAULT_SCOPE } from "./scope.js";
|
|
6
7
|
export const EMBED_MODEL = DEFAULT_EMBEDDING_MODEL;
|
|
7
8
|
export const EMBED_DIM = VECTOR_DIMENSIONS;
|
|
8
9
|
export class EmbeddingService {
|
|
@@ -12,6 +13,9 @@ export class EmbeddingService {
|
|
|
12
13
|
queue = [];
|
|
13
14
|
working = false;
|
|
14
15
|
envApiKey;
|
|
16
|
+
/** The daemon runs one embedding worker; its provider config is read from
|
|
17
|
+
* this workspace's embedding_settings row (the default workspace today). */
|
|
18
|
+
scope;
|
|
15
19
|
status = {
|
|
16
20
|
enabled: false,
|
|
17
21
|
provider: DEFAULT_EMBEDDING_PROVIDER,
|
|
@@ -26,6 +30,7 @@ export class EmbeddingService {
|
|
|
26
30
|
constructor(db, opts = {}) {
|
|
27
31
|
this.db = db;
|
|
28
32
|
this.envApiKey = opts.apiKey;
|
|
33
|
+
this.scope = opts.scope ?? DEFAULT_SCOPE;
|
|
29
34
|
if (opts.embedFn) {
|
|
30
35
|
this.injected = true;
|
|
31
36
|
this.embedFn = opts.embedFn;
|
|
@@ -50,7 +55,7 @@ export class EmbeddingService {
|
|
|
50
55
|
async reloadConfig() {
|
|
51
56
|
if (this.injected)
|
|
52
57
|
return this.status;
|
|
53
|
-
const settings = await getEmbeddingSettings(this.db);
|
|
58
|
+
const settings = await getEmbeddingSettings(this.scope, this.db);
|
|
54
59
|
const settingsKey = settings.apiKey?.trim() || null;
|
|
55
60
|
const envKey = this.envApiKey?.trim() || null;
|
|
56
61
|
const apiKey = settingsKey ?? envKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/service/embedding.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,aAAa,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/service/embedding.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,aAAa,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AAGvD,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAuB,CAAC;AACnD,MAAM,CAAC,MAAM,SAAS,GAAG,iBAAiB,CAAC;AA8B3C,MAAM,OAAO,gBAAgB;IAsBjB;IArBF,OAAO,CAAiB;IACxB,QAAQ,GAAG,KAAK,CAAC;IACjB,KAAK,GAAU,EAAE,CAAC;IAClB,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,CAAqB;IACtC;iFAC6E;IACrE,KAAK,CAAQ;IACb,MAAM,GAA2B;QACvC,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,0BAA0B;QACpC,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,SAAS;QACrB,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,YACU,EAAkB,EAC1B,OAKI,EAAE;QANE,OAAE,GAAF,EAAE,CAAgB;QAQ1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG;gBACZ,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,0BAA0B;gBACpC,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,SAAS;gBACrB,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,UAAU;gBACxB,aAAa,EAAE,UAAU;gBACzB,MAAM,EAAE,UAAU;aACnB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAEO,GAAG,CAAwB;IAEnC,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAC9C,MAAM,MAAM,GAAG,WAAW,IAAI,MAAM,CAAC;QACrC,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,MAAM,QAAQ,GACZ,QAAQ,CAAC,QAAQ,KAAK,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAEjD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG;gBACZ,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE,SAAS;gBACrB,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC;gBACjC,YAAY;gBACZ,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC;gBACpC,MAAM,EAAE,UAAU;aACnB,CAAC;YACF,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG;gBACZ,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE,SAAS;gBACrB,gBAAgB,EAAE,KAAK;gBACvB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,iBAAiB;aAC1B,CAAC;YACF,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,IAAI,QAAQ,KAAK,mBAAmB,IAAI,CAAC,OAAO,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG;gBACZ,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE,SAAS;gBACrB,gBAAgB,EAAE,IAAI;gBACtB,YAAY;gBACZ,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC;gBACpC,MAAM,EAAE,kBAAkB;aAC3B,CAAC;YACF,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM;YACN,GAAG,CAAC,QAAQ,KAAK,mBAAmB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;gBACzC,KAAK;gBACL,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;YACnC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACtE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,yBAAyB,SAAS,EAAE,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,GAAG;YACZ,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,KAAK;YACL,OAAO;YACP,UAAU,EAAE,SAAS;YACrB,gBAAgB,EAAE,IAAI;YACtB,YAAY;YACZ,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC;YACpC,MAAM,EAAE,OAAO;SAChB,CAAC;QACF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,EAAU,EAAE,IAAY;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,eAAe,CAAC,CAAC;YAC3F,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE;aACvB,MAAM,CAAC;YACN,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,IAAI,EAAE,aAAa,CAAC,IAAI;SACzB,CAAC;aACD,IAAI,CAAC,aAAa,CAAC;aACnB,KAAK,CACJ,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAClF;aACA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;aACrC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEhB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3B,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;IACzD,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE;aACX,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;aAC9C,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG;gBAAE,MAAM;YAChB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;gBAClB,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,QAAQ,UAAU,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;oBAC1D,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;oBACxC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;oBACjD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Database } from "../db/client.js";
|
|
2
2
|
import { type EmbeddingSettings } from "../db/schema.js";
|
|
3
|
+
import type { Scope } from "./scope.js";
|
|
3
4
|
import type { UpdateEmbeddingSettingsInput } from "./types.js";
|
|
4
5
|
export declare const DEFAULT_EMBEDDING_PROVIDER = "openai";
|
|
5
6
|
export declare const DEFAULT_EMBEDDING_MODEL = "text-embedding-3-small";
|
|
@@ -10,6 +11,6 @@ export interface EmbeddingCoverage {
|
|
|
10
11
|
missingCount: number;
|
|
11
12
|
}
|
|
12
13
|
export declare function previewSecret(value: string | null | undefined): string | null;
|
|
13
|
-
export declare function getEmbeddingSettings(db: Database["db"]): Promise<EmbeddingSettings>;
|
|
14
|
-
export declare function updateEmbeddingSettings(db: Database["db"], input: UpdateEmbeddingSettingsInput): Promise<EmbeddingSettings>;
|
|
15
|
-
export declare function embeddingCoverage(db: Database["db"]): Promise<EmbeddingCoverage>;
|
|
14
|
+
export declare function getEmbeddingSettings(scope: Scope, db: Database["db"]): Promise<EmbeddingSettings>;
|
|
15
|
+
export declare function updateEmbeddingSettings(scope: Scope, db: Database["db"], input: UpdateEmbeddingSettingsInput): Promise<EmbeddingSettings>;
|
|
16
|
+
export declare function embeddingCoverage(scope: Scope, db: Database["db"]): Promise<EmbeddingCoverage>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { eq, sql } from "drizzle-orm";
|
|
1
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
2
2
|
import { embeddingSettings, entities, VECTOR_DIMENSIONS } from "../db/schema.js";
|
|
3
3
|
export const DEFAULT_EMBEDDING_PROVIDER = "openai";
|
|
4
4
|
export const DEFAULT_EMBEDDING_MODEL = "text-embedding-3-small";
|
|
@@ -18,35 +18,31 @@ export function previewSecret(value) {
|
|
|
18
18
|
return "configured";
|
|
19
19
|
return `${value.slice(0, 7)}...${value.slice(-4)}`;
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.limit(1);
|
|
21
|
+
function rowFilter(scope) {
|
|
22
|
+
return and(eq(embeddingSettings.id, EMBEDDING_SETTINGS_ID), eq(embeddingSettings.workspaceId, scope.workspaceId));
|
|
23
|
+
}
|
|
24
|
+
export async function getEmbeddingSettings(scope, db) {
|
|
25
|
+
const [existing] = await db.select().from(embeddingSettings).where(rowFilter(scope)).limit(1);
|
|
27
26
|
if (existing)
|
|
28
27
|
return existing;
|
|
29
28
|
await db
|
|
30
29
|
.insert(embeddingSettings)
|
|
31
30
|
.values({
|
|
32
31
|
id: EMBEDDING_SETTINGS_ID,
|
|
32
|
+
workspaceId: scope.workspaceId,
|
|
33
33
|
enabled: true,
|
|
34
34
|
provider: DEFAULT_EMBEDDING_PROVIDER,
|
|
35
35
|
model: DEFAULT_EMBEDDING_MODEL,
|
|
36
36
|
dimensions: VECTOR_DIMENSIONS
|
|
37
37
|
})
|
|
38
38
|
.onConflictDoNothing();
|
|
39
|
-
const [created] = await db
|
|
40
|
-
.select()
|
|
41
|
-
.from(embeddingSettings)
|
|
42
|
-
.where(eq(embeddingSettings.id, EMBEDDING_SETTINGS_ID))
|
|
43
|
-
.limit(1);
|
|
39
|
+
const [created] = await db.select().from(embeddingSettings).where(rowFilter(scope)).limit(1);
|
|
44
40
|
if (!created)
|
|
45
41
|
throw new Error("embedding settings row missing after insert");
|
|
46
42
|
return created;
|
|
47
43
|
}
|
|
48
|
-
export async function updateEmbeddingSettings(db, input) {
|
|
49
|
-
const current = await getEmbeddingSettings(db);
|
|
44
|
+
export async function updateEmbeddingSettings(scope, db, input) {
|
|
45
|
+
const current = await getEmbeddingSettings(scope, db);
|
|
50
46
|
const apiKey = normalizeNullable(input.apiKey);
|
|
51
47
|
const baseUrl = normalizeNullable(input.baseUrl);
|
|
52
48
|
const set = {
|
|
@@ -60,13 +56,13 @@ export async function updateEmbeddingSettings(db, input) {
|
|
|
60
56
|
const [updated] = await db
|
|
61
57
|
.update(embeddingSettings)
|
|
62
58
|
.set(set)
|
|
63
|
-
.where(
|
|
59
|
+
.where(rowFilter(scope))
|
|
64
60
|
.returning();
|
|
65
61
|
if (!updated)
|
|
66
62
|
throw new Error("embedding settings update returned no row");
|
|
67
63
|
return updated;
|
|
68
64
|
}
|
|
69
|
-
export async function embeddingCoverage(db) {
|
|
65
|
+
export async function embeddingCoverage(scope, db) {
|
|
70
66
|
const [row] = (await db.execute(sql `
|
|
71
67
|
SELECT
|
|
72
68
|
count(*)::int AS total_count,
|
|
@@ -74,6 +70,7 @@ export async function embeddingCoverage(db) {
|
|
|
74
70
|
count(*) FILTER (WHERE body_vec IS NULL)::int AS missing_count
|
|
75
71
|
FROM ${entities}
|
|
76
72
|
WHERE kind IN ('task', 'note')
|
|
73
|
+
AND workspace_id = ${scope.workspaceId}::uuid
|
|
77
74
|
AND length(trim(coalesce(title, '') || E'\n' || coalesce(body, ''))) > 0
|
|
78
75
|
`)).rows;
|
|
79
76
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding_settings.js","sourceRoot":"","sources":["../../src/service/embedding_settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding_settings.js","sourceRoot":"","sources":["../../src/service/embedding_settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +1,70 @@
|
|
|
1
1
|
import type { Database } from "../db/client.js";
|
|
2
2
|
import { type Entity, type EdgeKind } from "../db/schema.js";
|
|
3
|
+
import type { Scope } from "./scope.js";
|
|
3
4
|
import type { CreateCommentInput, GetLinksInput, LinkInput, ListTagsInput, RecentInput, UpdateInput, WriteInput } from "./types.js";
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Resolve a full UUID or a unique prefix to an entity id. A full UUID passes
|
|
7
|
+
* through without a lookup, so every caller still filters its own query by
|
|
8
|
+
* scope; prefixes are matched only inside the scope.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveEntityId(scope: Scope, db: Database["db"], idOrPrefix: string): Promise<string | null>;
|
|
11
|
+
export declare function write(scope: Scope, db: Database["db"], input: WriteInput): Promise<Entity>;
|
|
6
12
|
/**
|
|
7
13
|
* Append a comment (worklog entry) to a task or note. The comment inherits the
|
|
8
14
|
* parent's projectId so project-scoped search/recent include it, but never
|
|
9
15
|
* gets a KEY-SEQ number (the sequence trigger skips kind='comment').
|
|
10
16
|
*/
|
|
11
|
-
export declare function addComment(db: Database["db"], parentIdOrPrefix: string, input: CreateCommentInput): Promise<Entity>;
|
|
17
|
+
export declare function addComment(scope: Scope, db: Database["db"], parentIdOrPrefix: string, input: CreateCommentInput): Promise<Entity>;
|
|
12
18
|
/** Comments for one parent entity, oldest first (chronological worklog). */
|
|
13
|
-
export declare function listComments(db: Database["db"], parentIdOrPrefix: string, limit?: number): Promise<Entity[]>;
|
|
14
|
-
export declare function update(db: Database["db"], id: string, fields: UpdateInput): Promise<Entity>;
|
|
15
|
-
export declare function listRelated(db: Database["db"], parentId: string): Promise<Entity[]>;
|
|
19
|
+
export declare function listComments(scope: Scope, db: Database["db"], parentIdOrPrefix: string, limit?: number): Promise<Entity[]>;
|
|
20
|
+
export declare function update(scope: Scope, db: Database["db"], id: string, fields: UpdateInput): Promise<Entity>;
|
|
21
|
+
export declare function listRelated(scope: Scope, db: Database["db"], parentId: string): Promise<Entity[]>;
|
|
16
22
|
/**
|
|
17
23
|
* Record an explicit read of an entity. Called from the REST get-by-id and
|
|
18
24
|
* get-by-key handlers (not from internal lookups) so access stats reflect
|
|
19
25
|
* deliberate recalls; search gives frequently-recalled entities a light boost.
|
|
20
26
|
*/
|
|
21
|
-
export declare function bumpAccess(db: Database["db"], id: string): Promise<void>;
|
|
27
|
+
export declare function bumpAccess(scope: Scope, db: Database["db"], id: string): Promise<void>;
|
|
22
28
|
/**
|
|
23
29
|
* Mark `oldIdOrPrefix` as superseded by `newId` (kind='supersedes' edge from
|
|
24
30
|
* the replacement to the outdated entity). Superseded entities stay readable
|
|
25
31
|
* but are downweighted in search.
|
|
26
32
|
*/
|
|
27
|
-
export declare function markSuperseded(db: Database["db"], newId: string, oldIdOrPrefix: string): Promise<string>;
|
|
28
|
-
export declare function get(db: Database["db"], id: string): Promise<Entity | null>;
|
|
33
|
+
export declare function markSuperseded(scope: Scope, db: Database["db"], newId: string, oldIdOrPrefix: string): Promise<string>;
|
|
34
|
+
export declare function get(scope: Scope, db: Database["db"], id: string): Promise<Entity | null>;
|
|
29
35
|
/**
|
|
30
36
|
* Look up an entity by its human-readable identifier — e.g. project key `DEMO`
|
|
31
37
|
* + sequence id `12` resolves to the entity displayed as `DEMO-12`.
|
|
32
38
|
*/
|
|
33
|
-
export declare function getByKey(db: Database["db"], projectKey: string, sequenceId: number): Promise<Entity | null>;
|
|
39
|
+
export declare function getByKey(scope: Scope, db: Database["db"], projectKey: string, sequenceId: number): Promise<Entity | null>;
|
|
34
40
|
/**
|
|
35
41
|
* Soft delete: move the entity to the trash. Read paths hide trashed rows;
|
|
36
42
|
* restore() brings them back, purge()/purgeExpired() hard-delete them.
|
|
37
43
|
* Idempotent — re-deleting a trashed entity keeps its original trash time.
|
|
38
44
|
*/
|
|
39
|
-
export declare function remove(db: Database["db"], id: string): Promise<boolean>;
|
|
45
|
+
export declare function remove(scope: Scope, db: Database["db"], id: string): Promise<boolean>;
|
|
40
46
|
/** Bring a trashed entity back. Returns null when the id resolves to nothing. */
|
|
41
|
-
export declare function restore(db: Database["db"], id: string): Promise<Entity | null>;
|
|
47
|
+
export declare function restore(scope: Scope, db: Database["db"], id: string): Promise<Entity | null>;
|
|
42
48
|
/**
|
|
43
49
|
* Hard-delete a trashed entity ("delete forever"). Refuses to touch live
|
|
44
50
|
* rows — an entity must go through the trash first.
|
|
45
51
|
*/
|
|
46
|
-
export declare function purge(db: Database["db"], id: string): Promise<boolean>;
|
|
52
|
+
export declare function purge(scope: Scope, db: Database["db"], id: string): Promise<boolean>;
|
|
47
53
|
/** Trashed entities, most recently deleted first. */
|
|
48
|
-
export declare function listTrash(db: Database["db"], limit?: number): Promise<Entity[]>;
|
|
49
|
-
/**
|
|
54
|
+
export declare function listTrash(scope: Scope, db: Database["db"], limit?: number): Promise<Entity[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Hard-delete trash older than the retention window across every workspace.
|
|
57
|
+
* Daemon-level maintenance, hence no scope. Returns rows purged.
|
|
58
|
+
*/
|
|
50
59
|
export declare function purgeExpired(db: Database["db"], retentionDays: number): Promise<number>;
|
|
51
|
-
export declare function recent(db: Database["db"], input: RecentInput): Promise<Entity[]>;
|
|
52
|
-
export declare function link(db: Database["db"], input: LinkInput): Promise<{
|
|
60
|
+
export declare function recent(scope: Scope, db: Database["db"], input: RecentInput): Promise<Entity[]>;
|
|
61
|
+
export declare function link(scope: Scope, db: Database["db"], input: LinkInput): Promise<{
|
|
53
62
|
fromId: string;
|
|
54
63
|
toId: string;
|
|
55
64
|
kind: string;
|
|
56
65
|
created: boolean;
|
|
57
66
|
}>;
|
|
58
|
-
export declare function listChildren(db: Database["db"], parentId: string): Promise<Entity[]>;
|
|
67
|
+
export declare function listChildren(scope: Scope, db: Database["db"], parentId: string): Promise<Entity[]>;
|
|
59
68
|
export declare function setBodyVec(db: Database["db"], id: string, vec: number[]): Promise<void>;
|
|
60
69
|
export interface TagCount {
|
|
61
70
|
tag: string;
|
|
@@ -66,7 +75,7 @@ export interface TagCount {
|
|
|
66
75
|
* counts, ordered by count DESC then tag ASC. Pass projectId to scope to one
|
|
67
76
|
* project; omit (or pass null/undefined) for workspace-wide results.
|
|
68
77
|
*/
|
|
69
|
-
export declare function listTags(db: Database["db"], input: ListTagsInput): Promise<TagCount[]>;
|
|
78
|
+
export declare function listTags(scope: Scope, db: Database["db"], input: ListTagsInput): Promise<TagCount[]>;
|
|
70
79
|
export interface LinkResult {
|
|
71
80
|
kind: EdgeKind;
|
|
72
81
|
direction: "outgoing" | "incoming";
|
|
@@ -79,4 +88,4 @@ export interface LinkResult {
|
|
|
79
88
|
* direction='both' → union of both directions (default)
|
|
80
89
|
* Returns the OTHER endpoint entity alongside the edge kind and direction.
|
|
81
90
|
*/
|
|
82
|
-
export declare function getLinks(db: Database["db"], input: GetLinksInput): Promise<LinkResult[]>;
|
|
91
|
+
export declare function getLinks(scope: Scope, db: Database["db"], input: GetLinksInput): Promise<LinkResult[]>;
|