@components-kit/open-workbook-excel-core 0.1.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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -0
  3. package/dist/backup-manager.d.ts +31 -0
  4. package/dist/backup-manager.d.ts.map +1 -0
  5. package/dist/backup-manager.js +61 -0
  6. package/dist/backup-manager.js.map +1 -0
  7. package/dist/batch-compiler.d.ts +11 -0
  8. package/dist/batch-compiler.d.ts.map +1 -0
  9. package/dist/batch-compiler.js +103 -0
  10. package/dist/batch-compiler.js.map +1 -0
  11. package/dist/chunking.d.ts +6 -0
  12. package/dist/chunking.d.ts.map +1 -0
  13. package/dist/chunking.js +19 -0
  14. package/dist/chunking.js.map +1 -0
  15. package/dist/conflicts.d.ts +26 -0
  16. package/dist/conflicts.d.ts.map +1 -0
  17. package/dist/conflicts.js +269 -0
  18. package/dist/conflicts.js.map +1 -0
  19. package/dist/fingerprint.d.ts +6 -0
  20. package/dist/fingerprint.d.ts.map +1 -0
  21. package/dist/fingerprint.js +41 -0
  22. package/dist/fingerprint.js.map +1 -0
  23. package/dist/formula-dependencies.d.ts +16 -0
  24. package/dist/formula-dependencies.d.ts.map +1 -0
  25. package/dist/formula-dependencies.js +453 -0
  26. package/dist/formula-dependencies.js.map +1 -0
  27. package/dist/index.d.ts +15 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +15 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/lock-manager.d.ts +39 -0
  32. package/dist/lock-manager.d.ts.map +1 -0
  33. package/dist/lock-manager.js +246 -0
  34. package/dist/lock-manager.js.map +1 -0
  35. package/dist/permissions.d.ts +11 -0
  36. package/dist/permissions.d.ts.map +1 -0
  37. package/dist/permissions.js +21 -0
  38. package/dist/permissions.js.map +1 -0
  39. package/dist/plan-manager.d.ts +37 -0
  40. package/dist/plan-manager.d.ts.map +1 -0
  41. package/dist/plan-manager.js +167 -0
  42. package/dist/plan-manager.js.map +1 -0
  43. package/dist/range-address.d.ts +16 -0
  44. package/dist/range-address.d.ts.map +1 -0
  45. package/dist/range-address.js +90 -0
  46. package/dist/range-address.js.map +1 -0
  47. package/dist/snapshot-manager.d.ts +20 -0
  48. package/dist/snapshot-manager.d.ts.map +1 -0
  49. package/dist/snapshot-manager.js +64 -0
  50. package/dist/snapshot-manager.js.map +1 -0
  51. package/dist/task-registry.d.ts +34 -0
  52. package/dist/task-registry.d.ts.map +1 -0
  53. package/dist/task-registry.js +141 -0
  54. package/dist/task-registry.js.map +1 -0
  55. package/dist/template-registry.d.ts +46 -0
  56. package/dist/template-registry.d.ts.map +1 -0
  57. package/dist/template-registry.js +60 -0
  58. package/dist/template-registry.js.map +1 -0
  59. package/dist/transaction-manager.d.ts +33 -0
  60. package/dist/transaction-manager.d.ts.map +1 -0
  61. package/dist/transaction-manager.js +118 -0
  62. package/dist/transaction-manager.js.map +1 -0
  63. package/package.json +51 -0
@@ -0,0 +1,20 @@
1
+ import { type A1Range, type DiffSummary, type SnapshotId, type SnapshotRef, type WorkbookId, type WorkbookSnapshotResponse } from "@components-kit/open-workbook-protocol";
2
+ export interface WorkbookSnapshotRecord extends SnapshotRef {
3
+ payload: WorkbookSnapshotResponse;
4
+ invalidatedAt?: string;
5
+ }
6
+ export declare class SnapshotManager {
7
+ private readonly snapshots;
8
+ createSnapshot(input: {
9
+ workbookId: WorkbookId;
10
+ reason: string;
11
+ affectedRanges: A1Range[];
12
+ payload: WorkbookSnapshotResponse;
13
+ }): WorkbookSnapshotRecord;
14
+ getSnapshot(snapshotId: SnapshotId): WorkbookSnapshotRecord | undefined;
15
+ listSnapshots(workbookId: WorkbookId): WorkbookSnapshotRecord[];
16
+ invalidate(snapshotId: SnapshotId): WorkbookSnapshotRecord | undefined;
17
+ deleteSnapshot(snapshotId: SnapshotId): boolean;
18
+ compare(leftId: SnapshotId, rightId: SnapshotId): DiffSummary | undefined;
19
+ }
20
+ //# sourceMappingURL=snapshot-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-manager.d.ts","sourceRoot":"","sources":["../src/snapshot-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,wBAAwB,EAE9B,MAAM,wCAAwC,CAAC;AAEhD,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,OAAO,EAAE,wBAAwB,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAE3E,cAAc,CAAC,KAAK,EAAE;QACpB,UAAU,EAAE,UAAU,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,EAAE,wBAAwB,CAAC;KACnC,GAAG,sBAAsB;IAc1B,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,sBAAsB,GAAG,SAAS;IAIvE,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,sBAAsB,EAAE;IAM/D,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,sBAAsB,GAAG,SAAS;IAStE,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAI/C,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS;CAiC1E"}
@@ -0,0 +1,64 @@
1
+ import { makeId } from "@components-kit/open-workbook-protocol";
2
+ export class SnapshotManager {
3
+ snapshots = new Map();
4
+ createSnapshot(input) {
5
+ const snapshotId = makeId("snapshot");
6
+ const snapshot = {
7
+ snapshotId,
8
+ workbookId: input.workbookId,
9
+ createdAt: new Date().toISOString(),
10
+ reason: input.reason,
11
+ affectedRanges: input.affectedRanges,
12
+ payload: input.payload
13
+ };
14
+ this.snapshots.set(snapshotId, snapshot);
15
+ return snapshot;
16
+ }
17
+ getSnapshot(snapshotId) {
18
+ return this.snapshots.get(snapshotId);
19
+ }
20
+ listSnapshots(workbookId) {
21
+ return [...this.snapshots.values()]
22
+ .filter((snapshot) => snapshot.workbookId === workbookId)
23
+ .sort((a, b) => b.createdAt.localeCompare(a.createdAt));
24
+ }
25
+ invalidate(snapshotId) {
26
+ const snapshot = this.snapshots.get(snapshotId);
27
+ if (!snapshot) {
28
+ return undefined;
29
+ }
30
+ snapshot.invalidatedAt = new Date().toISOString();
31
+ return snapshot;
32
+ }
33
+ deleteSnapshot(snapshotId) {
34
+ return this.snapshots.delete(snapshotId);
35
+ }
36
+ compare(leftId, rightId) {
37
+ const left = this.snapshots.get(leftId);
38
+ const right = this.snapshots.get(rightId);
39
+ if (!left || !right) {
40
+ return undefined;
41
+ }
42
+ const changedRanges = [];
43
+ let cellsChanged = 0;
44
+ for (const rightRange of right.payload.rangeSnapshots) {
45
+ const leftRange = left.payload.rangeSnapshots.find((candidate) => candidate.fingerprint.range.sheetName === rightRange.fingerprint.range.sheetName &&
46
+ candidate.fingerprint.range.address === rightRange.fingerprint.range.address);
47
+ if (!leftRange || leftRange.fingerprint.hash !== rightRange.fingerprint.hash) {
48
+ changedRanges.push(rightRange.fingerprint.range);
49
+ cellsChanged += rightRange.fingerprint.cellCount;
50
+ }
51
+ }
52
+ return {
53
+ title: `Snapshot diff ${leftId} -> ${rightId}`,
54
+ changedRanges,
55
+ cellsChanged,
56
+ formulasChanged: 0,
57
+ stylesChanged: 0,
58
+ tablesChanged: 0,
59
+ sheetsChanged: left.payload.workbookFingerprint.structureHash === right.payload.workbookFingerprint.structureHash ? 0 : 1,
60
+ destructiveLevel: changedRanges.length > 0 ? "values" : "none"
61
+ };
62
+ }
63
+ }
64
+ //# sourceMappingURL=snapshot-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-manager.js","sourceRoot":"","sources":["../src/snapshot-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { AgentId, TaskBlocker, TaskId, WorkbookId, WorkbookScope } from "@components-kit/open-workbook-protocol";
2
+ import { type TaskRecord, type TransactionId, type PlanId, type BackupId } from "@components-kit/open-workbook-protocol";
3
+ export interface CreateTaskInput {
4
+ workbookId: WorkbookId;
5
+ goal: string;
6
+ role?: string | undefined;
7
+ priority?: TaskRecord["priority"] | undefined;
8
+ assignedAgentId?: AgentId | undefined;
9
+ allowedScopes?: WorkbookScope[] | undefined;
10
+ dependencies?: TaskId[] | undefined;
11
+ }
12
+ export declare class TaskRegistry {
13
+ private readonly tasks;
14
+ create(input: CreateTaskInput): TaskRecord;
15
+ claim(taskId: TaskId, agentId: AgentId): TaskRecord;
16
+ update(taskId: TaskId, patch: Partial<Pick<TaskRecord, "goal" | "role" | "priority" | "status" | "progress" | "currentStep" | "blockers" | "assignedAgentId" | "allowedScopes" | "dependencies" | "errorMessage">>): TaskRecord;
17
+ setProgress(taskId: TaskId, progress: number, currentStep?: string | undefined): TaskRecord;
18
+ addBlocker(taskId: TaskId, input: Pick<TaskBlocker, "message" | "severity"> & {
19
+ scope?: TaskBlocker["scope"] | undefined;
20
+ }): TaskRecord;
21
+ resolveBlocker(taskId: TaskId, blockerId: string): TaskRecord;
22
+ attachPlan(taskId: TaskId, planId: PlanId): TaskRecord | undefined;
23
+ attachTransaction(taskId: TaskId, transactionId: TransactionId): TaskRecord | undefined;
24
+ attachBackups(taskId: TaskId, backupIds: BackupId[]): TaskRecord | undefined;
25
+ complete(taskId: TaskId): TaskRecord;
26
+ fail(taskId: TaskId, errorMessage: string): TaskRecord;
27
+ cancel(taskId: TaskId): TaskRecord;
28
+ get(taskId: TaskId): TaskRecord | undefined;
29
+ list(workbookId?: WorkbookId): TaskRecord[];
30
+ load(records: TaskRecord[]): void;
31
+ dump(): TaskRecord[];
32
+ private require;
33
+ }
34
+ //# sourceMappingURL=task-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-registry.d.ts","sourceRoot":"","sources":["../src/task-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACtH,OAAO,EAAU,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAEjI,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IAC9C,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACrC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU;IA4B1C,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU;IAInD,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CACZ,IAAI,CACF,UAAU,EACV,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,iBAAiB,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CAC1J,CACF,GACA,UAAU;IAYb,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU;IAK3F,UAAU,CACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,CAAC,GAAG;QACjD,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;KAC1C,GACA,UAAU;IAeb,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;IAgB7D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAUlE,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS;IAUvF,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,GAAG,SAAS;IAU5E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAIpC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU;IAItD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAIlC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI3C,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE;IAM3C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAWjC,IAAI,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO;CAOhB"}
@@ -0,0 +1,141 @@
1
+ import { makeId } from "@components-kit/open-workbook-protocol";
2
+ export class TaskRegistry {
3
+ tasks = new Map();
4
+ create(input) {
5
+ const now = new Date().toISOString();
6
+ const task = {
7
+ taskId: makeId("task"),
8
+ workbookId: input.workbookId,
9
+ goal: input.goal,
10
+ priority: input.priority ?? "normal",
11
+ status: input.assignedAgentId ? "claimed" : "open",
12
+ progress: 0,
13
+ blockers: [],
14
+ allowedScopes: input.allowedScopes ?? [],
15
+ dependencies: input.dependencies ?? [],
16
+ planIds: [],
17
+ transactionIds: [],
18
+ rollbackBackupIds: [],
19
+ createdAt: now,
20
+ updatedAt: now
21
+ };
22
+ if (input.role !== undefined) {
23
+ task.role = input.role;
24
+ }
25
+ if (input.assignedAgentId !== undefined) {
26
+ task.assignedAgentId = input.assignedAgentId;
27
+ }
28
+ this.tasks.set(task.taskId, task);
29
+ return task;
30
+ }
31
+ claim(taskId, agentId) {
32
+ return this.update(taskId, { assignedAgentId: agentId, status: "claimed" });
33
+ }
34
+ update(taskId, patch) {
35
+ const task = this.require(taskId);
36
+ Object.assign(task, patch, { updatedAt: new Date().toISOString() });
37
+ if (patch.status === "completed") {
38
+ task.completedAt = new Date().toISOString();
39
+ }
40
+ if (patch.status === "failed") {
41
+ task.failedAt = new Date().toISOString();
42
+ }
43
+ return task;
44
+ }
45
+ setProgress(taskId, progress, currentStep) {
46
+ const clamped = Math.max(0, Math.min(100, Math.round(progress)));
47
+ return this.update(taskId, currentStep === undefined ? { progress: clamped } : { progress: clamped, currentStep });
48
+ }
49
+ addBlocker(taskId, input) {
50
+ const task = this.require(taskId);
51
+ const blocker = {
52
+ blockerId: makeId("blocker"),
53
+ message: input.message,
54
+ severity: input.severity,
55
+ status: "open",
56
+ createdAt: new Date().toISOString()
57
+ };
58
+ if (input.scope !== undefined) {
59
+ blocker.scope = input.scope;
60
+ }
61
+ return this.update(taskId, { blockers: [...task.blockers, blocker], status: input.severity === "blocked" ? "blocked" : task.status });
62
+ }
63
+ resolveBlocker(taskId, blockerId) {
64
+ const task = this.require(taskId);
65
+ const now = new Date().toISOString();
66
+ return this.update(taskId, {
67
+ blockers: task.blockers.map((blocker) => blocker.blockerId === blockerId
68
+ ? {
69
+ ...blocker,
70
+ status: "resolved",
71
+ resolvedAt: now
72
+ }
73
+ : blocker)
74
+ });
75
+ }
76
+ attachPlan(taskId, planId) {
77
+ const task = this.tasks.get(taskId);
78
+ if (!task) {
79
+ return undefined;
80
+ }
81
+ task.planIds = [...new Set([...task.planIds, planId])];
82
+ task.updatedAt = new Date().toISOString();
83
+ return task;
84
+ }
85
+ attachTransaction(taskId, transactionId) {
86
+ const task = this.tasks.get(taskId);
87
+ if (!task) {
88
+ return undefined;
89
+ }
90
+ task.transactionIds = [...new Set([...task.transactionIds, transactionId])];
91
+ task.updatedAt = new Date().toISOString();
92
+ return task;
93
+ }
94
+ attachBackups(taskId, backupIds) {
95
+ const task = this.tasks.get(taskId);
96
+ if (!task) {
97
+ return undefined;
98
+ }
99
+ task.rollbackBackupIds = [...new Set([...task.rollbackBackupIds, ...backupIds])];
100
+ task.updatedAt = new Date().toISOString();
101
+ return task;
102
+ }
103
+ complete(taskId) {
104
+ return this.update(taskId, { status: "completed" });
105
+ }
106
+ fail(taskId, errorMessage) {
107
+ return this.update(taskId, { status: "failed", errorMessage });
108
+ }
109
+ cancel(taskId) {
110
+ return this.update(taskId, { status: "cancelled" });
111
+ }
112
+ get(taskId) {
113
+ return this.tasks.get(taskId);
114
+ }
115
+ list(workbookId) {
116
+ return [...this.tasks.values()]
117
+ .filter((task) => workbookId === undefined || task.workbookId === workbookId)
118
+ .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
119
+ }
120
+ load(records) {
121
+ this.tasks.clear();
122
+ for (const record of records) {
123
+ this.tasks.set(record.taskId, {
124
+ ...record,
125
+ progress: record.progress ?? 0,
126
+ blockers: record.blockers ?? []
127
+ });
128
+ }
129
+ }
130
+ dump() {
131
+ return [...this.tasks.values()].map((task) => ({ ...task }));
132
+ }
133
+ require(taskId) {
134
+ const task = this.tasks.get(taskId);
135
+ if (!task) {
136
+ throw new Error(`Task not found: ${taskId}`);
137
+ }
138
+ return task;
139
+ }
140
+ }
141
+ //# sourceMappingURL=task-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-registry.js","sourceRoot":"","sources":["../src/task-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { TemplateId, TemplateRef, WorkbookId } from "@components-kit/open-workbook-protocol";
2
+ export interface TemplateFingerprint {
3
+ structureHash: string;
4
+ formulaHash: string;
5
+ styleHash: string;
6
+ filterHash: string;
7
+ tableHash: string;
8
+ printLayoutHash: string;
9
+ }
10
+ export interface TemplateFingerprintPayload {
11
+ structure: unknown;
12
+ formulas: unknown;
13
+ styles: unknown;
14
+ filters: unknown;
15
+ tables: unknown;
16
+ printLayout: unknown;
17
+ }
18
+ export interface TemplateRecord extends TemplateRef {
19
+ workbookId?: WorkbookId;
20
+ sourceSheetName: string;
21
+ fingerprint: TemplateFingerprint;
22
+ fingerprintPayload: TemplateFingerprintPayload;
23
+ dataRegions: string[];
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ }
27
+ export interface RegisterTemplateInput {
28
+ name: string;
29
+ scope: "workbook" | "local";
30
+ sourceSheetName: string;
31
+ workbookId?: WorkbookId;
32
+ dataRegions?: string[];
33
+ fingerprintPayload: TemplateFingerprintPayload;
34
+ }
35
+ export declare class TemplateRegistry {
36
+ private readonly records;
37
+ register(input: RegisterTemplateInput): TemplateRecord;
38
+ get(templateId: TemplateId): TemplateRecord | undefined;
39
+ unregister(templateId: TemplateId): boolean;
40
+ list(options?: {
41
+ workbookId?: WorkbookId;
42
+ }): TemplateRecord[];
43
+ load(records: TemplateRecord[]): void;
44
+ dump(): TemplateRecord[];
45
+ }
46
+ //# sourceMappingURL=template-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-registry.d.ts","sourceRoot":"","sources":["../src/template-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAIlG,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,mBAAmB,CAAC;IACjC,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,EAAE,0BAA0B,CAAC;CAChD;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IAEjE,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,cAAc;IAiCtD,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS;IAIvD,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAI3C,IAAI,CAAC,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAA;KAAO,GAAG,cAAc,EAAE;IASjE,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAOrC,IAAI,IAAI,cAAc,EAAE;CAGzB"}
@@ -0,0 +1,60 @@
1
+ import { makeId } from "@components-kit/open-workbook-protocol";
2
+ import { hashStable } from "./fingerprint.js";
3
+ export class TemplateRegistry {
4
+ records = new Map();
5
+ register(input) {
6
+ if (input.scope === "workbook" && !input.workbookId) {
7
+ throw new Error("Workbook templates require workbookId");
8
+ }
9
+ const templateId = makeId("template");
10
+ const now = new Date().toISOString();
11
+ const record = {
12
+ templateId,
13
+ name: input.name,
14
+ scope: input.scope,
15
+ version: 1,
16
+ sourceSheetName: input.sourceSheetName,
17
+ dataRegions: input.dataRegions ?? [],
18
+ fingerprint: {
19
+ structureHash: hashStable(input.fingerprintPayload.structure),
20
+ formulaHash: hashStable(input.fingerprintPayload.formulas),
21
+ styleHash: hashStable(input.fingerprintPayload.styles),
22
+ filterHash: hashStable(input.fingerprintPayload.filters),
23
+ tableHash: hashStable(input.fingerprintPayload.tables),
24
+ printLayoutHash: hashStable(input.fingerprintPayload.printLayout)
25
+ },
26
+ fingerprintPayload: input.fingerprintPayload,
27
+ createdAt: now,
28
+ updatedAt: now
29
+ };
30
+ if (input.workbookId !== undefined) {
31
+ record.workbookId = input.workbookId;
32
+ }
33
+ this.records.set(templateId, record);
34
+ return record;
35
+ }
36
+ get(templateId) {
37
+ return this.records.get(templateId);
38
+ }
39
+ unregister(templateId) {
40
+ return this.records.delete(templateId);
41
+ }
42
+ list(options = {}) {
43
+ return [...this.records.values()].filter((record) => {
44
+ if (record.scope === "local") {
45
+ return true;
46
+ }
47
+ return !options.workbookId || record.workbookId === options.workbookId;
48
+ });
49
+ }
50
+ load(records) {
51
+ this.records.clear();
52
+ for (const record of records) {
53
+ this.records.set(record.templateId, { ...record });
54
+ }
55
+ }
56
+ dump() {
57
+ return [...this.records.values()].map((record) => ({ ...record }));
58
+ }
59
+ }
60
+ //# sourceMappingURL=template-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-registry.js","sourceRoot":"","sources":["../src/template-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type AgentId, type BackupId, type DiffSummary, type LockId, type OperationTelemetry, type OperationWarning, type PlanId, type RangeFingerprint, type TaskId, type TransactionId, type TransactionRecord, type WorkbookId, type WorkbookScope, type DestructiveLevel } from "@components-kit/open-workbook-protocol";
2
+ export interface CreateTransactionInput {
3
+ workbookId: WorkbookId;
4
+ agentId?: AgentId | undefined;
5
+ taskId?: TaskId | undefined;
6
+ planId?: PlanId | undefined;
7
+ goal: string;
8
+ scopes: WorkbookScope[];
9
+ baseFingerprints?: RangeFingerprint[];
10
+ destructiveLevel: DestructiveLevel;
11
+ }
12
+ export declare class TransactionManager {
13
+ private readonly transactions;
14
+ create(input: CreateTransactionInput): TransactionRecord;
15
+ markApplying(transactionId: TransactionId, locks: LockId[]): TransactionRecord;
16
+ markApplied(transactionId: TransactionId, result: {
17
+ backups: BackupId[];
18
+ warnings: OperationWarning[];
19
+ diffSummary?: DiffSummary | undefined;
20
+ telemetry?: OperationTelemetry | undefined;
21
+ }): TransactionRecord;
22
+ markFailed(transactionId: TransactionId, errorCode: string, errorMessage: string, warnings?: OperationWarning[]): TransactionRecord;
23
+ markBlocked(transactionId: TransactionId, errorCode: string, errorMessage: string, warnings?: OperationWarning[]): TransactionRecord;
24
+ markRolledBack(transactionId: TransactionId): TransactionRecord;
25
+ get(transactionId: TransactionId): TransactionRecord | undefined;
26
+ getLaterApplied(transaction: TransactionRecord): TransactionRecord[];
27
+ list(workbookId?: WorkbookId): TransactionRecord[];
28
+ load(records: TransactionRecord[]): void;
29
+ dump(): TransactionRecord[];
30
+ markInterrupted(message?: string): TransactionRecord[];
31
+ private update;
32
+ }
33
+ //# sourceMappingURL=transaction-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-manager.d.ts","sourceRoot":"","sources":["../src/transaction-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAEtB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,wCAAwC,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACtC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+C;IAE5E,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,iBAAiB;IA2BxD,YAAY,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB;IAQ9E,WAAW,CACT,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE;QACN,OAAO,EAAE,QAAQ,EAAE,CAAC;QACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;QACtC,SAAS,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;KAC5C,GACA,iBAAiB;IAgBpB,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAgB,EAAO,GAAG,iBAAiB;IAUvI,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,GAAE,gBAAgB,EAAO,GAAG,iBAAiB;IAUxI,cAAc,CAAC,aAAa,EAAE,aAAa,GAAG,iBAAiB;IAI/D,GAAG,CAAC,aAAa,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS;IAIhE,eAAe,CAAC,WAAW,EAAE,iBAAiB,GAAG,iBAAiB,EAAE;IAOpE,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,iBAAiB,EAAE;IAMlD,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAOxC,IAAI,IAAI,iBAAiB,EAAE;IAI3B,eAAe,CAAC,OAAO,SAAsD,GAAG,iBAAiB,EAAE;IAcnG,OAAO,CAAC,MAAM;CAQf"}
@@ -0,0 +1,118 @@
1
+ import { makeId } from "@components-kit/open-workbook-protocol";
2
+ export class TransactionManager {
3
+ transactions = new Map();
4
+ create(input) {
5
+ const transaction = {
6
+ transactionId: makeId("txn"),
7
+ workbookId: input.workbookId,
8
+ status: "queued",
9
+ goal: input.goal,
10
+ scopes: input.scopes,
11
+ locks: [],
12
+ baseFingerprints: input.baseFingerprints ?? [],
13
+ backups: [],
14
+ warnings: [],
15
+ destructiveLevel: input.destructiveLevel,
16
+ queuedAt: new Date().toISOString()
17
+ };
18
+ if (input.agentId !== undefined) {
19
+ transaction.agentId = input.agentId;
20
+ }
21
+ if (input.taskId !== undefined) {
22
+ transaction.taskId = input.taskId;
23
+ }
24
+ if (input.planId !== undefined) {
25
+ transaction.planId = input.planId;
26
+ }
27
+ this.transactions.set(transaction.transactionId, transaction);
28
+ return transaction;
29
+ }
30
+ markApplying(transactionId, locks) {
31
+ return this.update(transactionId, {
32
+ status: "applying",
33
+ locks,
34
+ startedAt: new Date().toISOString()
35
+ });
36
+ }
37
+ markApplied(transactionId, result) {
38
+ const patch = {
39
+ status: "applied",
40
+ backups: result.backups,
41
+ warnings: result.warnings,
42
+ finishedAt: new Date().toISOString()
43
+ };
44
+ if (result.diffSummary !== undefined) {
45
+ patch.diffSummary = result.diffSummary;
46
+ }
47
+ if (result.telemetry !== undefined) {
48
+ patch.telemetry = result.telemetry;
49
+ }
50
+ return this.update(transactionId, patch);
51
+ }
52
+ markFailed(transactionId, errorCode, errorMessage, warnings = []) {
53
+ return this.update(transactionId, {
54
+ status: "failed",
55
+ errorCode,
56
+ errorMessage,
57
+ warnings,
58
+ finishedAt: new Date().toISOString()
59
+ });
60
+ }
61
+ markBlocked(transactionId, errorCode, errorMessage, warnings = []) {
62
+ return this.update(transactionId, {
63
+ status: "blocked",
64
+ errorCode,
65
+ errorMessage,
66
+ warnings,
67
+ finishedAt: new Date().toISOString()
68
+ });
69
+ }
70
+ markRolledBack(transactionId) {
71
+ return this.update(transactionId, { status: "rolled_back", finishedAt: new Date().toISOString() });
72
+ }
73
+ get(transactionId) {
74
+ return this.transactions.get(transactionId);
75
+ }
76
+ getLaterApplied(transaction) {
77
+ const ordered = [...this.transactions.values()];
78
+ const index = ordered.findIndex((candidate) => candidate.transactionId === transaction.transactionId);
79
+ const candidates = index >= 0 ? ordered.slice(index + 1) : ordered;
80
+ return candidates.filter((candidate) => candidate.workbookId === transaction.workbookId && candidate.status === "applied");
81
+ }
82
+ list(workbookId) {
83
+ return [...this.transactions.values()]
84
+ .filter((transaction) => workbookId === undefined || transaction.workbookId === workbookId)
85
+ .sort((a, b) => (b.finishedAt ?? b.startedAt ?? b.queuedAt).localeCompare(a.finishedAt ?? a.startedAt ?? a.queuedAt));
86
+ }
87
+ load(records) {
88
+ this.transactions.clear();
89
+ for (const record of records) {
90
+ this.transactions.set(record.transactionId, { ...record });
91
+ }
92
+ }
93
+ dump() {
94
+ return [...this.transactions.values()].map((transaction) => ({ ...transaction }));
95
+ }
96
+ markInterrupted(message = "Daemon restarted before the transaction finished.") {
97
+ const interrupted = [];
98
+ for (const transaction of this.transactions.values()) {
99
+ if (transaction.status === "queued" || transaction.status === "applying") {
100
+ transaction.status = "blocked";
101
+ transaction.errorCode = "DAEMON_RESTARTED";
102
+ transaction.errorMessage = message;
103
+ transaction.finishedAt = new Date().toISOString();
104
+ interrupted.push(transaction);
105
+ }
106
+ }
107
+ return interrupted;
108
+ }
109
+ update(transactionId, patch) {
110
+ const transaction = this.transactions.get(transactionId);
111
+ if (!transaction) {
112
+ throw new Error(`Transaction not found: ${transactionId}`);
113
+ }
114
+ Object.assign(transaction, patch);
115
+ return transaction;
116
+ }
117
+ }
118
+ //# sourceMappingURL=transaction-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-manager.js","sourceRoot":"","sources":["../src/transaction-manager.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@components-kit/open-workbook-excel-core",
3
+ "version": "0.1.0",
4
+ "description": "Core planning, backup, snapshot, template, permission, and range utilities for Open Workbook.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "homepage": "https://github.com/components-kit/open-workbook#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/components-kit/open-workbook.git",
11
+ "directory": "packages/excel-core"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/components-kit/open-workbook/issues"
15
+ },
16
+ "keywords": [
17
+ "excel",
18
+ "spreadsheet",
19
+ "planning",
20
+ "backup",
21
+ "template"
22
+ ],
23
+ "main": "dist/index.js",
24
+ "types": "dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "default": "./dist/index.js"
29
+ }
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "!dist/**/*.test.*",
34
+ "README.md"
35
+ ],
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "dependencies": {
40
+ "@components-kit/open-workbook-protocol": "0.1.0"
41
+ },
42
+ "devDependencies": {
43
+ "typescript": "^5.7.3",
44
+ "vitest": "^2.1.8"
45
+ },
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.json",
48
+ "check": "tsc -p tsconfig.json --noEmit",
49
+ "test": "vitest run --passWithNoTests"
50
+ }
51
+ }