@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,246 @@
1
+ import { makeId } from "@components-kit/open-workbook-protocol";
2
+ import { parseA1Address } from "./range-address.js";
3
+ import { makeLockConflict } from "./conflicts.js";
4
+ export class LockManager {
5
+ locks = new Map();
6
+ acquire(input) {
7
+ this.expireLocks();
8
+ const conflicts = this.findConflicts(input.workbookId, input.scopes, input.mode, input.transactionId);
9
+ if (conflicts.length > 0) {
10
+ return { ok: false, conflicts };
11
+ }
12
+ const now = new Date();
13
+ const expiresAt = new Date(now.getTime() + (input.ttlMs ?? 120_000)).toISOString();
14
+ const locks = input.scopes.map((scope) => {
15
+ const lock = {
16
+ lockId: makeId("lock"),
17
+ workbookId: input.workbookId,
18
+ mode: input.mode,
19
+ scope,
20
+ status: "active",
21
+ acquiredAt: now.toISOString(),
22
+ expiresAt,
23
+ reason: input.reason
24
+ };
25
+ if (input.ownerAgentId !== undefined) {
26
+ lock.ownerAgentId = input.ownerAgentId;
27
+ }
28
+ if (input.taskId !== undefined) {
29
+ lock.taskId = input.taskId;
30
+ }
31
+ if (input.transactionId !== undefined) {
32
+ lock.transactionId = input.transactionId;
33
+ }
34
+ this.locks.set(lock.lockId, lock);
35
+ return lock;
36
+ });
37
+ return { ok: true, locks };
38
+ }
39
+ renew(lockIds, ttlMs = 120_000) {
40
+ this.expireLocks();
41
+ const expiresAt = new Date(Date.now() + ttlMs).toISOString();
42
+ const renewed = [];
43
+ for (const lockId of lockIds) {
44
+ const lock = this.locks.get(lockId);
45
+ if (lock?.status === "active") {
46
+ lock.expiresAt = expiresAt;
47
+ renewed.push(lock);
48
+ }
49
+ }
50
+ return renewed;
51
+ }
52
+ renewWithMissing(lockIds, ttlMs = 120_000) {
53
+ const renewed = this.renew(lockIds, ttlMs);
54
+ const renewedIds = new Set(renewed.map((lock) => lock.lockId));
55
+ return {
56
+ renewed,
57
+ missingLockIds: lockIds.filter((lockId) => !renewedIds.has(lockId))
58
+ };
59
+ }
60
+ release(lockIds) {
61
+ const releasedAt = new Date().toISOString();
62
+ const released = [];
63
+ for (const lockId of lockIds) {
64
+ const lock = this.locks.get(lockId);
65
+ if (lock?.status === "active") {
66
+ lock.status = "released";
67
+ lock.releasedAt = releasedAt;
68
+ released.push(lock);
69
+ }
70
+ }
71
+ return released;
72
+ }
73
+ releaseWithMissing(lockIds) {
74
+ const released = this.release(lockIds);
75
+ const releasedIds = new Set(released.map((lock) => lock.lockId));
76
+ return {
77
+ released,
78
+ missingLockIds: lockIds.filter((lockId) => !releasedIds.has(lockId))
79
+ };
80
+ }
81
+ list(workbookId) {
82
+ this.expireLocks();
83
+ return [...this.locks.values()]
84
+ .filter((lock) => workbookId === undefined || lock.workbookId === workbookId)
85
+ .sort((a, b) => b.acquiredAt.localeCompare(a.acquiredAt));
86
+ }
87
+ load(records) {
88
+ this.locks.clear();
89
+ for (const record of records) {
90
+ this.locks.set(record.lockId, { ...record });
91
+ }
92
+ this.expireLocks();
93
+ }
94
+ dump() {
95
+ this.expireLocks();
96
+ return [...this.locks.values()].map((lock) => ({ ...lock }));
97
+ }
98
+ expireActive(reason = "Expired during runtime recovery.") {
99
+ const expiredAt = new Date().toISOString();
100
+ const expired = [];
101
+ for (const lock of this.locks.values()) {
102
+ if (lock.status === "active") {
103
+ lock.status = "expired";
104
+ lock.releasedAt = expiredAt;
105
+ lock.reason = `${lock.reason} ${reason}`.trim();
106
+ expired.push(lock);
107
+ }
108
+ }
109
+ return expired;
110
+ }
111
+ findConflicts(workbookId, scopes, mode, transactionId) {
112
+ this.expireLocks();
113
+ if (mode === "read") {
114
+ return [];
115
+ }
116
+ const conflicts = [];
117
+ for (const existing of this.locks.values()) {
118
+ if (existing.status !== "active" || existing.workbookId !== workbookId || (transactionId !== undefined && existing.transactionId === transactionId)) {
119
+ continue;
120
+ }
121
+ if (existing.mode === "read") {
122
+ continue;
123
+ }
124
+ for (const scope of scopes) {
125
+ const conflict = makeLockConflict({
126
+ workbookId,
127
+ left: scope,
128
+ right: existing.scope,
129
+ ownerAgentId: existing.ownerAgentId,
130
+ taskId: existing.taskId,
131
+ transactionId: existing.transactionId
132
+ });
133
+ if (conflict) {
134
+ if (conflict.code === "LOCK_CONFLICT") {
135
+ conflict.message = `${conflict.message} Active ${existing.mode} lock is held on ${describeScope(existing.scope)}.`;
136
+ }
137
+ conflict.retryable = true;
138
+ if (existing.ownerAgentId !== undefined) {
139
+ conflict.ownerAgentId = existing.ownerAgentId;
140
+ }
141
+ if (existing.taskId !== undefined) {
142
+ conflict.taskId = existing.taskId;
143
+ }
144
+ if (existing.transactionId !== undefined) {
145
+ conflict.transactionId = existing.transactionId;
146
+ }
147
+ conflict.lockId = existing.lockId;
148
+ conflict.lockExpiresAt = existing.expiresAt;
149
+ conflicts.push(conflict);
150
+ }
151
+ }
152
+ }
153
+ return conflicts;
154
+ }
155
+ expireLocks() {
156
+ const now = Date.now();
157
+ for (const lock of this.locks.values()) {
158
+ if (lock.status === "active" && Date.parse(lock.expiresAt) <= now) {
159
+ lock.status = "expired";
160
+ }
161
+ }
162
+ }
163
+ }
164
+ export function scopesConflict(left, right) {
165
+ if (left.workbookId !== right.workbookId) {
166
+ return false;
167
+ }
168
+ if (left.type === "workbook" || right.type === "workbook") {
169
+ return true;
170
+ }
171
+ if (left.type === "sheet" || right.type === "sheet") {
172
+ return scopeSheetName(left) === undefined || scopeSheetName(right) === undefined || scopeSheetName(left) === scopeSheetName(right);
173
+ }
174
+ if (left.type === "range" && right.type === "range") {
175
+ return left.sheetName === right.sheetName && rangesOverlap(left.address, right.address);
176
+ }
177
+ if (left.type === "formula" && right.type === "formula") {
178
+ return left.sheetName === right.sheetName && optionalFormulaRangesOverlap(left.address, right.address);
179
+ }
180
+ if (left.type === "formula" && right.type === "range") {
181
+ return left.sheetName === right.sheetName && (left.address === undefined || rangesOverlap(left.address, right.address));
182
+ }
183
+ if (left.type === "range" && right.type === "formula") {
184
+ return left.sheetName === right.sheetName && (right.address === undefined || rangesOverlap(left.address, right.address));
185
+ }
186
+ const leftSheet = scopeSheetName(left);
187
+ const rightSheet = scopeSheetName(right);
188
+ if (leftSheet !== undefined && rightSheet !== undefined && leftSheet !== rightSheet) {
189
+ return false;
190
+ }
191
+ return left.type === right.type || left.type === "range" || right.type === "range";
192
+ }
193
+ function rangesOverlap(leftAddress, rightAddress) {
194
+ try {
195
+ const left = parseA1Address(leftAddress);
196
+ const right = parseA1Address(rightAddress);
197
+ return left.startRow <= right.endRow && left.endRow >= right.startRow && left.startColumn <= right.endColumn && left.endColumn >= right.startColumn;
198
+ }
199
+ catch {
200
+ return true;
201
+ }
202
+ }
203
+ function scopeSheetName(scope) {
204
+ switch (scope.type) {
205
+ case "sheet":
206
+ case "range":
207
+ case "formula":
208
+ case "table":
209
+ case "named_range":
210
+ case "chart":
211
+ case "pivot":
212
+ return scope.sheetName;
213
+ case "workbook":
214
+ case "template":
215
+ return undefined;
216
+ }
217
+ }
218
+ function describeScope(scope) {
219
+ switch (scope.type) {
220
+ case "workbook":
221
+ return "workbook";
222
+ case "sheet":
223
+ return `${scope.sheetName}`;
224
+ case "range":
225
+ return `${scope.sheetName}!${scope.address}`;
226
+ case "formula":
227
+ return `formulas ${scope.sheetName}${scope.address ? `!${scope.address}` : ""}`;
228
+ case "table":
229
+ return `table ${scope.tableName}`;
230
+ case "named_range":
231
+ return `named range ${scope.name}`;
232
+ case "chart":
233
+ return `chart ${scope.chartName}`;
234
+ case "pivot":
235
+ return `pivot ${scope.pivotName}`;
236
+ case "template":
237
+ return `template ${scope.templateId}`;
238
+ }
239
+ }
240
+ function optionalFormulaRangesOverlap(leftAddress, rightAddress) {
241
+ if (leftAddress === undefined || rightAddress === undefined) {
242
+ return true;
243
+ }
244
+ return rangesOverlap(leftAddress, rightAddress);
245
+ }
246
+ //# sourceMappingURL=lock-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock-manager.js","sourceRoot":"","sources":["../src/lock-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DestructiveLevel } from "@components-kit/open-workbook-protocol";
2
+ export interface PermissionPolicy {
3
+ allowWrites: boolean;
4
+ allowDestructiveActions: boolean;
5
+ allowWorkbookActions: boolean;
6
+ requireConfirmationFor: DestructiveLevel[];
7
+ }
8
+ export declare const DefaultPermissionPolicy: PermissionPolicy;
9
+ export declare function requiresConfirmation(policy: PermissionPolicy, level: DestructiveLevel): boolean;
10
+ export declare function assertMutationAllowed(policy: PermissionPolicy, level: DestructiveLevel): void;
11
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,EAAE,OAAO,CAAC;IACjC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;CAC5C;AAED,eAAO,MAAM,uBAAuB,EAAE,gBAKrC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAE/F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAU7F"}
@@ -0,0 +1,21 @@
1
+ export const DefaultPermissionPolicy = {
2
+ allowWrites: true,
3
+ allowDestructiveActions: false,
4
+ allowWorkbookActions: false,
5
+ requireConfirmationFor: ["values", "format", "structure", "workbook"]
6
+ };
7
+ export function requiresConfirmation(policy, level) {
8
+ return policy.requireConfirmationFor.includes(level);
9
+ }
10
+ export function assertMutationAllowed(policy, level) {
11
+ if (!policy.allowWrites && level !== "none") {
12
+ throw new Error("Writes are disabled by permission policy");
13
+ }
14
+ if (!policy.allowDestructiveActions && (level === "structure" || level === "workbook")) {
15
+ throw new Error("Destructive actions are disabled by permission policy");
16
+ }
17
+ if (!policy.allowWorkbookActions && level === "workbook") {
18
+ throw new Error("Workbook-level actions are disabled by permission policy");
19
+ }
20
+ }
21
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../src/permissions.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,WAAW,EAAE,IAAI;IACjB,uBAAuB,EAAE,KAAK;IAC9B,oBAAoB,EAAE,KAAK;IAC3B,sBAAsB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC;CACtE,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,MAAwB,EAAE,KAAuB;IACpF,OAAO,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAwB,EAAE,KAAuB;IACrF,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,UAAU,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type BackupId, type AgentId, type BatchRequest, type ExcelOperation, type OperationResult, type PlanCreateRequest, type PlanId, type PlanPreview, type SnapshotId, type TaskId, type WorkbookId } from "@components-kit/open-workbook-protocol";
2
+ import { BackupManager } from "./backup-manager.js";
3
+ import { BatchCompiler } from "./batch-compiler.js";
4
+ export interface PlanRecord {
5
+ planId: PlanId;
6
+ workbookId: WorkbookId;
7
+ goal: string;
8
+ operations: ExcelOperation[];
9
+ agentId?: AgentId | undefined;
10
+ agentName?: string | undefined;
11
+ taskId?: TaskId | undefined;
12
+ role?: string | undefined;
13
+ status: "draft" | "previewed" | "applying" | "applied" | "rolled_back" | "failed" | "cancelled";
14
+ baseSnapshotId: SnapshotId;
15
+ preview?: PlanPreview;
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ }
19
+ export declare class PlanManager {
20
+ private readonly batchCompiler;
21
+ private readonly backupManager;
22
+ private readonly plans;
23
+ constructor(batchCompiler?: BatchCompiler, backupManager?: BackupManager);
24
+ createPlan(request: PlanCreateRequest): PlanRecord;
25
+ previewPlan(planId: PlanId): PlanPreview;
26
+ markApplyResult(planId: PlanId, result: OperationResult): PlanRecord;
27
+ markRolledBack(planId: PlanId): PlanRecord;
28
+ createBatchRequest(planId: PlanId, confirmationToken?: string): BatchRequest;
29
+ replacePreviewFingerprints(planId: PlanId, replacement: Pick<PlanPreview, "beforeWorkbookFingerprint" | "targetFingerprints">): PlanPreview;
30
+ getPlan(planId: PlanId): PlanRecord | undefined;
31
+ listRecent(workbookId: WorkbookId): PlanRecord[];
32
+ load(records: PlanRecord[]): void;
33
+ dump(): PlanRecord[];
34
+ requireBackups(planId: PlanId): BackupId[];
35
+ private requirePlan;
36
+ }
37
+ //# sourceMappingURL=plan-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-manager.d.ts","sourceRoot":"","sources":["../src/plan-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,MAAM,EACX,KAAK,UAAU,EAGhB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,WAAW,CAAC;IAChG,cAAc,EAAE,UAAU,CAAC;IAC3B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJhC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;gBAGpC,aAAa,gBAAsB,EACnC,aAAa,gBAAsB;IAGtD,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU;IA6BlD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IA+CxC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,UAAU;IAapE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAO1C,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,YAAY;IA8B5E,0BAA0B,CACxB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,2BAA2B,GAAG,oBAAoB,CAAC,GACjF,WAAW;IAcd,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE;IAMhD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAOjC,IAAI,IAAI,UAAU,EAAE;IAIpB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAK1C,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,167 @@
1
+ import { makeId, runtimeError } from "@components-kit/open-workbook-protocol";
2
+ import { BackupManager } from "./backup-manager.js";
3
+ import { BatchCompiler } from "./batch-compiler.js";
4
+ import { createWorkbookFingerprint } from "./fingerprint.js";
5
+ export class PlanManager {
6
+ batchCompiler;
7
+ backupManager;
8
+ plans = new Map();
9
+ constructor(batchCompiler = new BatchCompiler(), backupManager = new BackupManager()) {
10
+ this.batchCompiler = batchCompiler;
11
+ this.backupManager = backupManager;
12
+ }
13
+ createPlan(request) {
14
+ const planId = makeId("plan");
15
+ const now = new Date().toISOString();
16
+ const plan = {
17
+ planId,
18
+ workbookId: request.workbookId,
19
+ goal: request.goal,
20
+ operations: request.operations,
21
+ status: "draft",
22
+ baseSnapshotId: request.baseSnapshotId ?? makeId("snapshot"),
23
+ createdAt: now,
24
+ updatedAt: now
25
+ };
26
+ if (request.agentId !== undefined) {
27
+ plan.agentId = request.agentId;
28
+ }
29
+ if (request.agentName !== undefined) {
30
+ plan.agentName = request.agentName;
31
+ }
32
+ if (request.taskId !== undefined) {
33
+ plan.taskId = request.taskId;
34
+ }
35
+ if (request.role !== undefined) {
36
+ plan.role = request.role;
37
+ }
38
+ this.plans.set(planId, plan);
39
+ return plan;
40
+ }
41
+ previewPlan(planId) {
42
+ const plan = this.requirePlan(planId);
43
+ const compiled = this.batchCompiler.compile({
44
+ workbookId: plan.workbookId,
45
+ operations: plan.operations,
46
+ mode: "dry_run"
47
+ });
48
+ const backups = compiled.requiredBackups.map((kind) => this.backupManager.createBackup({
49
+ workbookId: plan.workbookId,
50
+ kind,
51
+ reason: `Plan preview: ${plan.goal}`,
52
+ affectedRanges: compiled.targetFingerprints.map((fingerprint) => fingerprint.range)
53
+ }));
54
+ const preview = {
55
+ planId,
56
+ workbookId: plan.workbookId,
57
+ baseSnapshotId: plan.baseSnapshotId,
58
+ requiredBackups: backups.map((backup) => backup.backupId),
59
+ beforeWorkbookFingerprint: createWorkbookFingerprint(plan.workbookId, { planId, operationCount: plan.operations.length }, { operations: plan.operations.map((operation) => operation.kind) }),
60
+ targetFingerprints: compiled.targetFingerprints,
61
+ diffSummary: {
62
+ title: `Preview for ${plan.goal}`,
63
+ changedRanges: compiled.targetFingerprints.map((fingerprint) => fingerprint.range),
64
+ cellsChanged: compiled.estimatedCellsTouched,
65
+ formulasChanged: plan.operations.filter((operation) => operation.kind === "range.write_formulas").length,
66
+ stylesChanged: 0,
67
+ tablesChanged: 0,
68
+ sheetsChanged: plan.operations.filter((operation) => operation.kind === "template.create_sheet_from_template").length,
69
+ destructiveLevel: compiled.destructiveLevel
70
+ },
71
+ warnings: []
72
+ };
73
+ plan.preview = preview;
74
+ plan.status = "previewed";
75
+ plan.updatedAt = new Date().toISOString();
76
+ return preview;
77
+ }
78
+ markApplyResult(planId, result) {
79
+ const plan = this.requirePlan(planId);
80
+ if (result.ok && plan.preview) {
81
+ plan.preview = {
82
+ ...plan.preview,
83
+ requiredBackups: [...new Set([...plan.preview.requiredBackups, ...result.backups])]
84
+ };
85
+ }
86
+ plan.status = result.ok ? "applied" : "failed";
87
+ plan.updatedAt = new Date().toISOString();
88
+ return plan;
89
+ }
90
+ markRolledBack(planId) {
91
+ const plan = this.requirePlan(planId);
92
+ plan.status = "rolled_back";
93
+ plan.updatedAt = new Date().toISOString();
94
+ return plan;
95
+ }
96
+ createBatchRequest(planId, confirmationToken) {
97
+ const plan = this.requirePlan(planId);
98
+ if (!plan.preview) {
99
+ throw runtimeError("CONFIRMATION_REQUIRED", "Plan must be previewed before apply.", {
100
+ retryable: true
101
+ });
102
+ }
103
+ const request = {
104
+ workbookId: plan.workbookId,
105
+ operations: plan.operations,
106
+ mode: "apply",
107
+ planId,
108
+ baseSnapshotId: plan.baseSnapshotId,
109
+ expectedTargetFingerprints: plan.preview.targetFingerprints
110
+ };
111
+ if (plan.agentId !== undefined) {
112
+ request.agentId = plan.agentId;
113
+ }
114
+ if (plan.agentName !== undefined) {
115
+ request.agentName = plan.agentName;
116
+ }
117
+ if (plan.taskId !== undefined) {
118
+ request.taskId = plan.taskId;
119
+ }
120
+ if (plan.role !== undefined) {
121
+ request.role = plan.role;
122
+ }
123
+ return confirmationToken === undefined ? request : { ...request, confirmationToken };
124
+ }
125
+ replacePreviewFingerprints(planId, replacement) {
126
+ const plan = this.requirePlan(planId);
127
+ if (!plan.preview) {
128
+ throw new Error(`Plan has no preview: ${planId}`);
129
+ }
130
+ plan.preview = {
131
+ ...plan.preview,
132
+ beforeWorkbookFingerprint: replacement.beforeWorkbookFingerprint,
133
+ targetFingerprints: replacement.targetFingerprints
134
+ };
135
+ plan.updatedAt = new Date().toISOString();
136
+ return plan.preview;
137
+ }
138
+ getPlan(planId) {
139
+ return this.plans.get(planId);
140
+ }
141
+ listRecent(workbookId) {
142
+ return [...this.plans.values()]
143
+ .filter((plan) => plan.workbookId === workbookId)
144
+ .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
145
+ }
146
+ load(records) {
147
+ this.plans.clear();
148
+ for (const record of records) {
149
+ this.plans.set(record.planId, { ...record });
150
+ }
151
+ }
152
+ dump() {
153
+ return [...this.plans.values()].map((plan) => ({ ...plan }));
154
+ }
155
+ requireBackups(planId) {
156
+ const plan = this.requirePlan(planId);
157
+ return plan.preview?.requiredBackups ?? [];
158
+ }
159
+ requirePlan(planId) {
160
+ const plan = this.plans.get(planId);
161
+ if (!plan) {
162
+ throw new Error(`Plan not found: ${planId}`);
163
+ }
164
+ return plan;
165
+ }
166
+ }
167
+ //# sourceMappingURL=plan-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-manager.js","sourceRoot":"","sources":["../src/plan-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { A1Range, WorkbookId } from "@components-kit/open-workbook-protocol";
2
+ export interface ParsedA1Address {
3
+ sheetName?: string;
4
+ startRow: number;
5
+ startColumn: number;
6
+ endRow: number;
7
+ endColumn: number;
8
+ }
9
+ export declare function parseA1Address(address: string): ParsedA1Address;
10
+ export declare function normalizeA1Range(workbookId: WorkbookId, sheetName: string, address: string): A1Range;
11
+ export declare function cellCount(address: string): number;
12
+ export declare function columnNameToNumber(columnName: string): number;
13
+ export declare function numberToColumnName(columnNumber: number): string;
14
+ export declare function formatA1Cell(row: number, column: number): string;
15
+ export declare function formatA1Address(parsed: ParsedA1Address): string;
16
+ //# sourceMappingURL=range-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-address.d.ts","sourceRoot":"","sources":["../src/range-address.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAElF,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA+B/D;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAOpG;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAU7D;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAa/D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAK/D"}
@@ -0,0 +1,90 @@
1
+ const A1_RE = /^(?:(?<sheet>(?:'[^']+'|[^!]+))!)?(?<startCol>[A-Z]+)(?<startRow>\d+)(?::(?<endCol>[A-Z]+)(?<endRow>\d+))?$/i;
2
+ export function parseA1Address(address) {
3
+ const match = A1_RE.exec(address.trim());
4
+ if (!match?.groups) {
5
+ throw new Error(`Invalid A1 address: ${address}`);
6
+ }
7
+ const { startCol, startRow: startRowText, endCol, endRow: endRowText, sheet } = match.groups;
8
+ if (!startCol || !startRowText) {
9
+ throw new Error(`Invalid A1 address: ${address}`);
10
+ }
11
+ const startColumn = columnNameToNumber(startCol);
12
+ const startRow = Number(startRowText);
13
+ const endColumn = columnNameToNumber(endCol ?? startCol);
14
+ const endRow = Number(endRowText ?? startRowText);
15
+ if (startRow < 1 || endRow < startRow || endColumn < startColumn) {
16
+ throw new Error(`Invalid A1 range bounds: ${address}`);
17
+ }
18
+ const parsed = {
19
+ startRow,
20
+ startColumn,
21
+ endRow,
22
+ endColumn
23
+ };
24
+ const sheetName = unquoteSheetName(sheet);
25
+ if (sheetName !== undefined) {
26
+ parsed.sheetName = sheetName;
27
+ }
28
+ return parsed;
29
+ }
30
+ export function normalizeA1Range(workbookId, sheetName, address) {
31
+ const parsed = parseA1Address(address);
32
+ return {
33
+ workbookId,
34
+ sheetName: parsed.sheetName ?? sheetName,
35
+ address: formatA1Address(parsed)
36
+ };
37
+ }
38
+ export function cellCount(address) {
39
+ const parsed = parseA1Address(address);
40
+ return (parsed.endRow - parsed.startRow + 1) * (parsed.endColumn - parsed.startColumn + 1);
41
+ }
42
+ export function columnNameToNumber(columnName) {
43
+ let value = 0;
44
+ for (const char of columnName.toUpperCase()) {
45
+ const code = char.charCodeAt(0);
46
+ if (code < 65 || code > 90) {
47
+ throw new Error(`Invalid column name: ${columnName}`);
48
+ }
49
+ value = value * 26 + (code - 64);
50
+ }
51
+ return value;
52
+ }
53
+ export function numberToColumnName(columnNumber) {
54
+ if (!Number.isInteger(columnNumber) || columnNumber < 1) {
55
+ throw new Error(`Invalid column number: ${columnNumber}`);
56
+ }
57
+ let n = columnNumber;
58
+ let value = "";
59
+ while (n > 0) {
60
+ n -= 1;
61
+ value = String.fromCharCode(65 + (n % 26)) + value;
62
+ n = Math.floor(n / 26);
63
+ }
64
+ return value;
65
+ }
66
+ export function formatA1Cell(row, column) {
67
+ if (!Number.isInteger(row) || row < 1) {
68
+ throw new Error(`Invalid row number: ${row}`);
69
+ }
70
+ return `${numberToColumnName(column)}${row}`;
71
+ }
72
+ export function formatA1Address(parsed) {
73
+ const start = formatA1Cell(parsed.startRow, parsed.startColumn);
74
+ const end = formatA1Cell(parsed.endRow, parsed.endColumn);
75
+ const range = start === end ? start : `${start}:${end}`;
76
+ return parsed.sheetName ? `${quoteSheetName(parsed.sheetName)}!${range}` : range;
77
+ }
78
+ function unquoteSheetName(sheetName) {
79
+ if (!sheetName) {
80
+ return undefined;
81
+ }
82
+ if (sheetName.startsWith("'") && sheetName.endsWith("'")) {
83
+ return sheetName.slice(1, -1).replace(/''/g, "'");
84
+ }
85
+ return sheetName;
86
+ }
87
+ function quoteSheetName(sheetName) {
88
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(sheetName) ? sheetName : `'${sheetName.replace(/'/g, "''")}'`;
89
+ }
90
+ //# sourceMappingURL=range-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-address.js","sourceRoot":"","sources":["../src/range-address.ts"],"names":[],"mappings":"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"}