@hasna/todos 0.15.52 → 0.16.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.
Files changed (183) hide show
  1. package/CHANGELOG.md +1884 -0
  2. package/README.md +314 -37
  3. package/dist/ai-tools.d.ts.map +1 -1
  4. package/dist/ai.d.ts.map +1 -1
  5. package/dist/cli/cloud-router.d.ts +99 -51
  6. package/dist/cli/cloud-router.d.ts.map +1 -1
  7. package/dist/cli/commands/agent-commands.d.ts.map +1 -1
  8. package/dist/cli/commands/config-serve-commands.d.ts.map +1 -1
  9. package/dist/cli/commands/delegate.d.ts.map +1 -1
  10. package/dist/cli/commands/environment-snapshots.d.ts.map +1 -1
  11. package/dist/cli/commands/machines-api.d.ts +4 -0
  12. package/dist/cli/commands/machines-api.d.ts.map +1 -0
  13. package/dist/cli/commands/machines.d.ts.map +1 -1
  14. package/dist/cli/commands/mcp-hooks-commands.d.ts.map +1 -1
  15. package/dist/cli/commands/plan-commands.d.ts +3 -0
  16. package/dist/cli/commands/plan-commands.d.ts.map +1 -0
  17. package/dist/cli/commands/plan-template-commands.d.ts.map +1 -1
  18. package/dist/cli/commands/pr-group-commands.d.ts.map +1 -1
  19. package/dist/cli/commands/project-commands.d.ts.map +1 -1
  20. package/dist/cli/commands/query-commands.d.ts.map +1 -1
  21. package/dist/cli/commands/storage-commands.d.ts.map +1 -1
  22. package/dist/cli/commands/task-list-commands.d.ts +3 -0
  23. package/dist/cli/commands/task-list-commands.d.ts.map +1 -0
  24. package/dist/cli/commands/template-commands.d.ts +3 -0
  25. package/dist/cli/commands/template-commands.d.ts.map +1 -0
  26. package/dist/cli/helpers.d.ts.map +1 -1
  27. package/dist/cli/index.js +15128 -11093
  28. package/dist/cli/machine-api.d.ts +7 -0
  29. package/dist/cli/machine-api.d.ts.map +1 -0
  30. package/dist/cli/plan-read-api.d.ts +6 -0
  31. package/dist/cli/plan-read-api.d.ts.map +1 -0
  32. package/dist/cli/project-api.d.ts +119 -0
  33. package/dist/cli/project-api.d.ts.map +1 -0
  34. package/dist/cli/stage-a.d.ts +34 -4
  35. package/dist/cli/stage-a.d.ts.map +1 -1
  36. package/dist/cli/task-query-api.d.ts +21 -0
  37. package/dist/cli/task-query-api.d.ts.map +1 -0
  38. package/dist/cli/template-api.d.ts +7 -0
  39. package/dist/cli/template-api.d.ts.map +1 -0
  40. package/dist/contracts.js +835 -265
  41. package/dist/db/builtin-templates.d.ts +2 -33
  42. package/dist/db/builtin-templates.d.ts.map +1 -1
  43. package/dist/db/database.d.ts.map +1 -1
  44. package/dist/db/handoffs.d.ts.map +1 -1
  45. package/dist/db/machines.d.ts.map +1 -1
  46. package/dist/db/migrations.d.ts.map +1 -1
  47. package/dist/db/plans.d.ts.map +1 -1
  48. package/dist/db/retrospectives.d.ts.map +1 -1
  49. package/dist/db/schema.d.ts.map +1 -1
  50. package/dist/db/task-lists.d.ts.map +1 -1
  51. package/dist/db/task-runs.d.ts +2 -0
  52. package/dist/db/task-runs.d.ts.map +1 -1
  53. package/dist/index.d.ts +2 -2
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3862 -1715
  56. package/dist/lib/assignee-validation.d.ts.map +1 -1
  57. package/dist/lib/builtin-template-library.d.ts +32 -0
  58. package/dist/lib/builtin-template-library.d.ts.map +1 -0
  59. package/dist/lib/cli-reference.d.ts.map +1 -1
  60. package/dist/lib/config.d.ts +10 -13
  61. package/dist/lib/config.d.ts.map +1 -1
  62. package/dist/lib/db-backup.d.ts +1 -1
  63. package/dist/lib/db-backup.d.ts.map +1 -1
  64. package/dist/lib/env.d.ts +18 -0
  65. package/dist/lib/env.d.ts.map +1 -0
  66. package/dist/lib/environment-snapshots.d.ts.map +1 -1
  67. package/dist/lib/gatherer.d.ts.map +1 -1
  68. package/dist/lib/headless-boundaries.d.ts +4 -3
  69. package/dist/lib/headless-boundaries.d.ts.map +1 -1
  70. package/dist/lib/local-encryption.d.ts +12 -0
  71. package/dist/lib/local-encryption.d.ts.map +1 -1
  72. package/dist/lib/local-opt-in.d.ts +90 -0
  73. package/dist/lib/local-opt-in.d.ts.map +1 -0
  74. package/dist/lib/paths.d.ts +9 -0
  75. package/dist/lib/paths.d.ts.map +1 -1
  76. package/dist/lib/plan-artifacts.d.ts +1 -0
  77. package/dist/lib/plan-artifacts.d.ts.map +1 -1
  78. package/dist/lib/plan-client-boundary.d.ts +2 -0
  79. package/dist/lib/plan-client-boundary.d.ts.map +1 -0
  80. package/dist/lib/plan-schedule.d.ts +6 -0
  81. package/dist/lib/plan-schedule.d.ts.map +1 -0
  82. package/dist/lib/project-panel.d.ts +6 -0
  83. package/dist/lib/project-panel.d.ts.map +1 -1
  84. package/dist/lib/project-receipt.d.ts +3 -0
  85. package/dist/lib/project-receipt.d.ts.map +1 -0
  86. package/dist/lib/sandbox-profiles.d.ts.map +1 -1
  87. package/dist/lib/shared-plan-artifacts.d.ts +14 -0
  88. package/dist/lib/shared-plan-artifacts.d.ts.map +1 -0
  89. package/dist/lib/sync.d.ts.map +1 -1
  90. package/dist/lib/task-list-client-boundary.d.ts +3 -0
  91. package/dist/lib/task-list-client-boundary.d.ts.map +1 -0
  92. package/dist/lib/task-routing.d.ts.map +1 -1
  93. package/dist/lib/template-client-boundary.d.ts +2 -0
  94. package/dist/lib/template-client-boundary.d.ts.map +1 -0
  95. package/dist/mcp/index.d.ts +1 -0
  96. package/dist/mcp/index.d.ts.map +1 -1
  97. package/dist/mcp/index.js +45271 -40452
  98. package/dist/mcp/plan-api.d.ts +6 -0
  99. package/dist/mcp/plan-api.d.ts.map +1 -0
  100. package/dist/mcp/remote-authority.d.ts +49 -0
  101. package/dist/mcp/remote-authority.d.ts.map +1 -0
  102. package/dist/mcp/task-coordination-api.d.ts +15 -0
  103. package/dist/mcp/task-coordination-api.d.ts.map +1 -0
  104. package/dist/mcp/task-list-api.d.ts +8 -0
  105. package/dist/mcp/task-list-api.d.ts.map +1 -0
  106. package/dist/mcp/token-utils.d.ts.map +1 -1
  107. package/dist/mcp/tools/environment-snapshots.d.ts.map +1 -1
  108. package/dist/mcp/tools/machines.d.ts.map +1 -1
  109. package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
  110. package/dist/mcp/tools/task-resources.d.ts.map +1 -1
  111. package/dist/mcp.d.ts +2 -2
  112. package/dist/mcp.d.ts.map +1 -1
  113. package/dist/mcp.js +44 -18
  114. package/dist/project-registration.js +2829 -556
  115. package/dist/registry.js +836 -266
  116. package/dist/release-provenance.json +6 -6
  117. package/dist/sdk/client.d.ts +51 -4
  118. package/dist/sdk/client.d.ts.map +1 -1
  119. package/dist/sdk/index.d.ts +2 -0
  120. package/dist/sdk/index.d.ts.map +1 -1
  121. package/dist/sdk/index.js +1209 -1080
  122. package/dist/sdk/resolve.d.ts +91 -0
  123. package/dist/sdk/resolve.d.ts.map +1 -0
  124. package/dist/sdk/v1.generated.d.ts +219 -3
  125. package/dist/sdk/v1.generated.d.ts.map +1 -1
  126. package/dist/server/auth-posture.d.ts +66 -7
  127. package/dist/server/auth-posture.d.ts.map +1 -1
  128. package/dist/server/client-ip.d.ts +39 -0
  129. package/dist/server/client-ip.d.ts.map +1 -0
  130. package/dist/server/cloud.d.ts +2 -1
  131. package/dist/server/cloud.d.ts.map +1 -1
  132. package/dist/server/index.d.ts +1 -1
  133. package/dist/server/index.js +20556 -15541
  134. package/dist/server/openapi.d.ts +1341 -83
  135. package/dist/server/openapi.d.ts.map +1 -1
  136. package/dist/server/port.d.ts +2 -2
  137. package/dist/server/port.d.ts.map +1 -1
  138. package/dist/server/routes.d.ts +3 -6
  139. package/dist/server/routes.d.ts.map +1 -1
  140. package/dist/server/serve.d.ts +2 -6
  141. package/dist/server/serve.d.ts.map +1 -1
  142. package/dist/server/v1.d.ts +3 -1
  143. package/dist/server/v1.d.ts.map +1 -1
  144. package/dist/storage/atomic-project-migration.d.ts +53 -0
  145. package/dist/storage/atomic-project-migration.d.ts.map +1 -0
  146. package/dist/storage/index.d.ts +3 -1
  147. package/dist/storage/index.d.ts.map +1 -1
  148. package/dist/storage/interfaces.d.ts +61 -0
  149. package/dist/storage/interfaces.d.ts.map +1 -1
  150. package/dist/storage/machine-registry.d.ts +36 -0
  151. package/dist/storage/machine-registry.d.ts.map +1 -0
  152. package/dist/storage/postgres-adapter.d.ts.map +1 -1
  153. package/dist/storage/postgres-sync.d.ts +2 -2
  154. package/dist/storage/postgres-sync.d.ts.map +1 -1
  155. package/dist/storage/run-artifact-creation-upload.d.ts +50 -0
  156. package/dist/storage/run-artifact-creation-upload.d.ts.map +1 -0
  157. package/dist/storage/s3-artifact-sync.d.ts +18 -0
  158. package/dist/storage/s3-artifact-sync.d.ts.map +1 -1
  159. package/dist/storage/sqlite-snapshot.d.ts +2 -0
  160. package/dist/storage/sqlite-snapshot.d.ts.map +1 -1
  161. package/dist/storage.d.ts +2 -2
  162. package/dist/storage.d.ts.map +1 -1
  163. package/dist/storage.js +2695 -322
  164. package/dist/task-manifest/postgres.d.ts +1 -1
  165. package/dist/task-manifest/sqlite.d.ts +1 -1
  166. package/dist/task-manifest.js +244 -73
  167. package/dist/task-subtree-transfer.js +198 -4
  168. package/dist/testing.d.ts +90 -29
  169. package/dist/testing.d.ts.map +1 -1
  170. package/dist/testing.js +34 -10
  171. package/dist/types/index.d.ts +40 -4
  172. package/dist/types/index.d.ts.map +1 -1
  173. package/docs/PLAN_API.md +93 -0
  174. package/docs/TASK_LIST_API.md +58 -0
  175. package/docs/TASK_QUERY_API.md +14 -0
  176. package/docs/TEMPLATE_API.md +18 -0
  177. package/docs/native-storage.md +405 -0
  178. package/package.json +18 -15
  179. package/postinstall.js +52 -1
  180. package/dashboard/dist/assets/index-BNQ4gJua.js +0 -342
  181. package/dashboard/dist/assets/index-DjzvHUWt.css +0 -1
  182. package/dashboard/dist/index.html +0 -13
  183. package/dashboard/dist/logo.jpg +0 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Upload a run artifact to the configured S3 bucket at creation time.
3
+ *
4
+ * The artifact-remote kit pattern (hasna/apps#1639): every run artifact that
5
+ * gets stored locally is mirrored to the configured object store as soon as
6
+ * the row is created, so the bytes never live only on the station that
7
+ * produced them. The object is content-addressed under
8
+ * `artifacts/<task_id>/<sha256>` (inside the configured bucket prefix), and
9
+ * the remote reference is recorded on the artifact row's metadata, which makes
10
+ * `todos storage artifacts download` able to restore the bytes on any machine.
11
+ *
12
+ * Fail-soft by contract: when no bucket is configured the artifacts stay
13
+ * local-only (the pre-existing behaviour); when credentials are missing or the
14
+ * upload fails, the artifact row is still created and the failure is reported
15
+ * in the return value instead of being thrown. Callers that live in
16
+ * short-lived processes (the CLI `runs artifact` command, MCP tools) await
17
+ * this before they return.
18
+ */
19
+ import type { Database } from "bun:sqlite";
20
+ import { type TodosStorageEnv } from "./config.js";
21
+ import { type TodosRunArtifactRemoteRef } from "./s3-artifact-sync.js";
22
+ import { type TodosS3ArtifactStore, type TodosAwsCredentials } from "./s3-artifacts.js";
23
+ export interface UploadRunArtifactAtCreationInput {
24
+ /** The `task_run_artifacts` row id created by `addTaskRunArtifact`. */
25
+ artifactId: string;
26
+ db?: Database;
27
+ /** Env to read the bucket/prefix/credentials from. Defaults to `process.env`. */
28
+ env?: TodosStorageEnv;
29
+ /** Injectable store (tests). When omitted, one is built from the env config. */
30
+ store?: TodosS3ArtifactStore;
31
+ now?: () => Date;
32
+ }
33
+ export type RunArtifactCreationUploadReason = "uploaded" | "already_remote" | "s3_not_configured" | "s3_credentials_missing" | "artifact_not_found" | "no_local_content" | "upload_error";
34
+ export interface RunArtifactCreationUploadReport {
35
+ /** True when the artifact content lives in S3 (uploaded now or before). */
36
+ uploaded: boolean;
37
+ reason: RunArtifactCreationUploadReason;
38
+ ref?: TodosRunArtifactRemoteRef;
39
+ error?: string;
40
+ }
41
+ /**
42
+ * Upload the stored content of a freshly created run artifact to the
43
+ * configured S3 bucket, then record the remote reference on the artifact row.
44
+ * Never throws; every failure mode is reported in the result instead.
45
+ */
46
+ export declare function uploadRunArtifactAtCreation(input: UploadRunArtifactAtCreationInput): Promise<RunArtifactCreationUploadReport>;
47
+ /** Read creation-time S3 credentials from the canonical or fallback env names. */
48
+ /** Read creation-time S3 credentials from the canonical or fallback env names. */
49
+ export declare function creationCredentialsFromEnv(env: TodosStorageEnv): TodosAwsCredentials | null;
50
+ //# sourceMappingURL=run-artifact-creation-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-artifact-creation-upload.d.ts","sourceRoot":"","sources":["../../src/storage/run-artifact-creation-upload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAAyE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1H,OAAO,EAKL,KAAK,yBAAyB,EAC/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA8B,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEpH,MAAM,WAAW,gCAAgC;IAC/C,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,iFAAiF;IACjF,GAAG,CAAC,EAAE,eAAe,CAAC;IACtB,gFAAgF;IAChF,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,MAAM,+BAA+B,GACvC,UAAU,GACV,gBAAgB,GAChB,mBAAmB,GACnB,wBAAwB,GACxB,oBAAoB,GACpB,kBAAkB,GAClB,cAAc,CAAC;AAEnB,MAAM,WAAW,+BAA+B;IAC9C,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,+BAA+B,CAAC;IACxC,GAAG,CAAC,EAAE,yBAAyB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,+BAA+B,CAAC,CAgE1C;AAED,kFAAkF;AAElF,kFAAkF;AAClF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,GAAG,mBAAmB,GAAG,IAAI,CAM3F"}
@@ -4,7 +4,15 @@ export interface TodosRunArtifactRemoteRef {
4
4
  provider: "s3";
5
5
  bucket: string;
6
6
  key: string;
7
+ /** S3 object path relative to the configured bucket prefix. */
7
8
  relative_path: string;
9
+ /**
10
+ * Local content-address (`sha256/<xx>/<hash>`) the downloaded bytes restore
11
+ * to. `relative_path` is the object path; the local store is separately
12
+ * content-addressed, so a remote ref written before this field existed
13
+ * falls back to `relative_path`.
14
+ */
15
+ local_path?: string;
8
16
  url: string;
9
17
  sha256: string;
10
18
  size_bytes: number;
@@ -72,4 +80,14 @@ export interface PlanRunArtifactsS3SyncOptions {
72
80
  export declare function uploadRunArtifactsToS3(options: UploadRunArtifactsToS3Options): Promise<TodosRunArtifactSyncResult>;
73
81
  export declare function planRunArtifactsS3Sync(options: PlanRunArtifactsS3SyncOptions): TodosRunArtifactSyncPlan;
74
82
  export declare function downloadRunArtifactsFromS3(options: DownloadRunArtifactsFromS3Options): Promise<TodosRunArtifactSyncResult>;
83
+ /**
84
+ * Content-address for a run artifact object, relative to the configured bucket
85
+ * prefix: `artifacts/<task_id>/<sha256>`. The digest is the whole name, so the
86
+ * object is immutable and identical bytes are never stored twice. Used both by
87
+ * the creation-time upload and by the batch `storage artifacts upload`.
88
+ */
89
+ export declare function remoteArtifactKey(taskId: string, sha256: string): string;
90
+ export declare function updateArtifactMetadata(db: Database, id: string, metadata: Record<string, unknown>): void;
91
+ export declare function parseMetadata(value: unknown): Record<string, unknown>;
92
+ export declare function remoteRef(metadata: Record<string, unknown>): TodosRunArtifactRemoteRef | null;
75
93
  //# sourceMappingURL=s3-artifact-sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"s3-artifact-sync.d.ts","sourceRoot":"","sources":["../../src/storage/s3-artifact-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3-artifact-sync.d.ts","sourceRoot":"","sources":["../../src/storage/s3-artifact-sync.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,6 @@ import type { Database } from "bun:sqlite";
2
2
  import type { TodosStorageImportResult, TodosStorageSnapshot } from "./interfaces.js";
3
3
  export declare function exportSqliteTodosStorageSnapshot(db?: Database): TodosStorageSnapshot;
4
4
  export declare function importSqliteTodosStorageSnapshot(snapshot: TodosStorageSnapshot, db?: Database): TodosStorageImportResult;
5
+ /** Never discard malformed metadata during migration; the ordinary display mapper is intentionally forgiving. */
6
+ export declare function exportSqliteMachines(db: Database): import("../types/index.js").Machine[];
5
7
  //# sourceMappingURL=sqlite-snapshot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-snapshot.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAiB7D,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAiEzB,wBAAgB,gCAAgC,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,oBAAoB,CAgBpF;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,oBAAoB,EAC9B,EAAE,CAAC,EAAE,QAAQ,GACZ,wBAAwB,CAgF1B"}
1
+ {"version":3,"file":"sqlite-snapshot.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAiB7D,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EAGrB,MAAM,iBAAiB,CAAC;AAiEzB,wBAAgB,gCAAgC,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,oBAAoB,CAiBpF;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,oBAAoB,EAC9B,EAAE,CAAC,EAAE,QAAQ,GACZ,wBAAwB,CAgG1B;AAkPD,iHAAiH;AACjH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,mBAAmB,EAAE,OAAO,EAAE,CAQxF"}
package/dist/storage.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export type { MaybePromise, ActiveWorkItem, TodosActiveWorkFilter, TodosAgentUpdateInput, TodosAgentStore, TodosAuditStore, TodosCommentListOptions, TodosPlanStore, TodosProjectStore, TodosIntegrityStore, TodosStorageAdapter, TodosStorageCapabilities, TodosStorageContext, TodosStorageImportResult, TodosStorageKind, TodosStorageSnapshot, TodosSyncStore, TodosTaskClaimFilter, TodosTaskCompletionOptions, TodosTaskFailureOptions, TodosTaskFailureResult, TodosTaskListStore, TodosTaskStore, TodosTemplateStore, UpdateTemplateInput, } from "./storage/index.js";
2
- export { CANONICAL_TODOS_RDS_CLUSTER_ENV, CANONICAL_TODOS_RDS_DATABASE, CANONICAL_TODOS_RDS_RUNTIME_PATH_ENV, STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV, TODOS_STORAGE_TABLES, assertTodosRemoteStorageConfig, assertTodosShadowConfig, isTodosShadowEnabled, getTodosStorageShadowEnvName, createLocalSqliteTodosStorageAdapter, createHybridTodosStorageAdapter, createShadowTodosStorageAdapter, TodosShadowOutbox, createTodosShadowOutbox, installShadowOutboxSchema, maybeInstallShadowCapture, getRuntimeShadowOutbox, startRuntimeShadowDrain, registerShadowExitFlush, closeRuntimeShadowCloud, createTodosCloudQueryClient, createTodosCloudQueryClientFromEnv, TodosShadowMirror, createTodosStorageAdapter, exportSqliteTodosStorageSnapshot, importSqliteTodosStorageSnapshot, isTodosPostgresBackend, loadTodosStorageConfig, parseStorageBackend, planRunArtifactsS3Sync, createPostgresTodosStorageAdapter, createPostgresTodosSyncStore, createTodosS3ArtifactStore, COMMENT_REDACTION_BACKFILL_CONFIRMATION, backfillPostgresCommentRedaction, isCommentRedactionBackfillComplete, ensurePostgresScopedSlugUniqueIndexes, PostgresScopedSlugIndexBuildError, PostgresScopedSlugMigrationConflictError, postgresTodosCommentCursorIndexSql, postgresTodosScopedSlugPreflightSql, postgresTodosScopedSlugIndexStatusSql, postgresTodosScopedSlugUniqueIndexSql, postgresTodosSyncSchemaSql, signAwsV4Request, uploadRunArtifactsToS3, downloadRunArtifactsFromS3, getCanonicalTodosRdsConfig, getStorageDatabaseEnv, getStorageDatabaseUrl, getTodosStorageDatabaseEnv, getTodosStorageDatabaseUrl, getTodosStorageEnvName, getTodosStorageBackend, buildS3ObjectKey, buildS3ObjectUrl, loadStorageConfig, } from "./storage/index.js";
2
+ export { CANONICAL_TODOS_RDS_CLUSTER_ENV, CANONICAL_TODOS_RDS_DATABASE, CANONICAL_TODOS_RDS_RUNTIME_PATH_ENV, STORAGE_TABLES, TODOS_STORAGE_ENV, TODOS_STORAGE_FALLBACK_ENV, TODOS_STORAGE_TABLES, assertTodosRemoteStorageConfig, assertTodosShadowConfig, isTodosShadowEnabled, getTodosStorageShadowEnvName, createLocalSqliteTodosStorageAdapter, createHybridTodosStorageAdapter, createShadowTodosStorageAdapter, TodosShadowOutbox, createTodosShadowOutbox, installShadowOutboxSchema, maybeInstallShadowCapture, getRuntimeShadowOutbox, startRuntimeShadowDrain, registerShadowExitFlush, closeRuntimeShadowCloud, createTodosCloudQueryClient, createTodosCloudQueryClientFromEnv, TodosShadowMirror, createTodosStorageAdapter, exportSqliteTodosStorageSnapshot, importSqliteTodosStorageSnapshot, isTodosPostgresBackend, loadTodosStorageConfig, parseStorageBackend, planRunArtifactsS3Sync, createPostgresTodosStorageAdapter, createPostgresTodosSyncStore, createTodosS3ArtifactStore, COMMENT_REDACTION_BACKFILL_CONFIRMATION, backfillPostgresCommentRedaction, isCommentRedactionBackfillComplete, ensurePostgresScopedSlugUniqueIndexes, PostgresScopedSlugIndexBuildError, PostgresScopedSlugMigrationConflictError, postgresTodosCommentCursorIndexSql, postgresTodosScopedSlugPreflightSql, postgresTodosScopedSlugIndexStatusSql, postgresTodosScopedSlugUniqueIndexSql, postgresTodosSyncSchemaSql, signAwsV4Request, uploadRunArtifactsToS3, downloadRunArtifactsFromS3, uploadRunArtifactAtCreation, remoteArtifactKey, getCanonicalTodosRdsConfig, getStorageDatabaseEnv, getStorageDatabaseUrl, getTodosStorageDatabaseEnv, getTodosStorageDatabaseUrl, getTodosStorageEnvName, getTodosStorageBackend, buildS3ObjectKey, buildS3ObjectUrl, loadStorageConfig, } from "./storage/index.js";
3
3
  export type { CreateLocalSqliteTodosStorageAdapterOptions } from "./storage/index.js";
4
4
  export type { CreateShadowTodosStorageAdapterOptions, ShadowTodosStorageAdapter, TodosShadowMirrorEvent, TodosShadowMirrorMetrics, CreateTodosShadowOutboxOptions, TodosShadowOutboxEvent, TodosShadowOutboxStats, CreateTodosCloudQueryClientOptions, TodosCloudQueryClient, } from "./storage/index.js";
5
- export type { CanonicalTodosRdsConfig, CommentRedactionBackfillOptions, CommentRedactionBackfillResult, CreateHybridTodosStorageAdapterOptions, CreatePostgresTodosStorageAdapterOptions, CreatePostgresTodosSyncStoreOptions, CreateTodosStorageAdapterOptions, DownloadRunArtifactsFromS3Options, HybridTodosRemoteSync, HybridTodosStorageAdapter, HybridTodosStorageSyncResult, PostgresTodosSyncPushResult, PostgresScopedSlugConflict, PostgresScopedSlugIndexStatus, PlanRunArtifactsS3SyncOptions, PullPostgresTodosSnapshotOptions, PutTodosS3ObjectInput, SignAwsV4RequestInput, SignedAwsV4Request, TodosAwsCredentials, TodosPostgresQueryClient, TodosPostgresQueryResult, TodosPostgresSyncRecordRow, TodosPostgresSyncRecordType, TodosPostgresStorageConfig, TodosS3StorageConfig, TodosS3ArtifactStore, TodosS3ArtifactStoreOptions, TodosS3ObjectRef, TodosRunArtifactRemoteRef, TodosRunArtifactSyncFilter, TodosRunArtifactSyncPlan, TodosRunArtifactSyncResult, TodosStorageBackend, TodosStorageConfig, TodosStorageEnv, TodosStorageTable, TodosSyncConfig, UploadRunArtifactsToS3Options, } from "./storage/index.js";
5
+ export type { CanonicalTodosRdsConfig, CommentRedactionBackfillOptions, CommentRedactionBackfillResult, CreateHybridTodosStorageAdapterOptions, CreatePostgresTodosStorageAdapterOptions, CreatePostgresTodosSyncStoreOptions, CreateTodosStorageAdapterOptions, DownloadRunArtifactsFromS3Options, HybridTodosRemoteSync, HybridTodosStorageAdapter, HybridTodosStorageSyncResult, PostgresTodosSyncPushResult, PostgresScopedSlugConflict, PostgresScopedSlugIndexStatus, PlanRunArtifactsS3SyncOptions, PullPostgresTodosSnapshotOptions, PutTodosS3ObjectInput, SignAwsV4RequestInput, SignedAwsV4Request, TodosAwsCredentials, TodosPostgresQueryClient, TodosPostgresQueryResult, TodosPostgresSyncRecordRow, TodosPostgresSyncRecordType, TodosPostgresStorageConfig, TodosS3StorageConfig, TodosS3ArtifactStore, TodosS3ArtifactStoreOptions, TodosS3ObjectRef, TodosRunArtifactRemoteRef, TodosRunArtifactSyncFilter, TodosRunArtifactSyncPlan, TodosRunArtifactSyncResult, TodosStorageBackend, TodosStorageConfig, TodosStorageEnv, TodosStorageTable, TodosSyncConfig, UploadRunArtifactsToS3Options, RunArtifactCreationUploadReason, RunArtifactCreationUploadReport, UploadRunArtifactAtCreationInput, } from "./storage/index.js";
6
6
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,oCAAoC,EACpC,cAAc,EACd,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,oCAAoC,EACpC,+BAA+B,EAC/B,+BAA+B,EAC/B,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,kCAAkC,EAClC,iBAAiB,EACjB,yBAAyB,EACzB,gCAAgC,EAChC,gCAAgC,EAChC,sBAAsB,EACpB,sBAAsB,EACxB,mBAAmB,EACjB,sBAAsB,EACxB,iCAAiC,EACjC,4BAA4B,EAC5B,0BAA0B,EAC1B,uCAAuC,EACvC,gCAAgC,EAChC,kCAAkC,EAClC,qCAAqC,EACrC,iCAAiC,EACjC,wCAAwC,EACxC,kCAAkC,EAClC,mCAAmC,EACnC,qCAAqC,EACrC,qCAAqC,EACrC,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACnB,0BAA0B,EAC5B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACpB,gBAAgB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,2CAA2C,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EACV,sCAAsC,EACtC,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,kCAAkC,EAClC,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,8BAA8B,EAC9B,sCAAsC,EACtC,wCAAwC,EACxC,mCAAmC,EACnC,gCAAgC,EAChC,iCAAiC,EACjC,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,6BAA6B,EAC7B,gCAAgC,EAChC,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,oCAAoC,EACpC,cAAc,EACd,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,oCAAoC,EACpC,+BAA+B,EAC/B,+BAA+B,EAC/B,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,kCAAkC,EAClC,iBAAiB,EACjB,yBAAyB,EACzB,gCAAgC,EAChC,gCAAgC,EAChC,sBAAsB,EACpB,sBAAsB,EACxB,mBAAmB,EACjB,sBAAsB,EACxB,iCAAiC,EACjC,4BAA4B,EAC5B,0BAA0B,EAC1B,uCAAuC,EACvC,gCAAgC,EAChC,kCAAkC,EAClC,qCAAqC,EACrC,iCAAiC,EACjC,wCAAwC,EACxC,kCAAkC,EAClC,mCAAmC,EACnC,qCAAqC,EACrC,qCAAqC,EACrC,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACnB,0BAA0B,EAC5B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACpB,gBAAgB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,2CAA2C,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EACV,sCAAsC,EACtC,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,kCAAkC,EAClC,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,8BAA8B,EAC9B,sCAAsC,EACtC,wCAAwC,EACxC,mCAAmC,EACnC,gCAAgC,EAChC,iCAAiC,EACjC,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,6BAA6B,EAC7B,gCAAgC,EAChC,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,oBAAoB,CAAC"}