@opentabs-dev/opentabs-plugin-excel-online 0.0.74

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 (129) hide show
  1. package/README.md +159 -0
  2. package/dist/adapter.iife.js +15273 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/excel-api.d.ts +24 -0
  5. package/dist/excel-api.d.ts.map +1 -0
  6. package/dist/excel-api.js +130 -0
  7. package/dist/excel-api.js.map +1 -0
  8. package/dist/index.d.ts +14 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +80 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/tools/add-named-item.d.ts +14 -0
  13. package/dist/tools/add-named-item.d.ts.map +1 -0
  14. package/dist/tools/add-named-item.js +29 -0
  15. package/dist/tools/add-named-item.js.map +1 -0
  16. package/dist/tools/add-table-column.d.ts +13 -0
  17. package/dist/tools/add-table-column.d.ts.map +1 -0
  18. package/dist/tools/add-table-column.js +29 -0
  19. package/dist/tools/add-table-column.js.map +1 -0
  20. package/dist/tools/add-table-row.d.ts +12 -0
  21. package/dist/tools/add-table-row.d.ts.map +1 -0
  22. package/dist/tools/add-table-row.js +26 -0
  23. package/dist/tools/add-table-row.js.map +1 -0
  24. package/dist/tools/add-worksheet.d.ts +12 -0
  25. package/dist/tools/add-worksheet.d.ts.map +1 -0
  26. package/dist/tools/add-worksheet.js +24 -0
  27. package/dist/tools/add-worksheet.js.map +1 -0
  28. package/dist/tools/calculate-workbook.d.ts +11 -0
  29. package/dist/tools/calculate-workbook.d.ts.map +1 -0
  30. package/dist/tools/calculate-workbook.js +28 -0
  31. package/dist/tools/calculate-workbook.js.map +1 -0
  32. package/dist/tools/clear-range.d.ts +13 -0
  33. package/dist/tools/clear-range.d.ts.map +1 -0
  34. package/dist/tools/clear-range.js +24 -0
  35. package/dist/tools/clear-range.js.map +1 -0
  36. package/dist/tools/create-chart.d.ts +21 -0
  37. package/dist/tools/create-chart.d.ts.map +1 -0
  38. package/dist/tools/create-chart.js +36 -0
  39. package/dist/tools/create-chart.js.map +1 -0
  40. package/dist/tools/create-table.d.ts +14 -0
  41. package/dist/tools/create-table.d.ts.map +1 -0
  42. package/dist/tools/create-table.js +28 -0
  43. package/dist/tools/create-table.js.map +1 -0
  44. package/dist/tools/delete-chart.d.ts +8 -0
  45. package/dist/tools/delete-chart.d.ts.map +1 -0
  46. package/dist/tools/delete-chart.js +23 -0
  47. package/dist/tools/delete-chart.js.map +1 -0
  48. package/dist/tools/delete-range.d.ts +12 -0
  49. package/dist/tools/delete-range.d.ts.map +1 -0
  50. package/dist/tools/delete-range.js +24 -0
  51. package/dist/tools/delete-range.js.map +1 -0
  52. package/dist/tools/delete-table-row.d.ts +8 -0
  53. package/dist/tools/delete-table-row.d.ts.map +1 -0
  54. package/dist/tools/delete-table-row.js +25 -0
  55. package/dist/tools/delete-table-row.js.map +1 -0
  56. package/dist/tools/delete-table.d.ts +7 -0
  57. package/dist/tools/delete-table.d.ts.map +1 -0
  58. package/dist/tools/delete-table.js +22 -0
  59. package/dist/tools/delete-table.js.map +1 -0
  60. package/dist/tools/delete-worksheet.d.ts +7 -0
  61. package/dist/tools/delete-worksheet.d.ts.map +1 -0
  62. package/dist/tools/delete-worksheet.js +22 -0
  63. package/dist/tools/delete-worksheet.js.map +1 -0
  64. package/dist/tools/evaluate-formula.d.ts +9 -0
  65. package/dist/tools/evaluate-formula.d.ts.map +1 -0
  66. package/dist/tools/evaluate-formula.js +44 -0
  67. package/dist/tools/evaluate-formula.js.map +1 -0
  68. package/dist/tools/get-current-user.d.ts +9 -0
  69. package/dist/tools/get-current-user.d.ts.map +1 -0
  70. package/dist/tools/get-current-user.js +25 -0
  71. package/dist/tools/get-current-user.js.map +1 -0
  72. package/dist/tools/get-range.d.ts +16 -0
  73. package/dist/tools/get-range.d.ts.map +1 -0
  74. package/dist/tools/get-range.js +22 -0
  75. package/dist/tools/get-range.js.map +1 -0
  76. package/dist/tools/get-table-columns.d.ts +11 -0
  77. package/dist/tools/get-table-columns.d.ts.map +1 -0
  78. package/dist/tools/get-table-columns.js +21 -0
  79. package/dist/tools/get-table-columns.js.map +1 -0
  80. package/dist/tools/get-table-rows.d.ts +10 -0
  81. package/dist/tools/get-table-rows.d.ts.map +1 -0
  82. package/dist/tools/get-table-rows.js +21 -0
  83. package/dist/tools/get-table-rows.js.map +1 -0
  84. package/dist/tools/get-used-range.d.ts +15 -0
  85. package/dist/tools/get-used-range.d.ts.map +1 -0
  86. package/dist/tools/get-used-range.js +21 -0
  87. package/dist/tools/get-used-range.js.map +1 -0
  88. package/dist/tools/get-workbook-info.d.ts +9 -0
  89. package/dist/tools/get-workbook-info.d.ts.map +1 -0
  90. package/dist/tools/get-workbook-info.js +29 -0
  91. package/dist/tools/get-workbook-info.js.map +1 -0
  92. package/dist/tools/insert-range.d.ts +20 -0
  93. package/dist/tools/insert-range.d.ts.map +1 -0
  94. package/dist/tools/insert-range.js +23 -0
  95. package/dist/tools/insert-range.js.map +1 -0
  96. package/dist/tools/list-charts.d.ts +14 -0
  97. package/dist/tools/list-charts.d.ts.map +1 -0
  98. package/dist/tools/list-charts.js +21 -0
  99. package/dist/tools/list-charts.js.map +1 -0
  100. package/dist/tools/list-named-items.d.ts +10 -0
  101. package/dist/tools/list-named-items.d.ts.map +1 -0
  102. package/dist/tools/list-named-items.js +19 -0
  103. package/dist/tools/list-named-items.js.map +1 -0
  104. package/dist/tools/list-tables.d.ts +13 -0
  105. package/dist/tools/list-tables.d.ts.map +1 -0
  106. package/dist/tools/list-tables.js +25 -0
  107. package/dist/tools/list-tables.js.map +1 -0
  108. package/dist/tools/list-worksheets.d.ts +10 -0
  109. package/dist/tools/list-worksheets.d.ts.map +1 -0
  110. package/dist/tools/list-worksheets.js +19 -0
  111. package/dist/tools/list-worksheets.js.map +1 -0
  112. package/dist/tools/schemas.d.ts +150 -0
  113. package/dist/tools/schemas.d.ts.map +1 -0
  114. package/dist/tools/schemas.js +111 -0
  115. package/dist/tools/schemas.js.map +1 -0
  116. package/dist/tools/sort-range.d.ts +13 -0
  117. package/dist/tools/sort-range.d.ts.map +1 -0
  118. package/dist/tools/sort-range.js +43 -0
  119. package/dist/tools/sort-range.js.map +1 -0
  120. package/dist/tools/update-range.d.ts +19 -0
  121. package/dist/tools/update-range.d.ts.map +1 -0
  122. package/dist/tools/update-range.js +41 -0
  123. package/dist/tools/update-range.js.map +1 -0
  124. package/dist/tools/update-worksheet.d.ts +19 -0
  125. package/dist/tools/update-worksheet.d.ts.map +1 -0
  126. package/dist/tools/update-worksheet.js +32 -0
  127. package/dist/tools/update-worksheet.js.map +1 -0
  128. package/dist/tools.json +1781 -0
  129. package/package.json +55 -0
@@ -0,0 +1,24 @@
1
+ export declare const isAuthenticated: () => boolean;
2
+ export declare const waitForAuth: () => Promise<boolean>;
3
+ interface WorkbookContext {
4
+ driveId: string;
5
+ itemId: string;
6
+ }
7
+ export declare const getWorkbookContext: () => WorkbookContext | null;
8
+ export declare const api: <T>(endpoint: string, options?: {
9
+ method?: string;
10
+ body?: unknown;
11
+ query?: Record<string, string | number | boolean | undefined>;
12
+ }) => Promise<T>;
13
+ export declare const workbookApi: <T>(path: string, options?: {
14
+ method?: string;
15
+ body?: unknown;
16
+ query?: Record<string, string | number | boolean | undefined>;
17
+ }) => Promise<T>;
18
+ export declare const getUserInfo: () => Promise<{
19
+ displayName: string;
20
+ mail: string;
21
+ id: string;
22
+ }>;
23
+ export {};
24
+ //# sourceMappingURL=excel-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-api.d.ts","sourceRoot":"","sources":["../src/excel-api.ts"],"names":[],"mappings":"AAiEA,eAAO,MAAM,eAAe,QAAO,OAA6B,CAAC;AAEjE,eAAO,MAAM,WAAW,QAAO,OAAO,CAAC,OAAO,CAI3C,CAAC;AAIJ,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB,QAAO,eAAe,GAAG,IAMvD,CAAC;AAYF,eAAO,MAAM,GAAG,GAAU,CAAC,EACzB,UAAU,MAAM,EAChB,UAAS;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC1D,KACL,OAAO,CAAC,CAAC,CAyDX,CAAC;AAIF,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,MAAM,MAAM,EACZ,UAAS;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC1D,KACL,OAAO,CAAC,CAAC,CAIX,CAAC;AAIF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAE7F,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { ToolError, findLocalStorageEntry, getAuthCache, setAuthCache, clearAuthCache, getCurrentUrl, waitUntil, parseRetryAfterMs, buildQueryString, } from '@opentabs-dev/plugin-sdk';
2
+ const GRAPH_BASE = 'https://graph.microsoft.com/v1.0';
3
+ const MSAL_CLIENT_ID = '2821b473-fe24-4c86-ba16-62834d6e80c3';
4
+ const getGraphToken = () => {
5
+ // Search localStorage for MSAL access tokens scoped to Graph API
6
+ const entry = findLocalStorageEntry(key => key.includes('accesstoken') && key.includes('graph.microsoft.com') && key.includes(MSAL_CLIENT_ID));
7
+ if (!entry)
8
+ return null;
9
+ try {
10
+ const parsed = JSON.parse(entry.value);
11
+ if (!parsed.secret)
12
+ return null;
13
+ // Check expiry — MSAL stores Unix timestamps as strings
14
+ const expiresOn = Number.parseInt(parsed.expires_on, 10);
15
+ if (expiresOn && expiresOn < Math.floor(Date.now() / 1000))
16
+ return null;
17
+ return parsed.secret;
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ };
23
+ const getAuth = () => {
24
+ const cached = getAuthCache('excel-online');
25
+ if (cached) {
26
+ // Verify the cached token is still valid by re-reading from localStorage
27
+ const fresh = getGraphToken();
28
+ if (fresh && fresh === cached.token)
29
+ return cached;
30
+ if (fresh) {
31
+ const auth = { token: fresh };
32
+ setAuthCache('excel-online', auth);
33
+ return auth;
34
+ }
35
+ clearAuthCache('excel-online');
36
+ return null;
37
+ }
38
+ const token = getGraphToken();
39
+ if (!token)
40
+ return null;
41
+ const auth = { token };
42
+ setAuthCache('excel-online', auth);
43
+ return auth;
44
+ };
45
+ export const isAuthenticated = () => getAuth() !== null;
46
+ export const waitForAuth = () => waitUntil(() => isAuthenticated(), { interval: 500, timeout: 5000 }).then(() => true, () => false);
47
+ export const getWorkbookContext = () => {
48
+ const url = new URL(getCurrentUrl());
49
+ const driveId = url.searchParams.get('driveId');
50
+ const docId = url.searchParams.get('docId');
51
+ if (driveId && docId)
52
+ return { driveId, itemId: docId };
53
+ return null;
54
+ };
55
+ const requireWorkbookContext = () => {
56
+ const ctx = getWorkbookContext();
57
+ if (!ctx) {
58
+ throw ToolError.validation('No workbook is currently open. Please open an Excel workbook in the browser first.');
59
+ }
60
+ return ctx;
61
+ };
62
+ // --- API caller ---
63
+ export const api = async (endpoint, options = {}) => {
64
+ const auth = getAuth();
65
+ if (!auth)
66
+ throw ToolError.auth('Not authenticated — please log in to Microsoft 365.');
67
+ const qs = options.query ? buildQueryString(options.query) : '';
68
+ const url = qs ? `${GRAPH_BASE}${endpoint}?${qs}` : `${GRAPH_BASE}${endpoint}`;
69
+ const headers = {
70
+ Authorization: `Bearer ${auth.token}`,
71
+ };
72
+ let fetchBody;
73
+ if (options.body !== undefined) {
74
+ headers['Content-Type'] = 'application/json';
75
+ fetchBody = JSON.stringify(options.body);
76
+ }
77
+ let response;
78
+ try {
79
+ response = await fetch(url, {
80
+ method: options.method ?? 'GET',
81
+ headers,
82
+ body: fetchBody,
83
+ signal: AbortSignal.timeout(30_000),
84
+ });
85
+ }
86
+ catch (err) {
87
+ if (err instanceof DOMException && err.name === 'TimeoutError')
88
+ throw ToolError.timeout(`API request timed out: ${endpoint}`);
89
+ if (err instanceof DOMException && err.name === 'AbortError')
90
+ throw new ToolError('Request was aborted', 'aborted');
91
+ throw new ToolError(`Network error: ${err instanceof Error ? err.message : String(err)}`, 'network_error', {
92
+ category: 'internal',
93
+ retryable: true,
94
+ });
95
+ }
96
+ if (!response.ok) {
97
+ const errorBody = (await response.text().catch(() => '')).substring(0, 512);
98
+ // On 401, clear the cached auth so it re-reads on next call
99
+ if (response.status === 401) {
100
+ clearAuthCache('excel-online');
101
+ throw ToolError.auth(`Auth error (401): ${errorBody}`);
102
+ }
103
+ if (response.status === 403)
104
+ throw ToolError.auth(`Forbidden (403): ${errorBody}`);
105
+ if (response.status === 404)
106
+ throw ToolError.notFound(`Not found: ${endpoint} — ${errorBody}`);
107
+ if (response.status === 429) {
108
+ const retryAfter = response.headers.get('Retry-After');
109
+ const retryMs = retryAfter !== null ? parseRetryAfterMs(retryAfter) : undefined;
110
+ throw ToolError.rateLimited(`Rate limited: ${endpoint} — ${errorBody}`, retryMs);
111
+ }
112
+ if (response.status === 400 || response.status === 422)
113
+ throw ToolError.validation(`Validation error: ${endpoint} — ${errorBody}`);
114
+ throw ToolError.internal(`API error (${response.status}): ${endpoint} — ${errorBody}`);
115
+ }
116
+ if (response.status === 204)
117
+ return {};
118
+ return (await response.json());
119
+ };
120
+ // --- Workbook API helper ---
121
+ export const workbookApi = async (path, options = {}) => {
122
+ const ctx = requireWorkbookContext();
123
+ const endpoint = `/drives/${ctx.driveId}/items/${encodeURIComponent(ctx.itemId)}/workbook${path}`;
124
+ return api(endpoint, options);
125
+ };
126
+ // --- User API helper ---
127
+ export const getUserInfo = async () => {
128
+ return api('/me');
129
+ };
130
+ //# sourceMappingURL=excel-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-api.js","sourceRoot":"","sources":["../src/excel-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
2
+ import type { ToolDefinition } from '@opentabs-dev/plugin-sdk';
3
+ declare class ExcelOnlinePlugin extends OpenTabsPlugin {
4
+ readonly name = "excel-online";
5
+ readonly description = "OpenTabs plugin for Microsoft Excel Online";
6
+ readonly displayName = "Excel Online";
7
+ readonly urlPatterns: string[];
8
+ readonly homepage = "https://excel.cloud.microsoft/";
9
+ readonly tools: ToolDefinition[];
10
+ isReady(): Promise<boolean>;
11
+ }
12
+ declare const _default: ExcelOnlinePlugin;
13
+ export default _default;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AA+B/D,cAAM,iBAAkB,SAAQ,cAAc;IAC5C,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,WAAW,gDAAgD;IACpE,SAAkB,WAAW,kBAAkB;IAC/C,QAAQ,CAAC,WAAW,WAAmC;IACvD,SAAkB,QAAQ,oCAAoC;IAC9D,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,CAmC9B;IAEI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAIlC;;AAED,wBAAuC"}
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
2
+ import { isAuthenticated, waitForAuth } from './excel-api.js';
3
+ import { addNamedItem } from './tools/add-named-item.js';
4
+ import { addTableColumn } from './tools/add-table-column.js';
5
+ import { addTableRow } from './tools/add-table-row.js';
6
+ import { addWorksheet } from './tools/add-worksheet.js';
7
+ import { calculateWorkbook } from './tools/calculate-workbook.js';
8
+ import { clearRange } from './tools/clear-range.js';
9
+ import { createChart } from './tools/create-chart.js';
10
+ import { createTable } from './tools/create-table.js';
11
+ import { deleteChart } from './tools/delete-chart.js';
12
+ import { deleteRange } from './tools/delete-range.js';
13
+ import { deleteTable } from './tools/delete-table.js';
14
+ import { deleteTableRow } from './tools/delete-table-row.js';
15
+ import { deleteWorksheet } from './tools/delete-worksheet.js';
16
+ import { evaluateFormula } from './tools/evaluate-formula.js';
17
+ import { getCurrentUser } from './tools/get-current-user.js';
18
+ import { getRange } from './tools/get-range.js';
19
+ import { getTableColumns } from './tools/get-table-columns.js';
20
+ import { getTableRows } from './tools/get-table-rows.js';
21
+ import { getUsedRange } from './tools/get-used-range.js';
22
+ import { getWorkbookInfo } from './tools/get-workbook-info.js';
23
+ import { insertRange } from './tools/insert-range.js';
24
+ import { listCharts } from './tools/list-charts.js';
25
+ import { listNamedItems } from './tools/list-named-items.js';
26
+ import { listTables } from './tools/list-tables.js';
27
+ import { listWorksheets } from './tools/list-worksheets.js';
28
+ import { sortRange } from './tools/sort-range.js';
29
+ import { updateRange } from './tools/update-range.js';
30
+ import { updateWorksheet } from './tools/update-worksheet.js';
31
+ class ExcelOnlinePlugin extends OpenTabsPlugin {
32
+ name = 'excel-online';
33
+ description = 'OpenTabs plugin for Microsoft Excel Online';
34
+ displayName = 'Excel Online';
35
+ urlPatterns = ['*://excel.cloud.microsoft/*'];
36
+ homepage = 'https://excel.cloud.microsoft/';
37
+ tools = [
38
+ // Account
39
+ getCurrentUser,
40
+ // Workbook
41
+ getWorkbookInfo,
42
+ calculateWorkbook,
43
+ evaluateFormula,
44
+ listNamedItems,
45
+ addNamedItem,
46
+ // Worksheets
47
+ listWorksheets,
48
+ addWorksheet,
49
+ updateWorksheet,
50
+ deleteWorksheet,
51
+ // Ranges
52
+ getRange,
53
+ getUsedRange,
54
+ updateRange,
55
+ clearRange,
56
+ insertRange,
57
+ deleteRange,
58
+ sortRange,
59
+ // Tables
60
+ listTables,
61
+ createTable,
62
+ deleteTable,
63
+ getTableRows,
64
+ getTableColumns,
65
+ addTableRow,
66
+ deleteTableRow,
67
+ addTableColumn,
68
+ // Charts
69
+ listCharts,
70
+ createChart,
71
+ deleteChart,
72
+ ];
73
+ async isReady() {
74
+ if (isAuthenticated())
75
+ return true;
76
+ return waitForAuth();
77
+ }
78
+ }
79
+ export default new ExcelOnlinePlugin();
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,iBAAkB,SAAQ,cAAc;IACnC,IAAI,GAAG,cAAc,CAAC;IACtB,WAAW,GAAG,4CAA4C,CAAC;IAClD,WAAW,GAAG,cAAc,CAAC;IACtC,WAAW,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACrC,QAAQ,GAAG,gCAAgC,CAAC;IACrD,KAAK,GAAqB;QACjC,UAAU;QACV,cAAc;QACd,WAAW;QACX,eAAe;QACf,iBAAiB;QACjB,eAAe;QACf,cAAc;QACd,YAAY;QACZ,aAAa;QACb,cAAc;QACd,YAAY;QACZ,eAAe;QACf,eAAe;QACf,SAAS;QACT,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,UAAU;QACV,WAAW;QACX,WAAW;QACX,SAAS;QACT,SAAS;QACT,UAAU;QACV,WAAW;QACX,WAAW;QACX,YAAY;QACZ,eAAe;QACf,WAAW;QACX,cAAc;QACd,cAAc;QACd,SAAS;QACT,UAAU;QACV,WAAW;QACX,WAAW;KACZ,CAAC;IAEF,KAAK,CAAC,OAAO;QACX,IAAI,eAAe,EAAE;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;CACF;AAED,eAAe,IAAI,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const addNamedItem: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodString;
4
+ reference: z.ZodString;
5
+ comment: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ item: z.ZodObject<{
8
+ name: z.ZodString;
9
+ type: z.ZodString;
10
+ value: z.ZodString;
11
+ visible: z.ZodBoolean;
12
+ }, z.core.$strip>;
13
+ }, z.core.$strip>>;
14
+ //# sourceMappingURL=add-named-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-named-item.d.ts","sourceRoot":"","sources":["../../src/tools/add-named-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;;;;kBAuBvB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { workbookApi } from '../excel-api.js';
4
+ import { namedItemSchema, mapNamedItem } from './schemas.js';
5
+ export const addNamedItem = defineTool({
6
+ name: 'add_named_item',
7
+ displayName: 'Add Named Item',
8
+ description: 'Add a named range or named value to the workbook. For a range, provide a reference like "Sheet1!A1:C10". For a value or formula, provide the value directly.',
9
+ summary: 'Create a named range or constant',
10
+ icon: 'tag',
11
+ group: 'Workbook',
12
+ input: z.object({
13
+ name: z.string().describe('Name for the named item (must be unique in the workbook)'),
14
+ reference: z.string().describe('Range reference (e.g., "Sheet1!A1:C10") or value/formula'),
15
+ comment: z.string().optional().describe('Optional comment for the named item'),
16
+ }),
17
+ output: z.object({ item: namedItemSchema }),
18
+ handle: async (params) => {
19
+ const body = {
20
+ name: params.name,
21
+ reference: params.reference,
22
+ };
23
+ if (params.comment)
24
+ body.comment = params.comment;
25
+ const data = await workbookApi('/names/add', { method: 'POST', body });
26
+ return { item: mapNamedItem(data) };
27
+ },
28
+ });
29
+ //# sourceMappingURL=add-named-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-named-item.js","sourceRoot":"","sources":["../../src/tools/add-named-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EACT,8JAA8J;IAChK,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;QACrF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;QAC1F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC/E,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAC3C,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;QACF,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAe,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export declare const addTableColumn: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ table: z.ZodString;
4
+ values: z.ZodArray<z.ZodArray<z.ZodUnknown>>;
5
+ index: z.ZodOptional<z.ZodNumber>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ column: z.ZodObject<{
8
+ id: z.ZodString;
9
+ name: z.ZodString;
10
+ index: z.ZodNumber;
11
+ }, z.core.$strip>;
12
+ }, z.core.$strip>>;
13
+ //# sourceMappingURL=add-table-column.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-table-column.d.ts","sourceRoot":"","sources":["../../src/tools/add-table-column.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;;;kBAuBzB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { workbookApi } from '../excel-api.js';
4
+ import { tableColumnSchema, mapTableColumn } from './schemas.js';
5
+ export const addTableColumn = defineTool({
6
+ name: 'add_table_column',
7
+ displayName: 'Add Table Column',
8
+ description: 'Add a new column to a table. Provide values as a 2D array where the first value is the header name and subsequent values are the data for each existing row. Optionally specify an insertion index.',
9
+ summary: 'Add a column to a table',
10
+ icon: 'plus',
11
+ group: 'Tables',
12
+ input: z.object({
13
+ table: z.string().describe('Table name or ID'),
14
+ values: z.array(z.array(z.unknown())).describe('2D column values — first entry is the header, rest are data rows'),
15
+ index: z.number().int().min(0).optional().describe('Zero-based column insertion index. Appends at end if omitted.'),
16
+ }),
17
+ output: z.object({ column: tableColumnSchema }),
18
+ handle: async (params) => {
19
+ const body = { values: params.values };
20
+ if (params.index !== undefined)
21
+ body.index = params.index;
22
+ const data = await workbookApi(`/tables('${encodeURIComponent(params.table)}')/columns`, {
23
+ method: 'POST',
24
+ body,
25
+ });
26
+ return { column: mapTableColumn(data) };
27
+ },
28
+ });
29
+ //# sourceMappingURL=add-table-column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-table-column.js","sourceRoot":"","sources":["../../src/tools/add-table-column.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,qMAAqM;IACvM,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC9C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kEAAkE,CAAC;QAClH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;KACpH,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC/C,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAChE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAiB,YAAY,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE;YACvG,MAAM,EAAE,MAAM;YACd,IAAI;SACL,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ export declare const addTableRow: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ table: z.ZodString;
4
+ values: z.ZodArray<z.ZodArray<z.ZodUnknown>>;
5
+ index: z.ZodOptional<z.ZodNumber>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ row: z.ZodObject<{
8
+ index: z.ZodNumber;
9
+ values: z.ZodArray<z.ZodArray<z.ZodUnknown>>;
10
+ }, z.core.$strip>;
11
+ }, z.core.$strip>>;
12
+ //# sourceMappingURL=add-table-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-table-row.d.ts","sourceRoot":"","sources":["../../src/tools/add-table-row.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW;;;;;;;;;kBAqBtB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { workbookApi } from '../excel-api.js';
4
+ import { tableRowSchema, mapTableRow } from './schemas.js';
5
+ export const addTableRow = defineTool({
6
+ name: 'add_table_row',
7
+ displayName: 'Add Table Row',
8
+ description: 'Add one or more rows to a table. Values is a 2D array where each inner array is a row. The number of values in each row must match the number of table columns. Optionally specify an insertion index (0-based); rows are appended at the end if omitted.',
9
+ summary: 'Add rows to a table',
10
+ icon: 'plus',
11
+ group: 'Tables',
12
+ input: z.object({
13
+ table: z.string().describe('Table name or ID'),
14
+ values: z.array(z.array(z.unknown())).describe('2D array of row values. Each inner array is one row.'),
15
+ index: z.number().int().min(0).optional().describe('Zero-based insertion index. Appends at end if omitted.'),
16
+ }),
17
+ output: z.object({ row: tableRowSchema }),
18
+ handle: async (params) => {
19
+ const data = await workbookApi(`/tables('${encodeURIComponent(params.table)}')/rows`, {
20
+ method: 'POST',
21
+ body: { values: params.values, index: params.index ?? null },
22
+ });
23
+ return { row: mapTableRow(data) };
24
+ },
25
+ });
26
+ //# sourceMappingURL=add-table-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-table-row.js","sourceRoot":"","sources":["../../src/tools/add-table-row.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EACT,2PAA2P;IAC7P,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC9C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACtG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KAC7G,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;IACzC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAc,YAAY,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE;YACjG,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;SAC7D,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IACpC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ export declare const addWorksheet: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ name: z.ZodOptional<z.ZodString>;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ worksheet: z.ZodObject<{
6
+ id: z.ZodString;
7
+ name: z.ZodString;
8
+ position: z.ZodNumber;
9
+ visibility: z.ZodString;
10
+ }, z.core.$strip>;
11
+ }, z.core.$strip>>;
12
+ //# sourceMappingURL=add-worksheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-worksheet.d.ts","sourceRoot":"","sources":["../../src/tools/add-worksheet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;;kBAkBvB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { workbookApi } from '../excel-api.js';
4
+ import { worksheetSchema, mapWorksheet } from './schemas.js';
5
+ export const addWorksheet = defineTool({
6
+ name: 'add_worksheet',
7
+ displayName: 'Add Worksheet',
8
+ description: 'Add a new worksheet to the currently open Excel workbook. Optionally specify a name for the new worksheet.',
9
+ summary: 'Add a new worksheet',
10
+ icon: 'plus',
11
+ group: 'Worksheets',
12
+ input: z.object({
13
+ name: z.string().optional().describe('Name for the new worksheet. Auto-generated if omitted.'),
14
+ }),
15
+ output: z.object({ worksheet: worksheetSchema }),
16
+ handle: async (params) => {
17
+ const body = {};
18
+ if (params.name)
19
+ body.name = params.name;
20
+ const data = await workbookApi('/worksheets', { method: 'POST', body });
21
+ return { worksheet: mapWorksheet(data) };
22
+ },
23
+ });
24
+ //# sourceMappingURL=add-worksheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-worksheet.js","sourceRoot":"","sources":["../../src/tools/add-worksheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EACT,4GAA4G;IAC9G,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KAC/F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IAChD,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,MAAM,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAe,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ export declare const calculateWorkbook: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ calculation_type: z.ZodOptional<z.ZodEnum<{
4
+ Recalculate: "Recalculate";
5
+ Full: "Full";
6
+ FullRebuild: "FullRebuild";
7
+ }>>;
8
+ }, z.core.$strip>, z.ZodObject<{
9
+ success: z.ZodBoolean;
10
+ }, z.core.$strip>>;
11
+ //# sourceMappingURL=calculate-workbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-workbook.d.ts","sourceRoot":"","sources":["../../src/tools/calculate-workbook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;;kBAwB5B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { workbookApi } from '../excel-api.js';
4
+ export const calculateWorkbook = defineTool({
5
+ name: 'calculate_workbook',
6
+ displayName: 'Calculate Workbook',
7
+ description: 'Recalculate all formulas in the workbook. Use calculation_type "Recalculate" for normal recalculation, "Full" to force recalculation of all formulas, or "FullRebuild" to rebuild the dependency chain and recalculate.',
8
+ summary: 'Recalculate all formulas',
9
+ icon: 'calculator',
10
+ group: 'Workbook',
11
+ input: z.object({
12
+ calculation_type: z
13
+ .enum(['Recalculate', 'Full', 'FullRebuild'])
14
+ .optional()
15
+ .describe('Calculation type (default "Recalculate")'),
16
+ }),
17
+ output: z.object({
18
+ success: z.boolean().describe('Whether the operation succeeded'),
19
+ }),
20
+ handle: async (params) => {
21
+ await workbookApi('/application/calculate', {
22
+ method: 'POST',
23
+ body: { calculationType: params.calculation_type ?? 'Recalculate' },
24
+ });
25
+ return { success: true };
26
+ },
27
+ });
28
+ //# sourceMappingURL=calculate-workbook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-workbook.js","sourceRoot":"","sources":["../../src/tools/calculate-workbook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EACT,yNAAyN;IAC3N,OAAO,EAAE,0BAA0B;IACnC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,gBAAgB,EAAE,CAAC;aAChB,IAAI,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;aAC5C,QAAQ,EAAE;aACV,QAAQ,CAAC,0CAA0C,CAAC;KACxD,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACjE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,WAAW,CAAC,wBAAwB,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,gBAAgB,IAAI,aAAa,EAAE;SACpE,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export declare const clearRange: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ worksheet: z.ZodString;
4
+ address: z.ZodString;
5
+ apply_to: z.ZodOptional<z.ZodEnum<{
6
+ All: "All";
7
+ Contents: "Contents";
8
+ Formats: "Formats";
9
+ }>>;
10
+ }, z.core.$strip>, z.ZodObject<{
11
+ success: z.ZodBoolean;
12
+ }, z.core.$strip>>;
13
+ //# sourceMappingURL=clear-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-range.d.ts","sourceRoot":"","sources":["../../src/tools/clear-range.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,UAAU;;;;;;;;;;kBAuBrB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { workbookApi } from '../excel-api.js';
4
+ export const clearRange = defineTool({
5
+ name: 'clear_range',
6
+ displayName: 'Clear Range',
7
+ description: 'Clear the contents, formatting, or both from a range of cells. Use apply_to to control what is cleared: "All" clears everything, "Contents" clears values and formulas only, "Formats" clears formatting only.',
8
+ summary: 'Clear cell contents or formatting',
9
+ icon: 'eraser',
10
+ group: 'Ranges',
11
+ input: z.object({
12
+ worksheet: z.string().describe('Worksheet name (e.g., "Sheet1")'),
13
+ address: z.string().describe('Range address in A1 notation (e.g., "A1:C10")'),
14
+ apply_to: z.enum(['All', 'Contents', 'Formats']).optional().describe('What to clear (default "All")'),
15
+ }),
16
+ output: z.object({
17
+ success: z.boolean().describe('Whether the operation succeeded'),
18
+ }),
19
+ handle: async (params) => {
20
+ await workbookApi(`/worksheets('${encodeURIComponent(params.worksheet)}')/range(address='${encodeURIComponent(params.address)}')/clear`, { method: 'POST', body: { applyTo: params.apply_to ?? 'All' } });
21
+ return { success: true };
22
+ },
23
+ });
24
+ //# sourceMappingURL=clear-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-range.js","sourceRoot":"","sources":["../../src/tools/clear-range.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EACT,gNAAgN;IAClN,OAAO,EAAE,mCAAmC;IAC5C,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACjE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC7E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACtG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACjE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,WAAW,CACf,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EACrH,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK,EAAE,EAAE,CAChE,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ export declare const createChart: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ worksheet: z.ZodString;
4
+ type: z.ZodString;
5
+ source_data: z.ZodString;
6
+ series_by: z.ZodOptional<z.ZodEnum<{
7
+ Auto: "Auto";
8
+ Columns: "Columns";
9
+ Rows: "Rows";
10
+ }>>;
11
+ }, z.core.$strip>, z.ZodObject<{
12
+ chart: z.ZodObject<{
13
+ id: z.ZodString;
14
+ name: z.ZodString;
15
+ height: z.ZodNumber;
16
+ width: z.ZodNumber;
17
+ top: z.ZodNumber;
18
+ left: z.ZodNumber;
19
+ }, z.core.$strip>;
20
+ }, z.core.$strip>>;
21
+ //# sourceMappingURL=create-chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-chart.d.ts","sourceRoot":"","sources":["../../src/tools/create-chart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;kBA+BtB,CAAC"}