videobook-engine 2.0.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 (103) hide show
  1. package/README.md +214 -0
  2. package/dist/artifacts.d.ts +20 -0
  3. package/dist/artifacts.d.ts.map +1 -0
  4. package/dist/artifacts.js +312 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/books.d.ts +7 -0
  7. package/dist/books.d.ts.map +1 -0
  8. package/dist/books.js +27 -0
  9. package/dist/books.js.map +1 -0
  10. package/dist/cas.d.ts +26 -0
  11. package/dist/cas.d.ts.map +1 -0
  12. package/dist/cas.js +139 -0
  13. package/dist/cas.js.map +1 -0
  14. package/dist/communications.d.ts +15 -0
  15. package/dist/communications.d.ts.map +1 -0
  16. package/dist/communications.js +139 -0
  17. package/dist/communications.js.map +1 -0
  18. package/dist/context.d.ts +42 -0
  19. package/dist/context.d.ts.map +1 -0
  20. package/dist/context.js +197 -0
  21. package/dist/context.js.map +1 -0
  22. package/dist/domain.d.ts +32 -0
  23. package/dist/domain.d.ts.map +1 -0
  24. package/dist/domain.js +399 -0
  25. package/dist/domain.js.map +1 -0
  26. package/dist/engine-types.d.ts +548 -0
  27. package/dist/engine-types.d.ts.map +1 -0
  28. package/dist/engine-types.js +10 -0
  29. package/dist/engine-types.js.map +1 -0
  30. package/dist/engine.d.ts +213 -0
  31. package/dist/engine.d.ts.map +1 -0
  32. package/dist/engine.js +130 -0
  33. package/dist/engine.js.map +1 -0
  34. package/dist/files.d.ts +28 -0
  35. package/dist/files.d.ts.map +1 -0
  36. package/dist/files.js +476 -0
  37. package/dist/files.js.map +1 -0
  38. package/dist/history-types.d.ts +74 -0
  39. package/dist/history-types.d.ts.map +1 -0
  40. package/dist/history-types.js +2 -0
  41. package/dist/history-types.js.map +1 -0
  42. package/dist/history.d.ts +20 -0
  43. package/dist/history.d.ts.map +1 -0
  44. package/dist/history.js +921 -0
  45. package/dist/history.js.map +1 -0
  46. package/dist/ids.d.ts +4 -0
  47. package/dist/ids.d.ts.map +1 -0
  48. package/dist/ids.js +14 -0
  49. package/dist/ids.js.map +1 -0
  50. package/dist/index.d.ts +16 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +12 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/job-queue.d.ts +51 -0
  55. package/dist/job-queue.d.ts.map +1 -0
  56. package/dist/job-queue.js +443 -0
  57. package/dist/job-queue.js.map +1 -0
  58. package/dist/media.d.ts +7 -0
  59. package/dist/media.d.ts.map +1 -0
  60. package/dist/media.js +60 -0
  61. package/dist/media.js.map +1 -0
  62. package/dist/metadata.d.ts +21 -0
  63. package/dist/metadata.d.ts.map +1 -0
  64. package/dist/metadata.js +222 -0
  65. package/dist/metadata.js.map +1 -0
  66. package/dist/notebook/types.d.ts +51 -0
  67. package/dist/notebook/types.d.ts.map +1 -0
  68. package/dist/notebook/types.js +2 -0
  69. package/dist/notebook/types.js.map +1 -0
  70. package/dist/resolver.d.ts +15 -0
  71. package/dist/resolver.d.ts.map +1 -0
  72. package/dist/resolver.js +81 -0
  73. package/dist/resolver.js.map +1 -0
  74. package/dist/runtime-services.d.ts +65 -0
  75. package/dist/runtime-services.d.ts.map +1 -0
  76. package/dist/runtime-services.js +584 -0
  77. package/dist/runtime-services.js.map +1 -0
  78. package/dist/schema.d.ts +7 -0
  79. package/dist/schema.d.ts.map +1 -0
  80. package/dist/schema.js +509 -0
  81. package/dist/schema.js.map +1 -0
  82. package/dist/similarity.d.ts +4 -0
  83. package/dist/similarity.d.ts.map +1 -0
  84. package/dist/similarity.js +1551 -0
  85. package/dist/similarity.js.map +1 -0
  86. package/dist/status.d.ts +9 -0
  87. package/dist/status.d.ts.map +1 -0
  88. package/dist/status.js +231 -0
  89. package/dist/status.js.map +1 -0
  90. package/dist/storage.d.ts +7 -0
  91. package/dist/storage.d.ts.map +1 -0
  92. package/dist/storage.js +129 -0
  93. package/dist/storage.js.map +1 -0
  94. package/dist/store.d.ts +55 -0
  95. package/dist/store.d.ts.map +1 -0
  96. package/dist/store.js +378 -0
  97. package/dist/store.js.map +1 -0
  98. package/dist/timeline.d.ts +9 -0
  99. package/dist/timeline.d.ts.map +1 -0
  100. package/dist/timeline.js +236 -0
  101. package/dist/timeline.js.map +1 -0
  102. package/docs/engine-layout.md +489 -0
  103. package/package.json +55 -0
@@ -0,0 +1,213 @@
1
+ import type { EngineConfig, SimilarityApi } from "./engine-types.js";
2
+ import { JobQueue } from "./job-queue.js";
3
+ export declare class Engine {
4
+ readonly book: {
5
+ get: () => import("./engine-types.js").Book;
6
+ rename: (slug: string) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Book, import("./engine-types.js").EngineError>>;
7
+ };
8
+ readonly artifacts: {
9
+ create: (input: import("./engine-types.js").CreateArtifactInput | string, name?: string) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Artifact, import("./engine-types.js").EngineError>>;
10
+ list: (options?: {
11
+ sort?: "newest" | "oldest";
12
+ }) => import("./engine-types.js").Artifact[];
13
+ get: (artifact: string) => import("./engine-types.js").Result<import("./engine-types.js").Artifact, import("./engine-types.js").EngineError>;
14
+ resolveSlug: (slug: string) => import("./engine-types.js").Result<import("./engine-types.js").Artifact, import("./engine-types.js").EngineError>;
15
+ isSlugAvailable: (slug: string) => boolean;
16
+ rename: (input: import("./engine-types.js").RenameArtifactInput | string, name?: string) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Artifact, import("./engine-types.js").EngineError>>;
17
+ delete: (artifact: string) => Promise<import("./engine-types.js").Result<{
18
+ artifactId: string;
19
+ slug: string;
20
+ }, import("./engine-types.js").EngineError>>;
21
+ };
22
+ readonly files: {
23
+ write: (artifact: string, filename: string, data: Buffer | string) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
24
+ writeFromPath: (artifact: string, filename: string, sourcePath: string) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
25
+ read: (artifact: string, filename: string) => Promise<import("./engine-types.js").Result<Buffer, import("./engine-types.js").EngineError>>;
26
+ delete: (artifact: string, filename: string) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
27
+ rename: (artifact: string, oldFilename: string, newFilename: string) => Promise<import("./engine-types.js").Result<{
28
+ oldPath: string;
29
+ newPath: string;
30
+ }, import("./engine-types.js").EngineError>>;
31
+ copy: (artifact: string, filename: string, destinationArtifact: string, destinationFilename: string) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
32
+ manifest: (artifact: string, options?: {
33
+ includeDotfiles?: boolean;
34
+ }) => Promise<import("./engine-types.js").Result<import("./engine-types.js").ArtifactManifest, import("./engine-types.js").EngineError>>;
35
+ listSubdir: (artifact: string, subdir: string) => import("./engine-types.js").Result<string[], import("./engine-types.js").EngineError>;
36
+ ingestWorkspace: (artifact: string, paths: string[], operation?: string, details?: Record<string, unknown>) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
37
+ readAtRevision: (artifactId: string, filename: string, revision: string) => Promise<import("./engine-types.js").Result<Buffer, import("./engine-types.js").EngineError>>;
38
+ importObject: (sourcePath: string) => Promise<import("./cas.js").StoredObject>;
39
+ };
40
+ readonly workspaces: {
41
+ resolveArtifact: (artifact: string) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
42
+ materialize: (artifact: string) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
43
+ evict: (artifact: string) => Promise<import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>>;
44
+ };
45
+ readonly metadata: {
46
+ artifacts: {
47
+ write: (artifact: string, key: string, value: unknown) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
48
+ read: <T>(artifact: string, key: string) => Promise<import("./engine-types.js").Result<T, import("./engine-types.js").EngineError>>;
49
+ readAtRevision: <T>(artifact: string, key: string, revision: string) => Promise<import("./engine-types.js").Result<T, import("./engine-types.js").EngineError>>;
50
+ delete: (artifact: string, key: string) => Promise<import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>>;
51
+ };
52
+ book: {
53
+ write: (key: string, value: unknown) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
54
+ read: <T>(key: string) => Promise<import("./engine-types.js").Result<T, import("./engine-types.js").EngineError>>;
55
+ delete: (key: string) => Promise<import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>>;
56
+ };
57
+ waveforms: {
58
+ write: (artifact: string, peaks: number[]) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
59
+ read: (artifact: string) => Promise<import("./engine-types.js").Result<import("./engine-types.js").AudioWaveformRecord, import("./engine-types.js").EngineError>>;
60
+ delete: (artifact: string) => Promise<import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>>;
61
+ };
62
+ };
63
+ readonly timeline: {
64
+ get: () => import("./engine-types.js").Timeline;
65
+ getAtRevision: (revision: string) => import("./engine-types.js").Result<import("./engine-types.js").Timeline, import("./engine-types.js").EngineError>;
66
+ set: (input: import("./engine-types.js").TimelineInput) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Timeline, import("./engine-types.js").EngineError>>;
67
+ reset: () => Promise<import("./engine-types.js").Result<import("./engine-types.js").Timeline, import("./engine-types.js").EngineError>>;
68
+ };
69
+ readonly entities: {
70
+ create: (type: import("./index.js").EntityType, name: string, input?: Partial<import("./index.js").EntityDocument>) => Promise<import("./engine-types.js").Result<import("./index.js").EntityDocument, import("./engine-types.js").EngineError>>;
71
+ list: (type?: import("./index.js").EntityType) => import("./index.js").EntityDocument[];
72
+ read: (entityId: string) => import("./engine-types.js").Result<import("./index.js").EntityDocument, import("./engine-types.js").EngineError>;
73
+ write: (entity: import("./index.js").EntityDocument) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Revision, import("./engine-types.js").EngineError>>;
74
+ delete: (entityId: string) => Promise<import("./engine-types.js").Result<{
75
+ entityId: string;
76
+ }, import("./engine-types.js").EngineError>>;
77
+ };
78
+ readonly notebooks: {
79
+ create: (name: string) => Promise<import("./engine-types.js").Result<import("./index.js").NotebookDocument, import("./engine-types.js").EngineError>>;
80
+ createCell: (input: Omit<import("./index.js").NotebookCell, "id"> & {
81
+ id?: string;
82
+ }) => import("./index.js").NotebookCell;
83
+ createEdge: (input: Omit<import("./index.js").NotebookEdge, "id"> & {
84
+ id?: string;
85
+ }) => import("./index.js").NotebookEdge;
86
+ list: () => import("./index.js").NotebookDocument[];
87
+ read: (notebookId: string) => import("./engine-types.js").Result<import("./index.js").NotebookDocument, import("./engine-types.js").EngineError>;
88
+ write: (notebook: import("./index.js").NotebookDocument) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Revision, import("./engine-types.js").EngineError>>;
89
+ delete: (notebookId: string) => Promise<import("./engine-types.js").Result<{
90
+ notebookId: string;
91
+ }, import("./engine-types.js").EngineError>>;
92
+ recordRun: (run: import("./index.js").NotebookRun) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Revision, import("./engine-types.js").EngineError>>;
93
+ };
94
+ readonly prompts: {
95
+ record: (input: import("./engine-types.js").RecordPromptArgs) => Promise<import("./engine-types.js").Result<import("./engine-types.js").PromptHistoryEntry, import("./engine-types.js").EngineError>>;
96
+ list: (options?: import("./engine-types.js").ListPromptHistoryArgs) => import("./engine-types.js").Result<import("./engine-types.js").PromptHistoryEntry[], import("./engine-types.js").EngineError>;
97
+ count: (options?: Pick<import("./engine-types.js").ListPromptHistoryArgs, "surface">) => import("./engine-types.js").Result<number, import("./engine-types.js").EngineError>;
98
+ };
99
+ readonly messages: {
100
+ append: <T extends Record<string, unknown>>(input: import("./engine-types.js").AppendMessageInput<T>) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Message<T>, import("./engine-types.js").EngineError>>;
101
+ list: <T = Record<string, unknown>>(options?: {
102
+ limit?: number;
103
+ role?: string;
104
+ }) => import("./engine-types.js").Result<import("./engine-types.js").Message<T>[], import("./engine-types.js").EngineError>;
105
+ };
106
+ readonly history: {
107
+ revisions: (limit?: number) => import("./engine-types.js").Revision[];
108
+ artifact: (artifact: string, limit?: number) => import("./engine-types.js").Revision[];
109
+ resolveRevision: (revision: string) => import("./engine-types.js").Revision | null;
110
+ recordOperation: (operation: string, artifact?: string, details?: Record<string, unknown>) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Revision, import("./engine-types.js").EngineError>>;
111
+ restoreArtifact: (artifactId: string, revision: string, slug?: string) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Revision, import("./engine-types.js").EngineError>>;
112
+ restore: (revision: string) => Promise<import("./engine-types.js").Result<import("./engine-types.js").Revision, import("./engine-types.js").EngineError>>;
113
+ logAction: (action: string, payload: string | Record<string, unknown>) => Promise<import("./engine-types.js").Result<import("./engine-types.js").ActionLogEntry, import("./engine-types.js").EngineError>>;
114
+ actionLog: (options?: {
115
+ limit?: number;
116
+ action?: string;
117
+ }) => import("./engine-types.js").ActionLogEntry[];
118
+ actions: (options?: import("./history-types.js").GetHistoryActionsOptions) => import("./engine-types.js").Result<import("./history-types.js").HistoryActionPage, import("./engine-types.js").EngineError>;
119
+ action: (actionId: string) => import("./engine-types.js").Result<import("./history-types.js").HistoryAction, import("./engine-types.js").EngineError>;
120
+ recordAction: (input: import("./history-types.js").RecordActionInput) => Promise<import("./engine-types.js").Result<import("./history-types.js").HistoryActionRevision, import("./engine-types.js").EngineError>>;
121
+ };
122
+ readonly status: {
123
+ get: (artifact: string, options?: import("./engine-types.js").GetArtifactStatusOptions) => Promise<import("./engine-types.js").Result<import("./engine-types.js").ArtifactStatus, import("./engine-types.js").EngineError>>;
124
+ compute: typeof import("./status.js").computeArtifactStatus;
125
+ };
126
+ readonly resolver: {
127
+ parseTags: typeof import("./resolver.js").parseArtifactTags;
128
+ resolveAll: (text: string) => Promise<import("./engine-types.js").Result<{
129
+ resolved: import("./engine-types.js").ResolvedArtifact[];
130
+ unresolved: string[];
131
+ }, import("./engine-types.js").EngineError>>;
132
+ expandSlotRefs: typeof import("./resolver.js").expandSlotRefs;
133
+ };
134
+ readonly storage: {
135
+ status: () => import("./engine-types.js").StorageStatus;
136
+ backup: () => Promise<import("./engine-types.js").Result<import("./engine-types.js").StorageStatus, import("./engine-types.js").EngineError>>;
137
+ };
138
+ readonly logs: {
139
+ append: (name: string, line: Record<string, unknown>) => Promise<import("./engine-types.js").Result<string, import("./engine-types.js").EngineError>>;
140
+ read: (name: string, options?: {
141
+ limit?: number;
142
+ }) => Record<string, unknown>[];
143
+ };
144
+ readonly settings: {
145
+ get: <T>(key: string) => T | null;
146
+ set: <T>(key: string, value: T) => import("./engine-types.js").Result<T, import("./engine-types.js").EngineError>;
147
+ delete: (key: string) => import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>;
148
+ };
149
+ readonly jobs: {
150
+ queue: JobQueue;
151
+ artifactWork: {
152
+ begin: (artifact: string, input: import("./engine-types.js").BeginArtifactWorkInput) => {
153
+ ownerId: string;
154
+ } | null;
155
+ complete: (artifact: string, ownerId: string) => boolean;
156
+ fail: (artifact: string, ownerId: string, failure: {
157
+ message: string;
158
+ code?: string;
159
+ }) => Promise<boolean>;
160
+ renew: (artifact: string, ownerId: string, extendMs: number) => boolean;
161
+ markSeen: (artifact: string) => boolean;
162
+ read: (artifact: string) => import("./engine-types.js").Result<import("./engine-types.js").ArtifactView | null, import("./engine-types.js").EngineError>;
163
+ list: () => import("./engine-types.js").Result<import("./engine-types.js").ArtifactView[], import("./engine-types.js").EngineError>;
164
+ };
165
+ pending: {
166
+ write: (input: import("./engine-types.js").WritePendingTaskInput, expectedOwnerId: string) => Promise<import("./engine-types.js").Result<import("./engine-types.js").WritePendingTaskResult | null, import("./engine-types.js").EngineError>>;
167
+ read: (artifact: string) => import("./engine-types.js").Result<import("./engine-types.js").PendingTask | null, import("./engine-types.js").EngineError>;
168
+ delete: (artifact: string, expectedTaskId?: string) => import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>;
169
+ markCompleting: (artifact: string) => import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>;
170
+ clearCompleting: (artifact: string) => import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>;
171
+ findAll: () => import("./engine-types.js").Result<import("./engine-types.js").PendingTask[], import("./engine-types.js").EngineError>;
172
+ findByExternalId: (taskId: string) => import("./engine-types.js").Result<import("./engine-types.js").PendingTask | null, import("./engine-types.js").EngineError>;
173
+ getOwner: (artifact: string, taskId: string) => string | null;
174
+ fail: (artifact: string, taskOrInfo: string | import("./engine-types.js").FailureInfo, maybeInfo?: import("./engine-types.js").FailureInfo) => Promise<import("./engine-types.js").Result<import("./engine-types.js").GenerationError | null, import("./engine-types.js").EngineError>>;
175
+ forceFail: (artifact: string, info: import("./engine-types.js").FailureInfo) => Promise<import("./engine-types.js").Result<import("./engine-types.js").GenerationError | null, import("./engine-types.js").EngineError>>;
176
+ };
177
+ failures: {
178
+ write: (artifact: string, info: import("./engine-types.js").FailureInfo) => Promise<import("./engine-types.js").Result<import("./engine-types.js").GenerationError, import("./engine-types.js").EngineError>>;
179
+ read: (artifact: string) => import("./engine-types.js").Result<import("./engine-types.js").GenerationError | null, import("./engine-types.js").EngineError>;
180
+ clear: (artifact: string) => Promise<import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>>;
181
+ findAll: () => import("./engine-types.js").Result<import("./engine-types.js").GenerationError[], import("./engine-types.js").EngineError>;
182
+ };
183
+ locks: {
184
+ acquire: (resource: string, options: import("./engine-types.js").LockOptions) => Promise<import("./engine-types.js").Result<import("./engine-types.js").LockData, import("./engine-types.js").EngineError>>;
185
+ release: (resource: string, ownerId?: string) => import("./engine-types.js").Result<boolean, import("./engine-types.js").EngineError>;
186
+ isLocked: (resource: string) => boolean;
187
+ get: (resource: string) => import("./engine-types.js").LockData | null;
188
+ cleanStale: (resource: string) => boolean;
189
+ };
190
+ recoverArtifact: (artifact: string) => import("./engine-types.js").Result<void, import("./engine-types.js").EngineError>;
191
+ recoverAll: () => import("./engine-types.js").Result<{
192
+ recovered: number;
193
+ }, import("./engine-types.js").EngineError>;
194
+ startReaper: (options: {
195
+ intervalMs: number;
196
+ }) => {
197
+ stop: () => void;
198
+ };
199
+ checkSchema: () => import("./engine-types.js").VersionCheckResult;
200
+ };
201
+ readonly similarity: SimilarityApi;
202
+ readonly ready: Promise<void>;
203
+ private readonly context;
204
+ private closed;
205
+ constructor(config: EngineConfig);
206
+ get head(): string;
207
+ initialize(): Promise<void>;
208
+ close(): void;
209
+ private reconcileTerminalJobs;
210
+ private recordTerminalJob;
211
+ }
212
+ export declare function createEngine(config: EngineConfig): Engine;
213
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAGZ,aAAa,EACd,MAAM,mBAAmB,CAAC;AAsB3B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK1C,qBAAa,MAAM;IACjB,QAAQ,CAAC,IAAI;;;MAAC;IACd,QAAQ,CAAC,SAAS;;;gBALE,CAAC;;;;;;;;;;MAKF;IACnB,QAAQ,CAAC,KAAK;;;;;;;;;;;2BA2BW,CAAC;;;;;;MA3BX;IACf,QAAQ,CAAC,UAAU;;;;MAAC;IACpB,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;;MAAC;IAClB,QAAQ,CAAC,QAAQ;;;;;MAAC;IAClB,QAAQ,CAAC,QAAQ;;;;;;;;MAAC;IAClB,QAAQ,CAAC,SAAS;;;;;;;;;;;;;;;MAAC;IACnB,QAAQ,CAAC,OAAO;;;;MAAC;IACjB,QAAQ,CAAC,QAAQ;;;iBAYd,CAAC;gBAAc,CAAC;;MAZD;IAClB,QAAQ,CAAC,OAAO;;;;;;;;;iBA8HN,CAAC;kBAAgB,CAAC;;;;;MA9HX;IACjB,QAAQ,CAAC,MAAM;;;MAAC;IAChB,QAAQ,CAAC,QAAQ;;;;;;;MAAC;IAClB,QAAQ,CAAC,OAAO;;;MAAC;IACjB,QAAQ,CAAC,IAAI;;;iBAyFH,CAAC;;MAzFG;IACd,QAAQ,CAAC,QAAQ;;;;MAAC;IAClB,QAAQ,CAAC,IAAI;;;;;;;;;oBAiI+4D,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAjI/4D;IACd,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,YAAY;IAwChC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,KAAK,IAAI,IAAI;YAMC,qBAAqB;YAmBrB,iBAAiB;CAsChC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAEzD"}
package/dist/engine.js ADDED
@@ -0,0 +1,130 @@
1
+ import { createBookApi } from "./books.js";
2
+ import { createArtifactsApi } from "./artifacts.js";
3
+ import { createFilesApi, createWorkspacesApi, } from "./files.js";
4
+ import { createMetadataApi } from "./metadata.js";
5
+ import { createEntitiesApi, createNotebooksApi, } from "./domain.js";
6
+ import { createMessagesApi, createPromptsApi, } from "./communications.js";
7
+ import { createHistoryApi } from "./history.js";
8
+ import { createRuntimeApi, createLogsApi } from "./runtime-services.js";
9
+ import { createStatusApi } from "./status.js";
10
+ import { createResolverApi } from "./resolver.js";
11
+ import { createStorageApi } from "./storage.js";
12
+ import { EngineContext } from "./context.js";
13
+ import { JobQueue } from "./job-queue.js";
14
+ import { canonicalJson } from "./store.js";
15
+ import { createSimilarityApi } from "./similarity.js";
16
+ import { createTimelineApi } from "./timeline.js";
17
+ export class Engine {
18
+ book;
19
+ artifacts;
20
+ files;
21
+ workspaces;
22
+ metadata;
23
+ timeline;
24
+ entities;
25
+ notebooks;
26
+ prompts;
27
+ messages;
28
+ history;
29
+ status;
30
+ resolver;
31
+ storage;
32
+ logs;
33
+ settings;
34
+ jobs;
35
+ similarity;
36
+ ready;
37
+ context;
38
+ closed = false;
39
+ constructor(config) {
40
+ this.context = new EngineContext(config);
41
+ this.book = createBookApi(this.context);
42
+ this.artifacts = createArtifactsApi(this.context);
43
+ this.files = createFilesApi(this.context);
44
+ this.workspaces = createWorkspacesApi(this.context);
45
+ this.metadata = createMetadataApi(this.context);
46
+ this.timeline = createTimelineApi(this.context);
47
+ this.entities = createEntitiesApi(this.context);
48
+ this.notebooks = createNotebooksApi(this.context);
49
+ this.prompts = createPromptsApi(this.context);
50
+ this.messages = createMessagesApi(this.context);
51
+ this.history = createHistoryApi(this.context);
52
+ this.status = createStatusApi(this.context);
53
+ this.resolver = createResolverApi(this.context);
54
+ this.storage = createStorageApi(this.context);
55
+ this.logs = createLogsApi(this.context);
56
+ const runtime = createRuntimeApi(this.context);
57
+ this.settings = runtime.settings;
58
+ this.similarity = createSimilarityApi(this.context);
59
+ const queue = new JobQueue(this.context.store, (reference) => this.context.artifactRow(reference).artifact_id, (job) => this.recordTerminalJob(job));
60
+ this.jobs = {
61
+ queue,
62
+ artifactWork: runtime.artifactWork,
63
+ pending: runtime.pending,
64
+ failures: runtime.failures,
65
+ locks: runtime.locks,
66
+ recoverArtifact: runtime.recoverArtifact,
67
+ recoverAll: runtime.recoverAll,
68
+ startReaper: runtime.startReaper,
69
+ checkSchema: runtime.checkSchema,
70
+ };
71
+ this.ready = this.reconcileTerminalJobs();
72
+ }
73
+ get head() {
74
+ return this.context.store.head;
75
+ }
76
+ async initialize() {
77
+ await this.reconcileTerminalJobs();
78
+ }
79
+ close() {
80
+ if (this.closed)
81
+ return;
82
+ this.closed = true;
83
+ this.context.close();
84
+ }
85
+ async reconcileTerminalJobs() {
86
+ const rows = this.context.store.db
87
+ .prepare(`SELECT j.id
88
+ FROM runtime_jobs j
89
+ LEFT JOIN job_runs r ON r.run_id=j.operation_id
90
+ WHERE j.state IN ('done','failed','aborted')
91
+ AND r.run_id IS NULL
92
+ ORDER BY j.finished_at, j.id`)
93
+ .all();
94
+ for (const row of rows) {
95
+ const job = this.jobs.queue.get(row.id);
96
+ if (job)
97
+ await this.recordTerminalJob(job);
98
+ }
99
+ }
100
+ async recordTerminalJob(job) {
101
+ if (!isTerminal(job.state))
102
+ return;
103
+ await this.context.store.semantic({
104
+ operation: `job_${job.state}`,
105
+ artifactId: job.artifactId ?? undefined,
106
+ details: {
107
+ jobOperationId: job.operationId,
108
+ jobId: job.id,
109
+ jobType: job.type,
110
+ state: job.state,
111
+ },
112
+ writeSet: [`job-run:${job.operationId}`],
113
+ }, ["job_runs"], (_operationId, now) => {
114
+ this.context.store.db
115
+ .prepare(`INSERT OR IGNORE INTO job_runs(
116
+ run_id, artifact_id, job_type, state,
117
+ payload_json, result_json, error_json,
118
+ started_at, finished_at
119
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
120
+ .run(job.operationId, job.artifactId, job.type, job.state, canonicalJson(job.payload), job.result === null ? null : canonicalJson(job.result), job.error === null ? null : canonicalJson(job.error), job.startedAt, job.finishedAt ?? now);
121
+ });
122
+ }
123
+ }
124
+ export function createEngine(config) {
125
+ return new Engine(config);
126
+ }
127
+ function isTerminal(state) {
128
+ return state === "done" || state === "failed" || state === "aborted";
129
+ }
130
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { ArtifactManifest, EngineError, Result } from "./engine-types.js";
2
+ import { EngineContext } from "./context.js";
3
+ export declare function createFilesApi(context: EngineContext): {
4
+ write: (artifact: string, filename: string, data: Buffer | string) => Promise<Result<string, EngineError>>;
5
+ writeFromPath: (artifact: string, filename: string, sourcePath: string) => Promise<Result<string, EngineError>>;
6
+ read: (artifact: string, filename: string) => Promise<Result<Buffer, EngineError>>;
7
+ delete: (artifact: string, filename: string) => Promise<Result<string, EngineError>>;
8
+ rename: (artifact: string, oldFilename: string, newFilename: string) => Promise<Result<{
9
+ oldPath: string;
10
+ newPath: string;
11
+ }, EngineError>>;
12
+ copy: (artifact: string, filename: string, destinationArtifact: string, destinationFilename: string) => Promise<Result<string, EngineError>>;
13
+ manifest: (artifact: string, options?: {
14
+ includeDotfiles?: boolean;
15
+ }) => Promise<Result<ArtifactManifest, EngineError>>;
16
+ listSubdir: (artifact: string, subdir: string) => Result<string[], EngineError>;
17
+ ingestWorkspace: (artifact: string, paths: string[], operation?: string, details?: Record<string, unknown>) => Promise<Result<string, EngineError>>;
18
+ readAtRevision: (artifactId: string, filename: string, revision: string) => Promise<Result<Buffer, EngineError>>;
19
+ importObject: (sourcePath: string) => Promise<import("./cas.js").StoredObject>;
20
+ };
21
+ export declare function createWorkspacesApi(context: EngineContext): {
22
+ resolveArtifact: (artifact: string) => Promise<Result<string, EngineError>>;
23
+ materialize: (artifact: string) => Promise<Result<string, EngineError>>;
24
+ evict: (artifact: string) => Promise<Result<boolean, EngineError>>;
25
+ };
26
+ export declare function materializeArtifact(context: EngineContext, artifactId: string): Promise<string>;
27
+ export declare function normalizeFilePath(input: string): string;
28
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAEhB,WAAW,EACX,MAAM,EACP,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAA0B,MAAM,cAAc,CAAC;AASrE,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa;sBAGrC,MAAM,YACN,MAAM,QACV,MAAM,GAAG,MAAM,KACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;8BAG3B,MAAM,YACN,MAAM,cACJ,MAAM,KACjB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;qBAG3B,MAAM,YACN,MAAM,KACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;uBAE3B,MAAM,YACN,MAAM,KACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;uBAE3B,MAAM,eACH,MAAM,eACN,MAAM,KAClB,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,WAAW,CAAC,CAAC;qBAGzD,MAAM,YACN,MAAM,uBACK,MAAM,uBACN,MAAM,KAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;yBAS3B,MAAM,YACN;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,KACtC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;2BAGrC,MAAM,UACR,MAAM,KACb,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC;gCAEpB,MAAM,SACT,MAAM,EAAE,gCAEN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;iCAGzB,MAAM,YACR,MAAM,YACN,MAAM,KACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;+BAEZ,MAAM;EAEpC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa;gCAE1B,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;4BAEjD,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;sBAEnD,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;EAGnE;AAicD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,aAAa,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAqID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWvD"}