@grackle-ai/database 0.73.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/README.md +34 -0
- package/dist/credential-providers.d.ts +41 -0
- package/dist/credential-providers.d.ts.map +1 -0
- package/dist/credential-providers.js +97 -0
- package/dist/credential-providers.js.map +1 -0
- package/dist/crypto.d.ts +5 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +75 -0
- package/dist/crypto.js.map +1 -0
- package/dist/db-seed.d.ts +16 -0
- package/dist/db-seed.d.ts.map +1 -0
- package/dist/db-seed.js +176 -0
- package/dist/db-seed.js.map +1 -0
- package/dist/db.d.ts +43 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +478 -0
- package/dist/db.js.map +1 -0
- package/dist/env-registry.d.ts +29 -0
- package/dist/env-registry.d.ts.map +1 -0
- package/dist/env-registry.js +78 -0
- package/dist/env-registry.js.map +1 -0
- package/dist/event-store.d.ts +19 -0
- package/dist/event-store.d.ts.map +1 -0
- package/dist/event-store.js +16 -0
- package/dist/event-store.js.map +1 -0
- package/dist/finding-store.d.ts +7 -0
- package/dist/finding-store.d.ts.map +1 -0
- package/dist/finding-store.js +45 -0
- package/dist/finding-store.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/json-helpers.d.ts +7 -0
- package/dist/json-helpers.d.ts.map +1 -0
- package/dist/json-helpers.js +22 -0
- package/dist/json-helpers.js.map +1 -0
- package/dist/paths.d.ts +7 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +12 -0
- package/dist/paths.js.map +1 -0
- package/dist/persona-store.d.ts +15 -0
- package/dist/persona-store.d.ts.map +1 -0
- package/dist/persona-store.js +57 -0
- package/dist/persona-store.js.map +1 -0
- package/dist/schema.d.ts +1784 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +152 -0
- package/dist/schema.js.map +1 -0
- package/dist/session-store.d.ts +57 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +204 -0
- package/dist/session-store.js.map +1 -0
- package/dist/settings-store.d.ts +14 -0
- package/dist/settings-store.d.ts.map +1 -0
- package/dist/settings-store.js +30 -0
- package/dist/settings-store.js.map +1 -0
- package/dist/task-store.d.ts +71 -0
- package/dist/task-store.d.ts.map +1 -0
- package/dist/task-store.js +301 -0
- package/dist/task-store.js.map +1 -0
- package/dist/test-db.d.ts +13 -0
- package/dist/test-db.d.ts.map +1 -0
- package/dist/test-db.js +14 -0
- package/dist/test-db.js.map +1 -0
- package/dist/token-store.d.ts +25 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +58 -0
- package/dist/token-store.js.map +1 -0
- package/dist/utils/slugify.d.ts +20 -0
- package/dist/utils/slugify.d.ts.map +1 -0
- package/dist/utils/slugify.js +22 -0
- package/dist/utils/slugify.js.map +1 -0
- package/dist/workspace-store.d.ts +29 -0
- package/dist/workspace-store.d.ts.map +1 -0
- package/dist/workspace-store.js +74 -0
- package/dist/workspace-store.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type FindingRow } from "./schema.js";
|
|
2
|
+
export type { FindingRow };
|
|
3
|
+
/** Insert a new finding record. */
|
|
4
|
+
export declare function postFinding(id: string, workspaceId: string, taskId: string, sessionId: string, category: string, title: string, content: string, tags: string[]): void;
|
|
5
|
+
/** Query findings for a workspace, optionally filtering by categories and tags. */
|
|
6
|
+
export declare function queryFindings(workspaceId: string, categories?: string[], tags?: string[], limit?: number): FindingRow[];
|
|
7
|
+
//# sourceMappingURL=finding-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-store.d.ts","sourceRoot":"","sources":["../src/finding-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIxD,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,mCAAmC;AACnC,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GACb,IAAI,CAWN;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,KAAK,CAAC,EAAE,MAAM,GACb,UAAU,EAAE,CA8Bd"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import db from "./db.js";
|
|
2
|
+
import { findings } from "./schema.js";
|
|
3
|
+
import { eq, desc, sql, and } from "drizzle-orm";
|
|
4
|
+
import { safeParseJsonArray } from "./json-helpers.js";
|
|
5
|
+
/** Insert a new finding record. */
|
|
6
|
+
export function postFinding(id, workspaceId, taskId, sessionId, category, title, content, tags) {
|
|
7
|
+
db.insert(findings).values({
|
|
8
|
+
id,
|
|
9
|
+
workspaceId,
|
|
10
|
+
taskId,
|
|
11
|
+
sessionId,
|
|
12
|
+
category,
|
|
13
|
+
title,
|
|
14
|
+
content,
|
|
15
|
+
tags: JSON.stringify(tags),
|
|
16
|
+
}).run();
|
|
17
|
+
}
|
|
18
|
+
/** Query findings for a workspace, optionally filtering by categories and tags. */
|
|
19
|
+
export function queryFindings(workspaceId, categories, tags, limit) {
|
|
20
|
+
const maxResults = Math.min(limit || 50, 100);
|
|
21
|
+
let results;
|
|
22
|
+
if (categories && categories.length > 0) {
|
|
23
|
+
results = db.select().from(findings)
|
|
24
|
+
.where(and(eq(findings.workspaceId, workspaceId), sql `${findings.category} IN (SELECT value FROM json_each(${JSON.stringify(categories)}))`))
|
|
25
|
+
.orderBy(desc(findings.createdAt))
|
|
26
|
+
.limit(maxResults)
|
|
27
|
+
.all();
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
results = db.select().from(findings)
|
|
31
|
+
.where(eq(findings.workspaceId, workspaceId))
|
|
32
|
+
.orderBy(desc(findings.createdAt))
|
|
33
|
+
.limit(maxResults)
|
|
34
|
+
.all();
|
|
35
|
+
}
|
|
36
|
+
// Client-side tag filtering (simple approach)
|
|
37
|
+
if (tags && tags.length > 0) {
|
|
38
|
+
results = results.filter((r) => {
|
|
39
|
+
const rowTags = safeParseJsonArray(r.tags);
|
|
40
|
+
return tags.some((t) => rowTags.includes(t));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return results;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=finding-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding-store.js","sourceRoot":"","sources":["../src/finding-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAIvD,mCAAmC;AACnC,MAAM,UAAU,WAAW,CACzB,EAAU,EACV,WAAmB,EACnB,MAAc,EACd,SAAiB,EACjB,QAAgB,EAChB,KAAa,EACb,OAAe,EACf,IAAc;IAEd,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QACzB,EAAE;QACF,WAAW;QACX,MAAM;QACN,SAAS;QACT,QAAQ;QACR,KAAK;QACL,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC,GAAG,EAAE,CAAC;AACX,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAC3B,WAAmB,EACnB,UAAqB,EACrB,IAAe,EACf,KAAc;IAEd,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAE9C,IAAI,OAAqB,CAAC;IAC1B,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;aACjC,KAAK,CAAC,GAAG,CACR,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,EACrC,GAAG,CAAA,GAAG,QAAQ,CAAC,QAAQ,oCAAoC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAC1F,CAAC;aACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACjC,KAAK,CAAC,UAAU,CAAC;aACjB,GAAG,EAAE,CAAC;IACX,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;aACjC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;aAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACjC,KAAK,CAAC,UAAU,CAAC;aACjB,GAAG,EAAE,CAAC;IACX,CAAC;IAED,8CAA8C;IAC9C,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @grackle-ai/database — SQLite persistence layer for Grackle.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports schema, stores, migrations, and utility modules so consumers
|
|
5
|
+
* can import everything from a single package entry point.
|
|
6
|
+
*/
|
|
7
|
+
export { openDatabase, initDatabase, sqlite, default as db } from "./db.js";
|
|
8
|
+
export type { MigrationError, InitDatabaseResult } from "./db.js";
|
|
9
|
+
export { seedDatabase } from "./db-seed.js";
|
|
10
|
+
export * as schema from "./schema.js";
|
|
11
|
+
export type { EnvironmentRow, NewEnvironment, SessionRow, NewSession, TokenRow, WorkspaceRow, NewWorkspace, TaskRow, NewTask, FindingRow, NewFinding, PersonaRow, NewPersona, } from "./schema.js";
|
|
12
|
+
export * as sessionStore from "./session-store.js";
|
|
13
|
+
export * as taskStore from "./task-store.js";
|
|
14
|
+
export * as workspaceStore from "./workspace-store.js";
|
|
15
|
+
export * as personaStore from "./persona-store.js";
|
|
16
|
+
export * as findingStore from "./finding-store.js";
|
|
17
|
+
export * as settingsStore from "./settings-store.js";
|
|
18
|
+
export * as envRegistry from "./env-registry.js";
|
|
19
|
+
export * as tokenStore from "./token-store.js";
|
|
20
|
+
export * as credentialProviders from "./credential-providers.js";
|
|
21
|
+
export type { InsertTaskFields } from "./task-store.js";
|
|
22
|
+
export type { TokenConfig } from "./token-store.js";
|
|
23
|
+
export type { CredentialProviderConfig, DatabaseInstance } from "./credential-providers.js";
|
|
24
|
+
export { isAllowedSettingKey, WRITABLE_SETTING_KEYS } from "./settings-store.js";
|
|
25
|
+
export { VALID_PROVIDERS, VALID_CLAUDE_VALUES, VALID_TOGGLE_VALUES, parseCredentialProviderConfig, isValidCredentialProviderConfig, } from "./credential-providers.js";
|
|
26
|
+
export { persistEvent } from "./event-store.js";
|
|
27
|
+
export type { DomainEvent } from "./event-store.js";
|
|
28
|
+
export { grackleHome } from "./paths.js";
|
|
29
|
+
export { encrypt, decrypt } from "./crypto.js";
|
|
30
|
+
export { safeParseJsonArray } from "./json-helpers.js";
|
|
31
|
+
export { slugify } from "./utils/slugify.js";
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AAGjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @grackle-ai/database — SQLite persistence layer for Grackle.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports schema, stores, migrations, and utility modules so consumers
|
|
5
|
+
* can import everything from a single package entry point.
|
|
6
|
+
*/
|
|
7
|
+
// ─── Database Lifecycle ────────────────────────────────────
|
|
8
|
+
export { openDatabase, initDatabase, sqlite, default as db } from "./db.js";
|
|
9
|
+
export { seedDatabase } from "./db-seed.js";
|
|
10
|
+
// ─── Schema ────────────────────────────────────────────────
|
|
11
|
+
export * as schema from "./schema.js";
|
|
12
|
+
// ─── Stores ────────────────────────────────────────────────
|
|
13
|
+
export * as sessionStore from "./session-store.js";
|
|
14
|
+
export * as taskStore from "./task-store.js";
|
|
15
|
+
export * as workspaceStore from "./workspace-store.js";
|
|
16
|
+
export * as personaStore from "./persona-store.js";
|
|
17
|
+
export * as findingStore from "./finding-store.js";
|
|
18
|
+
export * as settingsStore from "./settings-store.js";
|
|
19
|
+
export * as envRegistry from "./env-registry.js";
|
|
20
|
+
export * as tokenStore from "./token-store.js";
|
|
21
|
+
export * as credentialProviders from "./credential-providers.js";
|
|
22
|
+
export { isAllowedSettingKey, WRITABLE_SETTING_KEYS } from "./settings-store.js";
|
|
23
|
+
export { VALID_PROVIDERS, VALID_CLAUDE_VALUES, VALID_TOGGLE_VALUES, parseCredentialProviderConfig, isValidCredentialProviderConfig, } from "./credential-providers.js";
|
|
24
|
+
// ─── Event Store ───────────────────────────────────────────
|
|
25
|
+
export { persistEvent } from "./event-store.js";
|
|
26
|
+
// ─── Utilities ─────────────────────────────────────────────
|
|
27
|
+
export { grackleHome } from "./paths.js";
|
|
28
|
+
export { encrypt, decrypt } from "./crypto.js";
|
|
29
|
+
export { safeParseJsonArray } from "./json-helpers.js";
|
|
30
|
+
export { slugify } from "./utils/slugify.js";
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,8DAA8D;AAC9D,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAiBtC,8DAA8D;AAC9D,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AAMjE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AAEnC,8DAA8D;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,8DAA8D;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely parse a JSON string that is expected to contain an array of strings.
|
|
3
|
+
* Returns the parsed array on success, or an empty array if the value is
|
|
4
|
+
* null, undefined, empty, or contains malformed JSON.
|
|
5
|
+
*/
|
|
6
|
+
export declare function safeParseJsonArray(value: string | null | undefined): string[];
|
|
7
|
+
//# sourceMappingURL=json-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-helpers.d.ts","sourceRoot":"","sources":["../src/json-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAa7E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely parse a JSON string that is expected to contain an array of strings.
|
|
3
|
+
* Returns the parsed array on success, or an empty array if the value is
|
|
4
|
+
* null, undefined, empty, or contains malformed JSON.
|
|
5
|
+
*/
|
|
6
|
+
// eslint-disable-next-line @rushstack/no-new-null
|
|
7
|
+
export function safeParseJsonArray(value) {
|
|
8
|
+
if (!value) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const parsed = JSON.parse(value);
|
|
13
|
+
if (Array.isArray(parsed)) {
|
|
14
|
+
return parsed.filter((item) => typeof item === "string");
|
|
15
|
+
}
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=json-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-helpers.js","sourceRoot":"","sources":["../src/json-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,kDAAkD;AAClD,MAAM,UAAU,kBAAkB,CAAC,KAAgC;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the root Grackle data directory. Uses `GRACKLE_HOME` env var if set,
|
|
3
|
+
* otherwise falls back to `~/.grackle`. This allows test isolation by pointing
|
|
4
|
+
* to a temp directory.
|
|
5
|
+
*/
|
|
6
|
+
export declare const grackleHome: string;
|
|
7
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAGQ,CAAC"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { GRACKLE_DIR } from "@grackle-ai/common";
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the root Grackle data directory. Uses `GRACKLE_HOME` env var if set,
|
|
6
|
+
* otherwise falls back to `~/.grackle`. This allows test isolation by pointing
|
|
7
|
+
* to a temp directory.
|
|
8
|
+
*/
|
|
9
|
+
export const grackleHome = process.env.GRACKLE_HOME
|
|
10
|
+
? join(process.env.GRACKLE_HOME, GRACKLE_DIR)
|
|
11
|
+
: join(homedir(), GRACKLE_DIR);
|
|
12
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GACtB,OAAO,CAAC,GAAG,CAAC,YAAY;IACtB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;IAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type PersonaRow } from "./schema.js";
|
|
2
|
+
export type { PersonaRow };
|
|
3
|
+
/** Insert a new persona record. */
|
|
4
|
+
export declare function createPersona(id: string, name: string, description: string, systemPrompt: string, toolConfig: string, runtime: string, model: string, maxTurns: number, mcpServers: string, type?: string, script?: string): void;
|
|
5
|
+
/** Retrieve a single persona by ID. */
|
|
6
|
+
export declare function getPersona(id: string): PersonaRow | undefined;
|
|
7
|
+
/** Retrieve a persona by name. */
|
|
8
|
+
export declare function getPersonaByName(name: string): PersonaRow | undefined;
|
|
9
|
+
/** Return all personas, ordered by name. */
|
|
10
|
+
export declare function listPersonas(): PersonaRow[];
|
|
11
|
+
/** Update an existing persona. */
|
|
12
|
+
export declare function updatePersona(id: string, name: string, description: string, systemPrompt: string, toolConfig: string, runtime: string, model: string, maxTurns: number, mcpServers: string, type?: string, script?: string): void;
|
|
13
|
+
/** Delete a persona by ID. */
|
|
14
|
+
export declare function deletePersona(id: string): void;
|
|
15
|
+
//# sourceMappingURL=persona-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-store.d.ts","sourceRoot":"","sources":["../src/persona-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAGxD,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,mCAAmC;AACnC,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAgB,EACtB,MAAM,GAAE,MAAW,GAClB,IAAI,CAgBN;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE7D;AAED,kCAAkC;AAClC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAErE;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,IAAI,UAAU,EAAE,CAE3C;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAgB,EACtB,MAAM,GAAE,MAAW,GAClB,IAAI,CAiBN;AAED,8BAA8B;AAC9B,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE9C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import db from "./db.js";
|
|
2
|
+
import { personas } from "./schema.js";
|
|
3
|
+
import { eq, asc, sql } from "drizzle-orm";
|
|
4
|
+
/** Insert a new persona record. */
|
|
5
|
+
export function createPersona(id, name, description, systemPrompt, toolConfig, runtime, model, maxTurns, mcpServers, type = "agent", script = "") {
|
|
6
|
+
db.insert(personas)
|
|
7
|
+
.values({
|
|
8
|
+
id,
|
|
9
|
+
name,
|
|
10
|
+
description,
|
|
11
|
+
systemPrompt,
|
|
12
|
+
toolConfig,
|
|
13
|
+
runtime,
|
|
14
|
+
model,
|
|
15
|
+
maxTurns,
|
|
16
|
+
mcpServers,
|
|
17
|
+
type,
|
|
18
|
+
script,
|
|
19
|
+
})
|
|
20
|
+
.run();
|
|
21
|
+
}
|
|
22
|
+
/** Retrieve a single persona by ID. */
|
|
23
|
+
export function getPersona(id) {
|
|
24
|
+
return db.select().from(personas).where(eq(personas.id, id)).get();
|
|
25
|
+
}
|
|
26
|
+
/** Retrieve a persona by name. */
|
|
27
|
+
export function getPersonaByName(name) {
|
|
28
|
+
return db.select().from(personas).where(eq(personas.name, name)).get();
|
|
29
|
+
}
|
|
30
|
+
/** Return all personas, ordered by name. */
|
|
31
|
+
export function listPersonas() {
|
|
32
|
+
return db.select().from(personas).orderBy(asc(personas.name)).all();
|
|
33
|
+
}
|
|
34
|
+
/** Update an existing persona. */
|
|
35
|
+
export function updatePersona(id, name, description, systemPrompt, toolConfig, runtime, model, maxTurns, mcpServers, type = "agent", script = "") {
|
|
36
|
+
db.update(personas)
|
|
37
|
+
.set({
|
|
38
|
+
name,
|
|
39
|
+
description,
|
|
40
|
+
systemPrompt,
|
|
41
|
+
toolConfig,
|
|
42
|
+
runtime,
|
|
43
|
+
model,
|
|
44
|
+
maxTurns,
|
|
45
|
+
mcpServers,
|
|
46
|
+
type,
|
|
47
|
+
script,
|
|
48
|
+
updatedAt: sql `datetime('now')`,
|
|
49
|
+
})
|
|
50
|
+
.where(eq(personas.id, id))
|
|
51
|
+
.run();
|
|
52
|
+
}
|
|
53
|
+
/** Delete a persona by ID. */
|
|
54
|
+
export function deletePersona(id) {
|
|
55
|
+
db.delete(personas).where(eq(personas.id, id)).run();
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=persona-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persona-store.js","sourceRoot":"","sources":["../src/persona-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAI3C,mCAAmC;AACnC,MAAM,UAAU,aAAa,CAC3B,EAAU,EACV,IAAY,EACZ,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,OAAe,EACf,KAAa,EACb,QAAgB,EAChB,UAAkB,EAClB,OAAe,OAAO,EACtB,SAAiB,EAAE;IAEnB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC;QACN,EAAE;QACF,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,UAAU;QACV,OAAO;QACP,KAAK;QACL,QAAQ;QACR,UAAU;QACV,IAAI;QACJ,MAAM;KACP,CAAC;SACD,GAAG,EAAE,CAAC;AACX,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACrE,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACzE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtE,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,aAAa,CAC3B,EAAU,EACV,IAAY,EACZ,WAAmB,EACnB,YAAoB,EACpB,UAAkB,EAClB,OAAe,EACf,KAAa,EACb,QAAgB,EAChB,UAAkB,EAClB,OAAe,OAAO,EACtB,SAAiB,EAAE;IAEnB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;SAChB,GAAG,CAAC;QACH,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,UAAU;QACV,OAAO;QACP,KAAK;QACL,QAAQ;QACR,UAAU;QACV,IAAI;QACJ,MAAM;QACN,SAAS,EAAE,GAAG,CAAA,iBAAiB;KAChC,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC1B,GAAG,EAAE,CAAC;AACX,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACvD,CAAC"}
|