@mastra/libsql 1.22.0-alpha.1 → 1.22.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/CHANGELOG.md +93 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-memory-semantic-recall.md +19 -0
- package/dist/docs/references/docs-storage.md +1 -0
- package/dist/docs/references/integrations-channels-github.md +56 -9
- package/dist/docs/references/integrations-databases-libsql.md +16 -0
- package/dist/index.cjs +19 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -7
- package/dist/index.js.map +1 -1
- package/dist/storage/domains/background-tasks/index.d.ts +3 -1
- package/dist/storage/domains/background-tasks/index.d.ts.map +1 -1
- package/dist/storage/domains/experiments/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +10 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,98 @@
|
|
|
1
1
|
# @mastra/libsql
|
|
2
2
|
|
|
3
|
+
## 1.22.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added native application collection counts so totals no longer load matching rows. ([#22021](https://github.com/mastra-ai/mastra/pull/22021))
|
|
8
|
+
|
|
9
|
+
**Before**
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const total = (await storage.ops.findMany('jobs', { status: 'failed' })).length;
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**After**
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
const total = await storage.ops.count?.('jobs', { status: 'failed' });
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- Added embedded-replica sync support to LibSQLStore. You can now pass `syncUrl` and `syncInterval` to keep a local database file synced with a remote libSQL primary (for example Turso), matching the options LibSQLVector already supports. ([#22261](https://github.com/mastra-ai/mastra/pull/22261))
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { LibSQLStore } from '@mastra/libsql';
|
|
25
|
+
|
|
26
|
+
const storage = new LibSQLStore({
|
|
27
|
+
id: 'libsql-storage',
|
|
28
|
+
url: 'file:./replica.db',
|
|
29
|
+
syncUrl: 'libsql://your-db-name.turso.io',
|
|
30
|
+
authToken: process.env.TURSO_AUTH_TOKEN,
|
|
31
|
+
syncInterval: 60,
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
See https://github.com/mastra-ai/mastra/issues/21994
|
|
36
|
+
|
|
37
|
+
- Added a reusable SQLite client contract so storage adapters can use compatible SQLite drivers. ([#22181](https://github.com/mastra-ai/mastra/pull/22181))
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import type { SqliteClient } from '@mastra/libsql';
|
|
41
|
+
|
|
42
|
+
const client: SqliteClient = createCompatibleSqliteClient();
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- Added native Turso Database file storage for Mastra agents, workflows, memory, and other storage domains. ([#22181](https://github.com/mastra-ai/mastra/pull/22181))
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
import { TursoStore } from '@mastra/turso';
|
|
51
|
+
|
|
52
|
+
const storage = new TursoStore({
|
|
53
|
+
id: 'local-storage',
|
|
54
|
+
path: './mastra.db',
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- Workflow snapshot upserts no longer overwrite a previously stored `resourceId` with NULL when a run is re-persisted without one (for example during resume). ([#22105](https://github.com/mastra-ai/mastra/pull/22105))
|
|
59
|
+
|
|
60
|
+
- Experiment results now include isolated metadata snapshots from the dataset items that ran. ([#22005](https://github.com/mastra-ai/mastra/pull/22005))
|
|
61
|
+
|
|
62
|
+
- Enforce atomic conditional background task state updates so cancellation cannot be overwritten during dispatch. Background task storage is no longer exposed by Cloudflare KV or ClickHouse, which cannot provide the required compare-and-set semantics. ([#22228](https://github.com/mastra-ai/mastra/pull/22228))
|
|
63
|
+
|
|
64
|
+
- Updated dependencies [[`79f04a7`](https://github.com/mastra-ai/mastra/commit/79f04a7f6c6829da541139f638f2f1d267916e08), [`65edab1`](https://github.com/mastra-ai/mastra/commit/65edab1c233d17b8f163bad12fca410d0e6f16b1), [`1e47b75`](https://github.com/mastra-ai/mastra/commit/1e47b7520cab4cfaa8daed52f17e2e6d14ff7539), [`ab20a38`](https://github.com/mastra-ai/mastra/commit/ab20a38d0275f8d85e0f3833bd87ef487bcc609f), [`fd4d5fe`](https://github.com/mastra-ai/mastra/commit/fd4d5fe4f943699b85db5e74404f190d5a6b8c2a), [`ae8790c`](https://github.com/mastra-ai/mastra/commit/ae8790c4bfaa088d2ab279d1dcc06f326b9fd109), [`2c85f42`](https://github.com/mastra-ai/mastra/commit/2c85f428e04ccd63ea31a7ec80b5b327afdad555), [`11bbeb9`](https://github.com/mastra-ai/mastra/commit/11bbeb9b108ef2264e05acefc6dafb9cbb342921), [`48ef1f1`](https://github.com/mastra-ai/mastra/commit/48ef1f1d24eedafbb07f64e659a81b52b67b8bf6), [`aa3a85d`](https://github.com/mastra-ai/mastra/commit/aa3a85daf094c683bb97efdf4b6a696d2e474af5), [`d29d06f`](https://github.com/mastra-ai/mastra/commit/d29d06fe00bbd35b4571150ea04c59d2ed783c71), [`e6516df`](https://github.com/mastra-ai/mastra/commit/e6516dfcdae4f4ac0e7971d84359a81385ee602f), [`1a485f3`](https://github.com/mastra-ai/mastra/commit/1a485f3538f5ec64d58bd8b5e1e99de0c695c87b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`8661d7d`](https://github.com/mastra-ai/mastra/commit/8661d7d7179f0a024456aabdd8679bcecd09ac28), [`dbbfeb8`](https://github.com/mastra-ai/mastra/commit/dbbfeb85ec949dc9ebc0755e1ad262e4f5eba8db), [`575e343`](https://github.com/mastra-ai/mastra/commit/575e343900451021d96110916497d334af7bc252), [`0b2a3d1`](https://github.com/mastra-ai/mastra/commit/0b2a3d1783875c5b97b7b36ab3d03d7360e0dde7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`3cc9d00`](https://github.com/mastra-ai/mastra/commit/3cc9d00b2b4333e0377a5e9df5eff92c17ce7630), [`cacb839`](https://github.com/mastra-ai/mastra/commit/cacb8392d9e74189b56d857290b0615f98a2683d), [`57de7d6`](https://github.com/mastra-ai/mastra/commit/57de7d644ba7146edb4e9e6111ec4fa98c3a59e9), [`c8e4cea`](https://github.com/mastra-ai/mastra/commit/c8e4ceac9a390d78c8327dff3cdb2861dd71957f), [`ed01e9a`](https://github.com/mastra-ai/mastra/commit/ed01e9a807514a904374bf687a7b8f18750f6f78), [`b47b26e`](https://github.com/mastra-ai/mastra/commit/b47b26e6fe95cb8a3482be2c5e52de157fe59d0b), [`0d37487`](https://github.com/mastra-ai/mastra/commit/0d37487d9f349388a3f1cef6a536cf9dcc4b6273), [`733a537`](https://github.com/mastra-ai/mastra/commit/733a537489a858b5880b2e98809334fba895a221), [`e8e299c`](https://github.com/mastra-ai/mastra/commit/e8e299cc6abdfc39947e2fec25803493015d3882), [`edfc548`](https://github.com/mastra-ai/mastra/commit/edfc548886bc7bae17b681f8b6b41a47eb32bcd2), [`b05f486`](https://github.com/mastra-ai/mastra/commit/b05f48612984d5fe2447ea2d6cdd5c604d285b97), [`a8a4871`](https://github.com/mastra-ai/mastra/commit/a8a4871215f51da95c47129602157ce5372f634a), [`eb9ecaa`](https://github.com/mastra-ai/mastra/commit/eb9ecaa89c36e889749e3b825cfc507ce7f7980b), [`4ff3ee2`](https://github.com/mastra-ai/mastra/commit/4ff3ee2bff7ed07528b4817f8f49639031c72a4d), [`9207dfa`](https://github.com/mastra-ai/mastra/commit/9207dfab8062e5fc68b751684797ff86fe0b4e70), [`5165cdc`](https://github.com/mastra-ai/mastra/commit/5165cdcdcf50e144bb8113278535196cc9b07065), [`e737014`](https://github.com/mastra-ai/mastra/commit/e737014e0fc7035759762bb5b48baef1d6c0f6a7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`f591643`](https://github.com/mastra-ai/mastra/commit/f591643becdf0be9bddce6ba1748e64bc30d77f1), [`63796ba`](https://github.com/mastra-ai/mastra/commit/63796ba0fda60253be17535e68f6bbbf1e6ffa09), [`b1ad324`](https://github.com/mastra-ai/mastra/commit/b1ad324d657f3544b0701332aef7eb10e9a36258), [`61c566d`](https://github.com/mastra-ai/mastra/commit/61c566dd2f2cde2b23ed8f139924e530d4202214), [`c24754c`](https://github.com/mastra-ai/mastra/commit/c24754c1fb6fe144e5051e536e98c8a18b0214ac), [`12c61d2`](https://github.com/mastra-ai/mastra/commit/12c61d280c8cb208bc3c8dbcbe5dcc60cf9d1cd0), [`c46eb09`](https://github.com/mastra-ai/mastra/commit/c46eb09ce4987509af57a0ac582c61241a6dd2f1), [`9ee8120`](https://github.com/mastra-ai/mastra/commit/9ee8120ce17f76b9f617489e05a283353742690a), [`d975e92`](https://github.com/mastra-ai/mastra/commit/d975e924d4936f46c386bd3dee39c671720289f6), [`45dd6ee`](https://github.com/mastra-ai/mastra/commit/45dd6ee089bd7df0d0c98a10098e483fd388e04a), [`4e9a228`](https://github.com/mastra-ai/mastra/commit/4e9a2283d5fd6ed1b70a2751eb3dc2cbf82ada20), [`d6ce34a`](https://github.com/mastra-ai/mastra/commit/d6ce34aeceb06ddf3d595a1eed5cc74f481a46a1), [`f95f468`](https://github.com/mastra-ai/mastra/commit/f95f468cf1e7c2b924a13826494f98b8f2ccd581), [`30ed33e`](https://github.com/mastra-ai/mastra/commit/30ed33ee14084a26019aba15fceadda6d6ddefaf), [`04a815f`](https://github.com/mastra-ai/mastra/commit/04a815fc8971d29e97fcdcc5008a1eb472fc00ff), [`1cfa878`](https://github.com/mastra-ai/mastra/commit/1cfa8784d8da0dfaa0317e5048bc48b6084a5ea5), [`9a12ef3`](https://github.com/mastra-ai/mastra/commit/9a12ef3fccf3f4186db0f294f4ee1f02cf4d8db2), [`32d3583`](https://github.com/mastra-ai/mastra/commit/32d358332cb8ac2306b83b73cf3536e74dbd435e), [`7960688`](https://github.com/mastra-ai/mastra/commit/7960688828e04eaf3106e34f7758fa580257eef6), [`91ad69d`](https://github.com/mastra-ai/mastra/commit/91ad69d64994c89199b0c55399e64ed91c61df2f), [`8dc408d`](https://github.com/mastra-ai/mastra/commit/8dc408d34438f9e13297f792c11a5cfd6cf952e1), [`c92def1`](https://github.com/mastra-ai/mastra/commit/c92def10a13c822972c96f0a4ca6ffc1f4258aed), [`63041eb`](https://github.com/mastra-ai/mastra/commit/63041eb4c50b520a0a80e03d4cd6ea99f67715a0), [`c118318`](https://github.com/mastra-ai/mastra/commit/c1183181c9804303db4b511c2e2648f8b714712b), [`c5eaec5`](https://github.com/mastra-ai/mastra/commit/c5eaec5a860d80d0e3805e67db0414b87ac8cbed), [`fc07c64`](https://github.com/mastra-ai/mastra/commit/fc07c6465043e08e99193a6751a01c56ffc2e7a1), [`cced745`](https://github.com/mastra-ai/mastra/commit/cced745a056ec2225c5bc702e32d848847aa8b65), [`542dee2`](https://github.com/mastra-ai/mastra/commit/542dee254167f974ff8cbbbfc0ce10f9a2616a7b), [`3c19dce`](https://github.com/mastra-ai/mastra/commit/3c19dcef8e73062a80627a4927eae3ec11145afd), [`aca2869`](https://github.com/mastra-ai/mastra/commit/aca2869b2031982f3c4a2f52525c9be7cf123ef8), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`e6f8450`](https://github.com/mastra-ai/mastra/commit/e6f845074d478527026b18d85031b23353e1d0a4), [`895e9df`](https://github.com/mastra-ai/mastra/commit/895e9dfc17d6f34299eca64e317ded9e5f5e5ef8), [`e66b2ba`](https://github.com/mastra-ai/mastra/commit/e66b2ba100db63eaeab6e21e1ea34b113f2ec781), [`3e8727e`](https://github.com/mastra-ai/mastra/commit/3e8727e11ec1a5d733acedb5c872896394be18c1)]:
|
|
65
|
+
- @mastra/core@1.62.0
|
|
66
|
+
|
|
67
|
+
## 1.22.0-alpha.2
|
|
68
|
+
|
|
69
|
+
### Minor Changes
|
|
70
|
+
|
|
71
|
+
- Added embedded-replica sync support to LibSQLStore. You can now pass `syncUrl` and `syncInterval` to keep a local database file synced with a remote libSQL primary (for example Turso), matching the options LibSQLVector already supports. ([#22261](https://github.com/mastra-ai/mastra/pull/22261))
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { LibSQLStore } from '@mastra/libsql';
|
|
75
|
+
|
|
76
|
+
const storage = new LibSQLStore({
|
|
77
|
+
id: 'libsql-storage',
|
|
78
|
+
url: 'file:./replica.db',
|
|
79
|
+
syncUrl: 'libsql://your-db-name.turso.io',
|
|
80
|
+
authToken: process.env.TURSO_AUTH_TOKEN,
|
|
81
|
+
syncInterval: 60,
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
See https://github.com/mastra-ai/mastra/issues/21994
|
|
86
|
+
|
|
87
|
+
### Patch Changes
|
|
88
|
+
|
|
89
|
+
- Experiment results now include isolated metadata snapshots from the dataset items that ran. ([#22005](https://github.com/mastra-ai/mastra/pull/22005))
|
|
90
|
+
|
|
91
|
+
- Enforce atomic conditional background task state updates so cancellation cannot be overwritten during dispatch. Background task storage is no longer exposed by Cloudflare KV or ClickHouse, which cannot provide the required compare-and-set semantics. ([#22228](https://github.com/mastra-ai/mastra/pull/22228))
|
|
92
|
+
|
|
93
|
+
- Updated dependencies [[`aa3a85d`](https://github.com/mastra-ai/mastra/commit/aa3a85daf094c683bb97efdf4b6a696d2e474af5), [`d29d06f`](https://github.com/mastra-ai/mastra/commit/d29d06fe00bbd35b4571150ea04c59d2ed783c71), [`e6516df`](https://github.com/mastra-ai/mastra/commit/e6516dfcdae4f4ac0e7971d84359a81385ee602f), [`0b2a3d1`](https://github.com/mastra-ai/mastra/commit/0b2a3d1783875c5b97b7b36ab3d03d7360e0dde7), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`57de7d6`](https://github.com/mastra-ai/mastra/commit/57de7d644ba7146edb4e9e6111ec4fa98c3a59e9), [`e8e299c`](https://github.com/mastra-ai/mastra/commit/e8e299cc6abdfc39947e2fec25803493015d3882), [`edfc548`](https://github.com/mastra-ai/mastra/commit/edfc548886bc7bae17b681f8b6b41a47eb32bcd2), [`a8a4871`](https://github.com/mastra-ai/mastra/commit/a8a4871215f51da95c47129602157ce5372f634a), [`5165cdc`](https://github.com/mastra-ai/mastra/commit/5165cdcdcf50e144bb8113278535196cc9b07065), [`6bb5d71`](https://github.com/mastra-ai/mastra/commit/6bb5d7193fe9166b219f0fccae17db7a5ae86e65), [`9ee8120`](https://github.com/mastra-ai/mastra/commit/9ee8120ce17f76b9f617489e05a283353742690a), [`d975e92`](https://github.com/mastra-ai/mastra/commit/d975e924d4936f46c386bd3dee39c671720289f6), [`1cfa878`](https://github.com/mastra-ai/mastra/commit/1cfa8784d8da0dfaa0317e5048bc48b6084a5ea5), [`c118318`](https://github.com/mastra-ai/mastra/commit/c1183181c9804303db4b511c2e2648f8b714712b), [`fc07c64`](https://github.com/mastra-ai/mastra/commit/fc07c6465043e08e99193a6751a01c56ffc2e7a1), [`542dee2`](https://github.com/mastra-ai/mastra/commit/542dee254167f974ff8cbbbfc0ce10f9a2616a7b), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`a58483c`](https://github.com/mastra-ai/mastra/commit/a58483cff1a9d41fce7c931843f48cb0ac450f64), [`895e9df`](https://github.com/mastra-ai/mastra/commit/895e9dfc17d6f34299eca64e317ded9e5f5e5ef8)]:
|
|
94
|
+
- @mastra/core@1.62.0-alpha.8
|
|
95
|
+
|
|
3
96
|
## 1.22.0-alpha.1
|
|
4
97
|
|
|
5
98
|
### Minor Changes
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -350,6 +350,25 @@ const agent = new Agent({
|
|
|
350
350
|
})
|
|
351
351
|
```
|
|
352
352
|
|
|
353
|
+
FastEmbed also exposes the multilingual E5 model for non-English content. E5 is asymmetric, so it's exposed as two models: `multilingualE5LargePassage` for text you index and `multilingualE5LargeQuery` for search text.
|
|
354
|
+
|
|
355
|
+
```ts
|
|
356
|
+
import { Memory } from '@mastra/memory'
|
|
357
|
+
import { Agent } from '@mastra/core/agent'
|
|
358
|
+
import { fastembed } from '@mastra/fastembed'
|
|
359
|
+
|
|
360
|
+
const agent = new Agent({
|
|
361
|
+
id: 'agent',
|
|
362
|
+
memory: new Memory({
|
|
363
|
+
embedder: fastembed.multilingualE5LargePassage,
|
|
364
|
+
}),
|
|
365
|
+
})
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
Memory uses a single embedder for both storing and recalling messages, so pick one of the two models and use it consistently. Use the paired `multilingualE5LargeQuery` model only where you control both sides of the pipeline, such as a RAG workflow that indexes with the passage model and searches with the query model.
|
|
369
|
+
|
|
370
|
+
Multilingual E5 produces 1024-dimensional vectors. Your vector index must be created with matching dimensions, and E5 vectors can't be mixed with vectors from another embedder in the same index.
|
|
371
|
+
|
|
353
372
|
## PostgreSQL index optimization
|
|
354
373
|
|
|
355
374
|
When using PostgreSQL as your vector store, you can optimize semantic recall performance by configuring the vector index. This is particularly important for large-scale deployments with thousands of messages.
|
|
@@ -197,6 +197,7 @@ Each provider page includes installation instructions, configuration parameters,
|
|
|
197
197
|
- [Convex](https://mastra.ai/integrations/databases/convex)
|
|
198
198
|
- [DuckDB](https://mastra.ai/integrations/databases/duckdb)
|
|
199
199
|
- [DynamoDB](https://mastra.ai/integrations/databases/dynamodb)
|
|
200
|
+
- [Elasticsearch](https://mastra.ai/integrations/databases/elasticsearch)
|
|
200
201
|
- [Google Cloud Spanner](https://mastra.ai/integrations/databases/spanner)
|
|
201
202
|
- [LanceDB](https://mastra.ai/integrations/databases/lancedb)
|
|
202
203
|
- [libSQL](https://mastra.ai/integrations/databases/libsql)
|
|
@@ -74,7 +74,7 @@ export const mastra = new Mastra({
|
|
|
74
74
|
})
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
After the agent has created a memory thread, subscribe that thread to a PR.
|
|
77
|
+
After the agent has created a memory thread, subscribe that thread to a PR. Choose `review` mode when the thread only needs code revisions, authorized latest PR comments, and observable review-thread-state updates:
|
|
78
78
|
|
|
79
79
|
```typescript
|
|
80
80
|
await githubSignals.subscribeThreadToPR({
|
|
@@ -85,19 +85,66 @@ await githubSignals.subscribeThreadToPR({
|
|
|
85
85
|
repo: 'web-app',
|
|
86
86
|
number: 42,
|
|
87
87
|
},
|
|
88
|
+
mode: 'review',
|
|
88
89
|
})
|
|
89
90
|
```
|
|
90
91
|
|
|
91
92
|
The provider syncs the PR immediately, stores the subscription, and starts polling every five minutes. Set `pollIntervalMs` in the `GithubSignals` constructor to change the interval. If the process restarts, call `startPollingForThread()` for each persisted thread subscription to resume polling.
|
|
92
93
|
|
|
93
|
-
|
|
94
|
+
A thread has one current GitHub Signals subscription. Subscribing it to another PR replaces the existing subscription.
|
|
94
95
|
|
|
95
|
-
|
|
96
|
+
## Subscription modes
|
|
96
97
|
|
|
97
|
-
|
|
98
|
-
- A change in unresolved review threads.
|
|
99
|
-
- Continuous integration (CI) checks that start, fail, or recover.
|
|
100
|
-
- Merge conflicts that appear or are resolved.
|
|
101
|
-
- A state change to closed, reopened, or merged.
|
|
98
|
+
GitHub Signals supports two subscription modes:
|
|
102
99
|
|
|
103
|
-
|
|
100
|
+
- `review`: Follows new head revisions, authorized latest PR comments, and observable review-thread-state changes, including when all review threads become resolved.
|
|
101
|
+
- `working`: Follows all actionable PR activity detected by the provider. Comment-bearing notifications remain subject to existing authorization gates. This is the default when `mode` is omitted and for stored subscriptions without a valid mode.
|
|
102
|
+
|
|
103
|
+
The following table shows the observable behavior of each mode:
|
|
104
|
+
|
|
105
|
+
| Pull request activity | `working` | `review` |
|
|
106
|
+
| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
107
|
+
| First observation | Sends a baseline notification | Saves all cursors without notifying unless the PR is closed or merged; then notifies and removes the subscription |
|
|
108
|
+
| New commit or force-push | Notifies when the latest comment author is authorized | Notifies without requiring a comment author |
|
|
109
|
+
| New authorized latest PR comment | Notifies | Notifies |
|
|
110
|
+
| Observable review-thread-state change | Notifies while unresolved threads remain | Notifies, including when all review threads become resolved |
|
|
111
|
+
| Continuous integration checks start, fail, or recover | Notifies | Saves the new state without notifying |
|
|
112
|
+
| Merge conflicts appear or resolve | Notifies | Saves the new state without notifying |
|
|
113
|
+
| Other actionable aggregate PR activity | Notifies when applicable authorization checks pass | Saves the new state without notifying |
|
|
114
|
+
| PR closes without merging | Notifies and keeps the subscription | Notifies and removes the subscription |
|
|
115
|
+
| PR reopens | Notifies | Doesn't notify because the earlier close removed the subscription |
|
|
116
|
+
| PR merges | Notifies and removes the subscription | Notifies and removes the subscription |
|
|
117
|
+
|
|
118
|
+
Review mode uses the latest generic PR comment exposed by `gitcrawl`. The snapshot doesn't distinguish general PR conversation from inline review comments. Comment notifications require an authorized author because they include comment content. Review-state notifications contain only provider-generated state summaries and aren't author-gated.
|
|
119
|
+
|
|
120
|
+
The review-state cursor includes the unresolved thread count and the latest unresolved thread timestamp. It reports when the count reaches zero, but it can't report replies on threads that are already resolved.
|
|
121
|
+
|
|
122
|
+
During subscription, a PR already known to be closed or merged isn't stored and doesn't send an activity notification. Otherwise, review mode silently saves its first available non-terminal snapshot, including when the subscribe-time snapshot fails and a later poll supplies the first observation. If the first available poll snapshot or a later snapshot is closed or merged, the provider sends a terminal notification and removes the subscription. It doesn't follow a later reopen unless you subscribe again.
|
|
123
|
+
|
|
124
|
+
## Subscription tools
|
|
125
|
+
|
|
126
|
+
The provider adds `github_subscribe_pr` and `github_unsubscribe_pr` tools to the agent. Pass `mode` when subscribing:
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"owner": "acme",
|
|
131
|
+
"repo": "web-app",
|
|
132
|
+
"number": 42,
|
|
133
|
+
"mode": "review"
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Omitting `mode` selects `working`. Don't subscribe for a one-off PR inspection.
|
|
138
|
+
|
|
139
|
+
## MastraCode commands
|
|
140
|
+
|
|
141
|
+
In MastraCode, use the spaced `--mode` flag with a PR number, `owner/repo#number`, or full GitHub PR URL:
|
|
142
|
+
|
|
143
|
+
```text
|
|
144
|
+
/github subscribe 42 --mode review
|
|
145
|
+
/github acme/web-app#42 --mode working
|
|
146
|
+
/github unsubscribe 42
|
|
147
|
+
/github debug
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
MastraCode rejects `--mode=review`, missing or repeated mode values, unknown modes, and mode flags on unsubscribe. `/github debug` shows the stored mode and displays absent or invalid legacy values as `working`.
|
|
@@ -89,12 +89,28 @@ storage: new LibSQLStore({
|
|
|
89
89
|
|
|
90
90
|
> **Warning:** In-memory storage resets when the process changes. Only suitable for development.
|
|
91
91
|
|
|
92
|
+
Embedded replica synced with a remote primary (for example Turso):
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
storage: new LibSQLStore({
|
|
96
|
+
id: 'libsql-storage',
|
|
97
|
+
url: 'file:./replica.db',
|
|
98
|
+
syncUrl: 'libsql://your-db-name.aws-ap-northeast-1.turso.io',
|
|
99
|
+
authToken: process.env.TURSO_AUTH_TOKEN,
|
|
100
|
+
syncInterval: 60,
|
|
101
|
+
})
|
|
102
|
+
```
|
|
103
|
+
|
|
92
104
|
## Options
|
|
93
105
|
|
|
94
106
|
**url** (`string`): Database URL. Use :memory: for in-memory database, file:filename.db for a file database, or a libSQL connection string (e.g., libsql://your-database.turso.io) for remote storage.
|
|
95
107
|
|
|
96
108
|
**authToken** (`string`): Authentication token for remote libSQL databases.
|
|
97
109
|
|
|
110
|
+
**syncUrl** (`string`): URL of the remote primary database to sync from, enabling an embedded replica. Requires a local file: url.
|
|
111
|
+
|
|
112
|
+
**syncInterval** (`number`): Interval in seconds for automatic sync with the remote primary. Only applies when syncUrl is set.
|
|
113
|
+
|
|
98
114
|
## Managed tables
|
|
99
115
|
|
|
100
116
|
The storage implementation creates the core storage tables automatically, including `mastra_notifications` for notification inbox records and delivery metadata.
|
package/dist/index.cjs
CHANGED
|
@@ -2967,7 +2967,7 @@ var BackgroundTasksLibSQL = class BackgroundTasksLibSQL extends _mastra_core_sto
|
|
|
2967
2967
|
}
|
|
2968
2968
|
});
|
|
2969
2969
|
}
|
|
2970
|
-
async updateTask(taskId, update) {
|
|
2970
|
+
async updateTask(taskId, update, options) {
|
|
2971
2971
|
const setClauses = [];
|
|
2972
2972
|
const params = [];
|
|
2973
2973
|
if ("status" in update) {
|
|
@@ -3002,12 +3002,17 @@ var BackgroundTasksLibSQL = class BackgroundTasksLibSQL extends _mastra_core_sto
|
|
|
3002
3002
|
setClauses.push("completedAt = ?");
|
|
3003
3003
|
params.push(update.completedAt?.toISOString() ?? null);
|
|
3004
3004
|
}
|
|
3005
|
-
if (setClauses.length === 0) return;
|
|
3005
|
+
if (setClauses.length === 0) return false;
|
|
3006
3006
|
params.push(taskId);
|
|
3007
|
-
|
|
3008
|
-
|
|
3007
|
+
let where = "id = ?";
|
|
3008
|
+
if (options?.expectedStatus) {
|
|
3009
|
+
where += " AND status = ?";
|
|
3010
|
+
params.push(options.expectedStatus);
|
|
3011
|
+
}
|
|
3012
|
+
return (await this.#client.execute({
|
|
3013
|
+
sql: `UPDATE ${_mastra_core_storage.TABLE_BACKGROUND_TASKS} SET ${setClauses.join(", ")} WHERE ${where}`,
|
|
3009
3014
|
args: params
|
|
3010
|
-
});
|
|
3015
|
+
})).rowsAffected > 0;
|
|
3011
3016
|
}
|
|
3012
3017
|
async getTask(taskId) {
|
|
3013
3018
|
const row = (await this.#client.execute({
|
|
@@ -4617,6 +4622,7 @@ var ExperimentsLibSQL = class extends _mastra_core_storage.ExperimentsStorage {
|
|
|
4617
4622
|
"tags",
|
|
4618
4623
|
"comment",
|
|
4619
4624
|
"toolMockReport",
|
|
4625
|
+
"metadata",
|
|
4620
4626
|
"organizationId",
|
|
4621
4627
|
"projectId",
|
|
4622
4628
|
"attempt"
|
|
@@ -4763,6 +4769,7 @@ var ExperimentsLibSQL = class extends _mastra_core_storage.ExperimentsStorage {
|
|
|
4763
4769
|
input: (0, _mastra_core_storage.safelyParseJSON)(row.input),
|
|
4764
4770
|
output: row.output ? (0, _mastra_core_storage.safelyParseJSON)(row.output) : null,
|
|
4765
4771
|
groundTruth: row.groundTruth ? (0, _mastra_core_storage.safelyParseJSON)(row.groundTruth) : null,
|
|
4772
|
+
metadata: row.metadata ? (0, _mastra_core_storage.safelyParseJSON)(row.metadata) : null,
|
|
4766
4773
|
error: row.error ? (0, _mastra_core_storage.safelyParseJSON)(row.error) : null,
|
|
4767
4774
|
startedAt: (0, _mastra_core_storage.ensureDate)(row.startedAt),
|
|
4768
4775
|
completedAt: (0, _mastra_core_storage.ensureDate)(row.completedAt),
|
|
@@ -5065,6 +5072,7 @@ var ExperimentsLibSQL = class extends _mastra_core_storage.ExperimentsStorage {
|
|
|
5065
5072
|
input: input.input,
|
|
5066
5073
|
output: input.output,
|
|
5067
5074
|
groundTruth: input.groundTruth,
|
|
5075
|
+
metadata: input.metadata ?? null,
|
|
5068
5076
|
error: input.error ?? null,
|
|
5069
5077
|
startedAt: input.startedAt.toISOString(),
|
|
5070
5078
|
completedAt: input.completedAt.toISOString(),
|
|
@@ -5087,6 +5095,7 @@ var ExperimentsLibSQL = class extends _mastra_core_storage.ExperimentsStorage {
|
|
|
5087
5095
|
input: input.input,
|
|
5088
5096
|
output: input.output,
|
|
5089
5097
|
groundTruth: input.groundTruth,
|
|
5098
|
+
metadata: input.metadata ?? null,
|
|
5090
5099
|
error: input.error,
|
|
5091
5100
|
startedAt: input.startedAt,
|
|
5092
5101
|
completedAt: input.completedAt,
|
|
@@ -5141,7 +5150,7 @@ var ExperimentsLibSQL = class extends _mastra_core_storage.ExperimentsStorage {
|
|
|
5141
5150
|
await this.#client.execute({
|
|
5142
5151
|
sql: `UPDATE ${_mastra_core_storage.TABLE_EXPERIMENT_RESULTS} SET
|
|
5143
5152
|
"itemDatasetVersion" = ?, "organizationId" = ?, "projectId" = ?,
|
|
5144
|
-
"input" = ?, "output" = ?, "groundTruth" = ?, "error" = ?,
|
|
5153
|
+
"input" = ?, "output" = ?, "groundTruth" = ?, "metadata" = ?, "error" = ?,
|
|
5145
5154
|
"startedAt" = ?, "completedAt" = ?, "retryCount" = ?, "attempt" = ?,
|
|
5146
5155
|
"traceId" = ?, "status" = ?, "tags" = ?, "toolMockReport" = ?
|
|
5147
5156
|
WHERE "id" = ?`,
|
|
@@ -5152,6 +5161,7 @@ var ExperimentsLibSQL = class extends _mastra_core_storage.ExperimentsStorage {
|
|
|
5152
5161
|
JSON.stringify(input.input),
|
|
5153
5162
|
input.output != null ? JSON.stringify(input.output) : null,
|
|
5154
5163
|
input.groundTruth != null ? JSON.stringify(input.groundTruth) : null,
|
|
5164
|
+
input.metadata != null ? JSON.stringify(input.metadata) : null,
|
|
5155
5165
|
input.error != null ? JSON.stringify(input.error) : null,
|
|
5156
5166
|
input.startedAt.toISOString(),
|
|
5157
5167
|
input.completedAt.toISOString(),
|
|
@@ -14133,10 +14143,12 @@ var LibSQLStore = class extends _mastra_core_storage.MastraCompositeStore {
|
|
|
14133
14143
|
};
|
|
14134
14144
|
if ("url" in config) {
|
|
14135
14145
|
if (config.url.includes(":memory:")) this.shouldCacheInit = false;
|
|
14136
|
-
this.isLocalDb = config.url.startsWith("file:") || config.url.includes(":memory:");
|
|
14146
|
+
this.isLocalDb = (config.url.startsWith("file:") || config.url.includes(":memory:")) && !config.syncUrl;
|
|
14137
14147
|
this.client = (0, _libsql_client.createClient)({
|
|
14138
14148
|
url: config.url,
|
|
14139
14149
|
...config.authToken ? { authToken: config.authToken } : {},
|
|
14150
|
+
...config.syncUrl ? { syncUrl: config.syncUrl } : {},
|
|
14151
|
+
...config.syncInterval !== void 0 ? { syncInterval: config.syncInterval } : {},
|
|
14140
14152
|
...this.isLocalDb ? { timeout: this.connectionTimeoutMs } : {}
|
|
14141
14153
|
});
|
|
14142
14154
|
this.pragmasReady = this.isLocalDb ? this.applyLocalPragmas() : Promise.resolve();
|