@bifrost-ai/interfaces-work 0.1.1-build.1783540132209

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.
@@ -0,0 +1,71 @@
1
+ //#region src/types.d.ts
2
+ type WorkItem = {
3
+ workItemId: string;
4
+ kind: string;
5
+ name: string;
6
+ state: Record<string, unknown>;
7
+ readonly metadata: Record<string, unknown>;
8
+ };
9
+ type WorkItemDependency = {
10
+ workItemId: string;
11
+ type: string;
12
+ };
13
+ type CreateDraftWorkItemInput = {
14
+ kind: string;
15
+ name: string;
16
+ state?: Record<string, unknown>;
17
+ metadata?: Record<string, unknown>;
18
+ };
19
+ type WorkItemSource = {
20
+ watchWorkItems: () => AsyncGenerator<WorkItem>;
21
+ completeWorkItem: (workItemId: string) => Promise<void>;
22
+ failWorkItem: (workItemId: string, error: string) => Promise<void>;
23
+ pauseWorkItem: (workItemId: string) => Promise<void>;
24
+ setState: (workItemId: string, state: Record<string, unknown>) => Promise<void>;
25
+ createDraftWorkItem(input: CreateDraftWorkItemInput): Promise<string>;
26
+ startWorkItem(workItemId: string): Promise<void>;
27
+ setDependency(workItemId: string, dependsOnWorkItemId: string, type?: string): Promise<void>;
28
+ getDependencies(workItemId: string): Promise<WorkItemDependency[]>;
29
+ };
30
+ declare function isWorkItem(value: unknown): value is WorkItem;
31
+ declare function missingWorkItemFields(value: unknown): string[];
32
+ declare function missingWorkItemFieldsMessage(missing: string[]): string;
33
+ type ExecutionStats = {
34
+ durationMs: number;
35
+ inputTokens: number;
36
+ outputTokens: number;
37
+ cacheReadTokens: number;
38
+ cacheCreationTokens: number;
39
+ totalCostUsd: number;
40
+ numTurns: number;
41
+ };
42
+ type Registry<T> = {
43
+ get(name: string): T | undefined;
44
+ has(name: string): boolean;
45
+ register(name: string, item: T): void;
46
+ };
47
+ type DataRegistry<T extends Record<string, unknown>> = {
48
+ get<K extends keyof T & string>(type: K): Registry<T[K]>;
49
+ };
50
+ type WorkItemHandlerRegistry = {
51
+ get(kind: string, name: string): WorkItemHandler | undefined;
52
+ has(kind: string, name: string): boolean;
53
+ };
54
+ type WorkItemExecutionContext<TData extends Record<string, unknown> = Record<string, unknown>> = {
55
+ readonly data: DataRegistry<TData>;
56
+ readonly handlers: WorkItemHandlerRegistry;
57
+ setState: (state: Record<string, unknown>) => Promise<void>;
58
+ };
59
+ type WorkItemResult = {
60
+ outcome: "completed" | "failed" | "paused";
61
+ message?: string;
62
+ telemetry?: ExecutionStats;
63
+ };
64
+ type WorkItemHandler<TData extends Record<string, unknown> = Record<string, unknown>> = {
65
+ kind: string;
66
+ name: string;
67
+ run: (workItem: WorkItem, ctx: WorkItemExecutionContext<TData>) => Promise<WorkItemResult>;
68
+ };
69
+ declare function isWorkItemHandler(value: unknown): value is WorkItemHandler;
70
+ //#endregion
71
+ export { type CreateDraftWorkItemInput, type DataRegistry, type ExecutionStats, type Registry, type WorkItem, type WorkItemDependency, type WorkItemExecutionContext, type WorkItemHandler, type WorkItemHandlerRegistry, type WorkItemResult, type WorkItemSource, isWorkItemHandler, missingWorkItemFields, missingWorkItemFieldsMessage, isWorkItem as validateWorkItem };
package/dist/index.mjs ADDED
@@ -0,0 +1,38 @@
1
+ //#region src/types.ts
2
+ const REQUIRED_WORK_ITEM_FIELDS = [
3
+ "workItemId",
4
+ "kind",
5
+ "name"
6
+ ];
7
+ function isWorkItem(value) {
8
+ if (value === null || typeof value !== "object") return false;
9
+ const record = value;
10
+ if (typeof record.workItemId !== "string" || record.workItemId.length === 0 || typeof record.kind !== "string" || record.kind.length === 0 || typeof record.name !== "string" || record.name.length === 0 || record.state === null || typeof record.state !== "object" || record.metadata === null || typeof record.metadata !== "object") return false;
11
+ return true;
12
+ }
13
+ function missingWorkItemFields(value) {
14
+ if (value === null || typeof value !== "object") return [
15
+ ...REQUIRED_WORK_ITEM_FIELDS,
16
+ "state",
17
+ "metadata"
18
+ ];
19
+ const record = value;
20
+ const missing = [];
21
+ for (const field of REQUIRED_WORK_ITEM_FIELDS) if (!(field in record) || record[field] === void 0) missing.push(field);
22
+ if (!(record.state !== null && typeof record.state === "object")) missing.push("state");
23
+ if (!(record.metadata !== null && typeof record.metadata === "object")) missing.push("metadata");
24
+ if (typeof record.workItemId === "string" && record.workItemId.length === 0) missing.push("workItemId");
25
+ if (typeof record.name === "string" && record.name.length === 0) missing.push("name");
26
+ if (typeof record.kind === "string" && record.kind.length === 0) missing.push("kind");
27
+ return [...new Set(missing)];
28
+ }
29
+ function missingWorkItemFieldsMessage(missing) {
30
+ return `Work item is missing required fields: ${missing.join(", ")}`;
31
+ }
32
+ function isWorkItemHandler(value) {
33
+ if (value === null || typeof value !== "object") return false;
34
+ const record = value;
35
+ return typeof record.kind === "string" && typeof record.name === "string" && typeof record.run === "function";
36
+ }
37
+ //#endregion
38
+ export { isWorkItemHandler, missingWorkItemFields, missingWorkItemFieldsMessage, isWorkItem as validateWorkItem };
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@bifrost-ai/interfaces-work",
3
+ "version": "0.1.1-build.1783540132209",
4
+ "description": "Work item contracts for Bifrost orchestrator v2",
5
+ "license": "MIT",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "type": "module",
10
+ "exports": {
11
+ ".": "./dist/index.mjs",
12
+ "./package.json": "./package.json"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^25.6.2",
19
+ "@typescript/native-preview": "latest",
20
+ "bumpp": "^11.1.0",
21
+ "typescript": "^6.0.3",
22
+ "vite-plus": "^0.2.0"
23
+ },
24
+ "scripts": {
25
+ "build": "vp pack",
26
+ "dev": "vp pack --watch",
27
+ "test": "vp test --passWithNoTests",
28
+ "check": "vp check"
29
+ }
30
+ }