@treeseed/sdk 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +565 -0
  2. package/dist/cli-tools.js +44 -0
  3. package/dist/content-store.js +237 -0
  4. package/dist/d1-store.js +549 -0
  5. package/dist/frontmatter.js +33 -0
  6. package/dist/git-runtime.js +67 -0
  7. package/dist/index.js +12 -0
  8. package/dist/model-registry.js +164 -0
  9. package/dist/runtime.js +36 -0
  10. package/dist/scripts/.ts-run-1775616845195-odh4xzphk3l.js +22 -0
  11. package/dist/scripts/.ts-run-1775616848931-9386s6kwrl.js +126 -0
  12. package/dist/scripts/assert-release-tag-version.d.ts +1 -0
  13. package/dist/scripts/assert-release-tag-version.js +23 -0
  14. package/dist/scripts/build-dist.d.ts +1 -0
  15. package/dist/scripts/build-dist.js +114 -0
  16. package/dist/scripts/package-tools.d.ts +15 -0
  17. package/dist/scripts/package-tools.js +76 -0
  18. package/dist/scripts/publish-package.d.ts +1 -0
  19. package/dist/scripts/publish-package.js +20 -0
  20. package/dist/scripts/release-verify.d.ts +1 -0
  21. package/dist/scripts/release-verify.js +49 -0
  22. package/dist/scripts/run-ts.js +45 -0
  23. package/dist/scripts/test-smoke.d.ts +1 -0
  24. package/dist/scripts/test-smoke.js +77 -0
  25. package/dist/sdk-filters.js +77 -0
  26. package/dist/sdk-types.js +24 -0
  27. package/dist/sdk.js +232 -0
  28. package/dist/src/cli-tools.d.ts +3 -0
  29. package/dist/src/content-store.d.ts +24 -0
  30. package/dist/src/d1-store.d.ts +108 -0
  31. package/dist/src/frontmatter.d.ts +6 -0
  32. package/dist/src/git-runtime.d.ts +16 -0
  33. package/dist/src/index.d.ts +6 -0
  34. package/dist/src/model-registry.d.ts +4 -0
  35. package/dist/src/runtime.d.ts +1 -0
  36. package/dist/src/sdk-filters.d.ts +4 -0
  37. package/dist/src/sdk-types.d.ts +285 -0
  38. package/dist/src/sdk.d.ts +109 -0
  39. package/dist/src/stores/cursor-store.d.ts +10 -0
  40. package/dist/src/stores/envelopes.d.ts +116 -0
  41. package/dist/src/stores/helpers.d.ts +12 -0
  42. package/dist/src/stores/lease-store.d.ts +18 -0
  43. package/dist/src/stores/message-store.d.ts +12 -0
  44. package/dist/src/stores/run-store.d.ts +10 -0
  45. package/dist/src/stores/subscription-store.d.ts +9 -0
  46. package/dist/src/types/agents.d.ts +100 -0
  47. package/dist/src/types/cloudflare.d.ts +32 -0
  48. package/dist/src/wrangler-d1.d.ts +25 -0
  49. package/dist/stores/cursor-store.js +158 -0
  50. package/dist/stores/envelopes.js +219 -0
  51. package/dist/stores/helpers.js +42 -0
  52. package/dist/stores/lease-store.js +183 -0
  53. package/dist/stores/message-store.js +249 -0
  54. package/dist/stores/run-store.js +166 -0
  55. package/dist/stores/subscription-store.js +171 -0
  56. package/dist/test/test-fixture.d.ts +1 -0
  57. package/dist/test/utils/envelopes.test.d.ts +1 -0
  58. package/dist/test/utils/sdk.test.d.ts +1 -0
  59. package/dist/types/agents.js +40 -0
  60. package/dist/types/cloudflare.js +0 -0
  61. package/dist/vitest.config.d.ts +2 -0
  62. package/dist/wrangler-d1.js +84 -0
  63. package/package.json +130 -0
@@ -0,0 +1,4 @@
1
+ import type { SdkModelDefinition, SdkModelName } from './sdk-types.ts';
2
+ export declare function buildModelRegistry(): Record<SdkModelName, SdkModelDefinition>;
3
+ export declare const MODEL_REGISTRY: Record<SdkModelName, SdkModelDefinition>;
4
+ export declare function resolveModelDefinition(model: string): SdkModelDefinition;
@@ -0,0 +1 @@
1
+ export declare function resolveSdkRepoRoot(repoRoot?: string): string;
@@ -0,0 +1,4 @@
1
+ import type { SdkContentEntry, SdkFilterCondition, SdkSortSpec } from './sdk-types.ts';
2
+ export declare function matchesFilter(entry: SdkContentEntry | Record<string, unknown>, filter: SdkFilterCondition): boolean;
3
+ export declare function applyFilters<T extends SdkContentEntry | Record<string, unknown>>(items: T[], filters?: SdkFilterCondition[]): T[];
4
+ export declare function applySort<T extends SdkContentEntry | Record<string, unknown>>(items: T[], sort?: SdkSortSpec[]): T[];
@@ -0,0 +1,285 @@
1
+ export declare const SDK_MODEL_NAMES: readonly ["page", "note", "question", "book", "knowledge", "objective", "person", "subscription", "message", "agent", "agent_run", "agent_cursor", "content_lease"];
2
+ export declare const SDK_OPERATIONS: readonly ["get", "read", "search", "follow", "pick", "create", "update"];
3
+ export declare const SDK_STORAGE_BACKENDS: readonly ["content", "d1"];
4
+ export declare const SDK_PICK_STRATEGIES: readonly ["latest", "highest_priority", "oldest"];
5
+ export type SdkModelName = (typeof SDK_MODEL_NAMES)[number];
6
+ export type SdkOperation = (typeof SDK_OPERATIONS)[number];
7
+ export type SdkStorageBackend = (typeof SDK_STORAGE_BACKENDS)[number];
8
+ export type SdkPickStrategy = (typeof SDK_PICK_STRATEGIES)[number];
9
+ export type SdkFilterOperator = 'eq' | 'in' | 'contains' | 'prefix' | 'gt' | 'gte' | 'lt' | 'lte' | 'updated_since' | 'related_to';
10
+ export type TreeseedSchemaVersion = number;
11
+ export type TreeseedRuntimeRecordType = 'subscription' | 'contact_submission' | 'agent_run' | 'message' | 'agent_cursor' | 'content_lease';
12
+ export interface TreeseedRecordEnvelope<TPayload, TMeta = Record<string, unknown>> {
13
+ recordType: TreeseedRuntimeRecordType;
14
+ schemaVersion: TreeseedSchemaVersion;
15
+ status: string;
16
+ payload: TPayload;
17
+ meta: TMeta;
18
+ }
19
+ export interface TreeseedSubscriptionPayload {
20
+ email: string;
21
+ name: string | null;
22
+ source: string;
23
+ consentAt: string | null;
24
+ ipHash: string;
25
+ }
26
+ export interface TreeseedSubscriptionMeta {
27
+ legacyId?: number;
28
+ }
29
+ export interface TreeseedContactSubmissionPayload {
30
+ name: string;
31
+ email: string;
32
+ organization: string | null;
33
+ contactType: string;
34
+ subject: string;
35
+ message: string;
36
+ userAgent: string;
37
+ ipHash: string;
38
+ }
39
+ export interface TreeseedContactSubmissionMeta {
40
+ source?: string;
41
+ }
42
+ export interface TreeseedAgentRunPayload {
43
+ triggerSource: string;
44
+ handlerKind?: string | null;
45
+ triggerKind?: string | null;
46
+ selectedItemKey: string | null;
47
+ selectedMessageId: number | null;
48
+ claimedMessageId?: number | null;
49
+ branchName: string | null;
50
+ prUrl: string | null;
51
+ summary: string | null;
52
+ error: string | null;
53
+ errorCategory?: string | null;
54
+ commitSha?: string | null;
55
+ changedPaths?: string[];
56
+ finishedAt: string | null;
57
+ }
58
+ export interface TreeseedAgentRunMeta {
59
+ runId: string;
60
+ agentSlug: string;
61
+ }
62
+ export interface TreeseedMessagePayload {
63
+ body: Record<string, unknown>;
64
+ }
65
+ export interface TreeseedMessageMeta {
66
+ actor?: string;
67
+ trace?: Record<string, unknown>;
68
+ }
69
+ export interface TreeseedCursorPayload {
70
+ cursorValue: string;
71
+ }
72
+ export interface TreeseedCursorMeta {
73
+ updatedBy?: string;
74
+ }
75
+ export interface TreeseedLeasePayload {
76
+ token: string;
77
+ }
78
+ export interface TreeseedLeaseMeta {
79
+ actor?: string;
80
+ }
81
+ export interface SdkFilterCondition {
82
+ field: string;
83
+ op: SdkFilterOperator;
84
+ value: unknown;
85
+ }
86
+ export interface SdkSortSpec {
87
+ field: string;
88
+ direction?: 'asc' | 'desc';
89
+ }
90
+ export interface SdkJsonEnvelope<TPayload> {
91
+ ok: boolean;
92
+ model: SdkModelName;
93
+ operation: SdkOperation;
94
+ payload: TPayload;
95
+ meta?: Record<string, unknown>;
96
+ }
97
+ export interface SdkMessageEntity {
98
+ [key: string]: unknown;
99
+ id: number;
100
+ recordType?: TreeseedRuntimeRecordType;
101
+ schemaVersion?: TreeseedSchemaVersion;
102
+ type: string;
103
+ status: string;
104
+ payloadJson: string;
105
+ metaJson?: string;
106
+ relatedModel: string | null;
107
+ relatedId: string | null;
108
+ priority: number;
109
+ availableAt: string;
110
+ claimedBy: string | null;
111
+ claimedAt: string | null;
112
+ leaseExpiresAt: string | null;
113
+ attempts: number;
114
+ maxAttempts: number;
115
+ createdAt: string;
116
+ updatedAt: string;
117
+ }
118
+ export interface SdkRunEntity {
119
+ [key: string]: unknown;
120
+ runId: string;
121
+ recordType?: TreeseedRuntimeRecordType;
122
+ schemaVersion?: TreeseedSchemaVersion;
123
+ agentSlug: string;
124
+ handlerKind?: string | null;
125
+ triggerKind?: string | null;
126
+ triggerSource: string;
127
+ claimedMessageId?: number | null;
128
+ status: string;
129
+ selectedItemKey: string | null;
130
+ selectedMessageId: number | null;
131
+ branchName: string | null;
132
+ commitSha?: string | null;
133
+ changedPaths?: string[];
134
+ prUrl: string | null;
135
+ summary: string | null;
136
+ error: string | null;
137
+ errorCategory?: string | null;
138
+ startedAt: string;
139
+ finishedAt: string | null;
140
+ }
141
+ export interface SdkCursorEntity {
142
+ [key: string]: unknown;
143
+ recordType?: TreeseedRuntimeRecordType;
144
+ schemaVersion?: TreeseedSchemaVersion;
145
+ agentSlug: string;
146
+ cursorKey: string;
147
+ cursorValue: string;
148
+ updatedAt: string | null;
149
+ }
150
+ export interface SdkLeaseEntity {
151
+ [key: string]: unknown;
152
+ recordType?: TreeseedRuntimeRecordType;
153
+ schemaVersion?: TreeseedSchemaVersion;
154
+ model: string;
155
+ itemKey: string;
156
+ claimedBy: string;
157
+ claimedAt: string;
158
+ leaseExpiresAt: string;
159
+ token: string;
160
+ }
161
+ export interface SdkSubscriptionEntity {
162
+ [key: string]: unknown;
163
+ id?: number;
164
+ recordType?: TreeseedRuntimeRecordType;
165
+ schemaVersion?: TreeseedSchemaVersion;
166
+ email: string;
167
+ name?: string | null;
168
+ status: string;
169
+ source?: string;
170
+ metaJson?: string;
171
+ consent_at?: string;
172
+ created_at?: string;
173
+ updated_at?: string;
174
+ ip_hash?: string;
175
+ }
176
+ export interface SdkAgentSpec {
177
+ [key: string]: unknown;
178
+ id: string;
179
+ slug: string;
180
+ title?: string;
181
+ body: string;
182
+ frontmatter: Record<string, unknown>;
183
+ }
184
+ export interface SdkContentEntry {
185
+ id: string;
186
+ slug: string;
187
+ model: SdkModelName;
188
+ title?: string;
189
+ path: string;
190
+ body: string;
191
+ frontmatter: Record<string, unknown>;
192
+ updatedAt: string | null;
193
+ createdAt: string | null;
194
+ }
195
+ export interface SdkSearchRequest {
196
+ model: SdkModelName;
197
+ filters?: SdkFilterCondition[];
198
+ sort?: SdkSortSpec[];
199
+ limit?: number;
200
+ cursor?: string | null;
201
+ }
202
+ export interface SdkGetRequest {
203
+ model: SdkModelName;
204
+ id?: string;
205
+ slug?: string;
206
+ key?: string;
207
+ }
208
+ export interface SdkFollowRequest {
209
+ model: SdkModelName;
210
+ since: string;
211
+ filters?: SdkFilterCondition[];
212
+ timeoutSeconds?: number;
213
+ }
214
+ export interface SdkPickRequest {
215
+ model: SdkModelName;
216
+ strategy?: SdkPickStrategy;
217
+ filters?: SdkFilterCondition[];
218
+ leaseSeconds: number;
219
+ workerId: string;
220
+ }
221
+ export interface SdkMutationRequest {
222
+ model: SdkModelName;
223
+ data: Record<string, unknown>;
224
+ actor: string;
225
+ }
226
+ export interface SdkUpdateRequest extends SdkMutationRequest {
227
+ id?: string;
228
+ slug?: string;
229
+ key?: string;
230
+ expectedVersion?: string;
231
+ }
232
+ export interface SdkModelDefinition {
233
+ name: SdkModelName;
234
+ aliases: string[];
235
+ storage: SdkStorageBackend;
236
+ operations: SdkOperation[];
237
+ filterableFields: string[];
238
+ sortableFields: string[];
239
+ pickField: string;
240
+ contentCollection?: string;
241
+ contentDir?: string;
242
+ }
243
+ export interface SdkCreateMessageRequest {
244
+ type: string;
245
+ payload: Record<string, unknown>;
246
+ relatedModel?: string | null;
247
+ relatedId?: string | null;
248
+ priority?: number;
249
+ maxAttempts?: number;
250
+ actor: string;
251
+ }
252
+ export interface SdkClaimMessageRequest {
253
+ workerId: string;
254
+ messageTypes?: string[];
255
+ leaseSeconds: number;
256
+ }
257
+ export interface SdkAckMessageRequest {
258
+ id: number;
259
+ status: 'completed' | 'failed' | 'dead_letter' | 'pending' | 'claimed';
260
+ }
261
+ export interface SdkRecordRunRequest {
262
+ run: Record<string, unknown>;
263
+ }
264
+ export interface SdkCursorRequest {
265
+ agentSlug: string;
266
+ cursorKey: string;
267
+ cursorValue: string;
268
+ }
269
+ export interface SdkGetCursorRequest {
270
+ agentSlug: string;
271
+ cursorKey: string;
272
+ }
273
+ export interface SdkLeaseReleaseRequest {
274
+ model: string;
275
+ itemKey: string;
276
+ leaseToken?: string | null;
277
+ }
278
+ export interface SdkFollowResult<TItem> {
279
+ items: TItem[];
280
+ since: string;
281
+ }
282
+ export interface SdkPickResult<TItem> {
283
+ item: TItem | null;
284
+ leaseToken: string | null;
285
+ }
@@ -0,0 +1,109 @@
1
+ import type { AgentPermissionConfig, AgentRuntimeSpec } from './types/agents.ts';
2
+ import { ContentStore } from './content-store.ts';
3
+ import { type AgentDatabase } from './d1-store.ts';
4
+ import type { SdkAckMessageRequest, SdkClaimMessageRequest, SdkCreateMessageRequest, SdkCursorRequest, SdkFollowRequest, SdkGetRequest, SdkGetCursorRequest, SdkJsonEnvelope, SdkLeaseReleaseRequest, SdkMutationRequest, SdkPickRequest, SdkRecordRunRequest, SdkSearchRequest, SdkUpdateRequest } from './sdk-types.ts';
5
+ export interface AgentSdkOptions {
6
+ repoRoot?: string;
7
+ database?: AgentDatabase;
8
+ }
9
+ export declare class AgentSdk {
10
+ readonly database: AgentDatabase;
11
+ readonly content: ContentStore;
12
+ constructor(options?: AgentSdkOptions);
13
+ static createLocal(options: {
14
+ repoRoot?: string;
15
+ databaseName?: string;
16
+ persistTo?: string;
17
+ }): AgentSdk;
18
+ private envelope;
19
+ get(request: SdkGetRequest): Promise<SdkJsonEnvelope<Record<string, unknown> | import("./sdk-types.ts").SdkContentEntry | null>>;
20
+ read(request: SdkGetRequest): Promise<{
21
+ operation: "read";
22
+ ok: boolean;
23
+ model: import("./sdk-types.ts").SdkModelName;
24
+ payload: Record<string, unknown> | import("./sdk-types.ts").SdkContentEntry | null;
25
+ meta?: Record<string, unknown>;
26
+ }>;
27
+ search(request: SdkSearchRequest): Promise<SdkJsonEnvelope<Record<string, unknown>[] | import("./sdk-types.ts").SdkContentEntry[]>>;
28
+ follow(request: SdkFollowRequest): Promise<SdkJsonEnvelope<{
29
+ items: Record<string, unknown>[];
30
+ since: string;
31
+ } | {
32
+ items: import("./sdk-types.ts").SdkContentEntry[];
33
+ since: string;
34
+ }>>;
35
+ pick(request: SdkPickRequest): Promise<SdkJsonEnvelope<import("./sdk-types.ts").SdkPickResult<Record<string, unknown>> | import("./sdk-types.ts").SdkPickResult<import("./sdk-types.ts").SdkContentEntry>>>;
36
+ create(request: SdkMutationRequest): Promise<SdkJsonEnvelope<Record<string, unknown> | {
37
+ item: import("./sdk-types.ts").SdkContentEntry;
38
+ git: import("./git-runtime.ts").GitMutationResult;
39
+ }>>;
40
+ update(request: SdkUpdateRequest): Promise<SdkJsonEnvelope<Record<string, unknown> | {
41
+ item: import("./sdk-types.ts").SdkContentEntry;
42
+ git: import("./git-runtime.ts").GitMutationResult;
43
+ } | null>>;
44
+ claimMessage(request: SdkClaimMessageRequest): Promise<SdkJsonEnvelope<import("./sdk-types.ts").SdkMessageEntity | null>>;
45
+ ackMessage(request: SdkAckMessageRequest): Promise<SdkJsonEnvelope<{
46
+ id: number;
47
+ status: "pending" | "claimed" | "completed" | "failed" | "dead_letter";
48
+ }>>;
49
+ createMessage(request: SdkCreateMessageRequest): Promise<SdkJsonEnvelope<import("./sdk-types.ts").SdkMessageEntity>>;
50
+ recordRun(request: SdkRecordRunRequest): Promise<SdkJsonEnvelope<Record<string, unknown>>>;
51
+ getCursor(request: SdkGetCursorRequest): Promise<SdkJsonEnvelope<string | null>>;
52
+ upsertCursor(request: SdkCursorRequest): Promise<SdkJsonEnvelope<SdkCursorRequest>>;
53
+ releaseLease(request: SdkLeaseReleaseRequest): Promise<SdkJsonEnvelope<SdkLeaseReleaseRequest>>;
54
+ releaseAllLeases(): Promise<SdkJsonEnvelope<{
55
+ count: number;
56
+ }>>;
57
+ listAgentSpecs(options?: {
58
+ enabled?: boolean;
59
+ }): Promise<AgentRuntimeSpec[]>;
60
+ listRawAgentSpecs(options?: {
61
+ enabled?: boolean;
62
+ }): Promise<Record<string, unknown>[] | import("./sdk-types.ts").SdkContentEntry[]>;
63
+ scopeForAgent(agent: Pick<AgentRuntimeSpec, 'slug' | 'permissions'>): ScopedAgentSdk;
64
+ }
65
+ export declare class ScopedAgentSdk {
66
+ private readonly base;
67
+ private readonly actor;
68
+ private readonly permissions;
69
+ constructor(base: AgentSdk, actor: string, permissions: AgentPermissionConfig[]);
70
+ private assertAllowed;
71
+ get(request: SdkGetRequest): Promise<SdkJsonEnvelope<Record<string, unknown> | import("./sdk-types.ts").SdkContentEntry | null>>;
72
+ read(request: SdkGetRequest): Promise<{
73
+ operation: "read";
74
+ ok: boolean;
75
+ model: import("./sdk-types.ts").SdkModelName;
76
+ payload: Record<string, unknown> | import("./sdk-types.ts").SdkContentEntry | null;
77
+ meta?: Record<string, unknown>;
78
+ }>;
79
+ search(request: SdkSearchRequest): Promise<SdkJsonEnvelope<Record<string, unknown>[] | import("./sdk-types.ts").SdkContentEntry[]>>;
80
+ follow(request: SdkFollowRequest): Promise<SdkJsonEnvelope<{
81
+ items: Record<string, unknown>[];
82
+ since: string;
83
+ } | {
84
+ items: import("./sdk-types.ts").SdkContentEntry[];
85
+ since: string;
86
+ }>>;
87
+ pick(request: SdkPickRequest): Promise<SdkJsonEnvelope<import("./sdk-types.ts").SdkPickResult<Record<string, unknown>> | import("./sdk-types.ts").SdkPickResult<import("./sdk-types.ts").SdkContentEntry>>>;
88
+ create(request: Omit<SdkMutationRequest, 'actor'>): Promise<SdkJsonEnvelope<Record<string, unknown> | {
89
+ item: import("./sdk-types.ts").SdkContentEntry;
90
+ git: import("./git-runtime.ts").GitMutationResult;
91
+ }>>;
92
+ update(request: Omit<SdkUpdateRequest, 'actor'>): Promise<SdkJsonEnvelope<Record<string, unknown> | {
93
+ item: import("./sdk-types.ts").SdkContentEntry;
94
+ git: import("./git-runtime.ts").GitMutationResult;
95
+ } | null>>;
96
+ claimMessage(request: SdkClaimMessageRequest): Promise<SdkJsonEnvelope<import("./sdk-types.ts").SdkMessageEntity | null>>;
97
+ ackMessage(request: SdkAckMessageRequest): Promise<SdkJsonEnvelope<{
98
+ id: number;
99
+ status: "pending" | "claimed" | "completed" | "failed" | "dead_letter";
100
+ }>>;
101
+ createMessage(request: Omit<SdkCreateMessageRequest, 'actor'>): Promise<SdkJsonEnvelope<import("./sdk-types.ts").SdkMessageEntity>>;
102
+ recordRun(request: SdkRecordRunRequest): Promise<SdkJsonEnvelope<Record<string, unknown>>>;
103
+ getCursor(request: SdkGetCursorRequest): Promise<SdkJsonEnvelope<string | null>>;
104
+ upsertCursor(request: SdkCursorRequest): Promise<SdkJsonEnvelope<SdkCursorRequest>>;
105
+ releaseLease(request: SdkLeaseReleaseRequest): Promise<SdkJsonEnvelope<SdkLeaseReleaseRequest>>;
106
+ releaseAllLeases(): Promise<SdkJsonEnvelope<{
107
+ count: number;
108
+ }>>;
109
+ }
@@ -0,0 +1,10 @@
1
+ import type { SdkCursorEntity, SdkCursorRequest, SdkGetCursorRequest, SdkSearchRequest, SdkUpdateRequest } from '../sdk-types.ts';
2
+ import { SqliteStoreBase } from './helpers.ts';
3
+ export declare class CursorStore extends SqliteStoreBase {
4
+ private usesEnvelopeTable;
5
+ getByKey(key: string): Promise<SdkCursorEntity | null>;
6
+ get(request: SdkGetCursorRequest): Promise<string | null>;
7
+ search(request: SdkSearchRequest): Promise<SdkCursorEntity[]>;
8
+ upsert(request: SdkCursorRequest): Promise<void>;
9
+ update(request: SdkUpdateRequest): Promise<SdkCursorEntity | null>;
10
+ }
@@ -0,0 +1,116 @@
1
+ import type { SdkCursorEntity, SdkLeaseEntity, SdkMessageEntity, SdkRunEntity, SdkSubscriptionEntity, TreeseedAgentRunMeta, TreeseedAgentRunPayload, TreeseedContactSubmissionMeta, TreeseedContactSubmissionPayload, TreeseedCursorMeta, TreeseedCursorPayload, TreeseedLeaseMeta, TreeseedLeasePayload, TreeseedMessageMeta, TreeseedMessagePayload, TreeseedRecordEnvelope, TreeseedSubscriptionMeta, TreeseedSubscriptionPayload } from '../sdk-types.ts';
2
+ export declare const TRESEED_ENVELOPE_SCHEMA_VERSION = 1;
3
+ export interface RuntimeRecordRow {
4
+ id?: number;
5
+ record_type?: string;
6
+ record_key?: string | null;
7
+ lookup_key?: string | null;
8
+ secondary_key?: string | null;
9
+ status?: string;
10
+ schema_version?: number;
11
+ created_at?: string;
12
+ updated_at?: string;
13
+ payload_json?: string;
14
+ meta_json?: string;
15
+ }
16
+ export interface MessageQueueRow {
17
+ id?: number;
18
+ message_type?: string;
19
+ status?: string;
20
+ schema_version?: number;
21
+ related_model?: string | null;
22
+ related_id?: string | null;
23
+ priority?: number;
24
+ available_at?: string;
25
+ claimed_by?: string | null;
26
+ claimed_at?: string | null;
27
+ lease_expires_at?: string | null;
28
+ attempts?: number;
29
+ max_attempts?: number;
30
+ created_at?: string;
31
+ updated_at?: string;
32
+ payload_json?: string;
33
+ meta_json?: string;
34
+ }
35
+ export interface CursorStateRow {
36
+ agent_slug?: string;
37
+ cursor_key?: string;
38
+ status?: string;
39
+ schema_version?: number;
40
+ updated_at?: string;
41
+ payload_json?: string;
42
+ meta_json?: string;
43
+ }
44
+ export interface LeaseStateRow {
45
+ model?: string;
46
+ item_key?: string;
47
+ status?: string;
48
+ schema_version?: number;
49
+ claimed_by?: string | null;
50
+ claimed_at?: string | null;
51
+ lease_expires_at?: string | null;
52
+ created_at?: string;
53
+ updated_at?: string;
54
+ payload_json?: string;
55
+ meta_json?: string;
56
+ }
57
+ export declare function createSubscriptionEnvelope(input: {
58
+ email: string;
59
+ name?: string | null;
60
+ status?: string;
61
+ source?: string;
62
+ consentAt?: string | null;
63
+ ipHash?: string;
64
+ meta?: TreeseedSubscriptionMeta;
65
+ }): TreeseedRecordEnvelope<TreeseedSubscriptionPayload, TreeseedSubscriptionMeta>;
66
+ export declare function subscriptionEntityFromEnvelope(row: RuntimeRecordRow): SdkSubscriptionEntity;
67
+ export declare function createContactSubmissionEnvelope(input: {
68
+ name: string;
69
+ email: string;
70
+ organization?: string | null;
71
+ contactType: string;
72
+ subject: string;
73
+ message: string;
74
+ userAgent: string;
75
+ ipHash: string;
76
+ meta?: TreeseedContactSubmissionMeta;
77
+ }): TreeseedRecordEnvelope<TreeseedContactSubmissionPayload, TreeseedContactSubmissionMeta>;
78
+ export declare function createMessageEnvelope(input: {
79
+ type: string;
80
+ payload: Record<string, unknown>;
81
+ meta?: TreeseedMessageMeta;
82
+ }): TreeseedRecordEnvelope<TreeseedMessagePayload, TreeseedMessageMeta>;
83
+ export declare function messageEntityFromEnvelope(row: MessageQueueRow): SdkMessageEntity;
84
+ export declare function createRunEnvelope(input: {
85
+ runId: string;
86
+ agentSlug: string;
87
+ status: string;
88
+ triggerSource: string;
89
+ startedAt: string;
90
+ handlerKind?: string | null;
91
+ triggerKind?: string | null;
92
+ selectedItemKey?: string | null;
93
+ selectedMessageId?: number | null;
94
+ claimedMessageId?: number | null;
95
+ branchName?: string | null;
96
+ prUrl?: string | null;
97
+ summary?: string | null;
98
+ error?: string | null;
99
+ errorCategory?: string | null;
100
+ commitSha?: string | null;
101
+ changedPaths?: string[];
102
+ finishedAt?: string | null;
103
+ }): TreeseedRecordEnvelope<TreeseedAgentRunPayload, TreeseedAgentRunMeta>;
104
+ export declare function runEntityFromEnvelope(row: RuntimeRecordRow): SdkRunEntity;
105
+ export declare function createCursorEnvelope(input: {
106
+ agentSlug: string;
107
+ cursorKey: string;
108
+ cursorValue: string;
109
+ meta?: TreeseedCursorMeta;
110
+ }): TreeseedRecordEnvelope<TreeseedCursorPayload, TreeseedCursorMeta>;
111
+ export declare function cursorEntityFromEnvelope(row: CursorStateRow): SdkCursorEntity;
112
+ export declare function createLeaseEnvelope(input: {
113
+ token: string;
114
+ meta?: TreeseedLeaseMeta;
115
+ }): TreeseedRecordEnvelope<TreeseedLeasePayload, TreeseedLeaseMeta>;
116
+ export declare function leaseEntityFromEnvelope(row: LeaseStateRow): SdkLeaseEntity;
@@ -0,0 +1,12 @@
1
+ import type { D1DatabaseLike } from '../types/cloudflare.ts';
2
+ export type DatabaseRow = Record<string, unknown>;
3
+ export declare function nowIso(): string;
4
+ export declare function toSqlValue(value: unknown): string;
5
+ export declare class SqliteStoreBase {
6
+ protected readonly db: D1DatabaseLike;
7
+ constructor(db: D1DatabaseLike);
8
+ protected selectAll(query: string): Promise<DatabaseRow[]>;
9
+ protected selectFirst(query: string): Promise<DatabaseRow | null>;
10
+ protected execute(query: string): Promise<void>;
11
+ protected tableExists(tableName: string): Promise<boolean>;
12
+ }
@@ -0,0 +1,18 @@
1
+ import type { SdkLeaseEntity, SdkLeaseReleaseRequest, SdkSearchRequest, SdkUpdateRequest } from '../sdk-types.ts';
2
+ import { SqliteStoreBase } from './helpers.ts';
3
+ export interface LeaseClaimInput {
4
+ model: string;
5
+ itemKey: string;
6
+ claimedBy: string;
7
+ leaseSeconds: number;
8
+ }
9
+ export declare class LeaseStore extends SqliteStoreBase {
10
+ private usesEnvelopeTable;
11
+ getByKey(key: string): Promise<SdkLeaseEntity | null>;
12
+ search(request: SdkSearchRequest): Promise<SdkLeaseEntity[]>;
13
+ tryClaim(input: LeaseClaimInput): Promise<`${string}-${string}-${string}-${string}-${string}` | null>;
14
+ create(input: LeaseClaimInput): Promise<SdkLeaseEntity | null>;
15
+ release(request: SdkLeaseReleaseRequest): Promise<void>;
16
+ update(request: SdkUpdateRequest): Promise<SdkLeaseEntity | null>;
17
+ releaseAll(): Promise<number>;
18
+ }
@@ -0,0 +1,12 @@
1
+ import type { SdkAckMessageRequest, SdkClaimMessageRequest, SdkCreateMessageRequest, SdkMessageEntity, SdkSearchRequest, SdkUpdateRequest } from '../sdk-types.ts';
2
+ import { SqliteStoreBase, type DatabaseRow } from './helpers.ts';
3
+ export declare function messageFromRow(row: DatabaseRow): SdkMessageEntity;
4
+ export declare class MessageStore extends SqliteStoreBase {
5
+ private usesEnvelopeTable;
6
+ getById(id: number): Promise<SdkMessageEntity | null>;
7
+ search(request: SdkSearchRequest): Promise<SdkMessageEntity[]>;
8
+ claim(request: SdkClaimMessageRequest): Promise<SdkMessageEntity | null>;
9
+ ack(request: SdkAckMessageRequest): Promise<void>;
10
+ create(request: SdkCreateMessageRequest): Promise<SdkMessageEntity>;
11
+ update(request: SdkUpdateRequest): Promise<SdkMessageEntity | null>;
12
+ }
@@ -0,0 +1,10 @@
1
+ import type { SdkRecordRunRequest, SdkRunEntity, SdkSearchRequest, SdkUpdateRequest } from '../sdk-types.ts';
2
+ import { SqliteStoreBase } from './helpers.ts';
3
+ export declare function runFromRecord(row: Record<string, unknown>): SdkRunEntity;
4
+ export declare class RunStore extends SqliteStoreBase {
5
+ private usesEnvelopeTable;
6
+ getByKey(key: string): Promise<SdkRunEntity | null>;
7
+ search(request: SdkSearchRequest): Promise<SdkRunEntity[]>;
8
+ record(request: SdkRecordRunRequest): Promise<SdkRunEntity>;
9
+ update(request: SdkUpdateRequest): Promise<SdkRunEntity>;
10
+ }
@@ -0,0 +1,9 @@
1
+ import type { SdkMutationRequest, SdkSearchRequest, SdkSubscriptionEntity, SdkUpdateRequest } from '../sdk-types.ts';
2
+ import { SqliteStoreBase } from './helpers.ts';
3
+ export declare class SubscriptionStore extends SqliteStoreBase {
4
+ private usesEnvelopeTable;
5
+ getByKey(key: string): Promise<SdkSubscriptionEntity | null>;
6
+ search(request: SdkSearchRequest): Promise<SdkSubscriptionEntity[]>;
7
+ create(request: SdkMutationRequest): Promise<SdkSubscriptionEntity | null>;
8
+ update(request: SdkUpdateRequest): Promise<SdkSubscriptionEntity | null>;
9
+ }