@aaronsb/google-workspace-mcp 2.7.1 → 4.0.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.
- package/LICENSE +201 -21
- package/LICENSE-MIT +21 -0
- package/NOTICE +24 -0
- package/README.md +87 -57
- package/build/accounts/auth.d.ts +1 -1
- package/build/accounts/auth.js +1 -1
- package/build/accounts/oauth.js +3 -3
- package/build/accounts/oauth.js.map +1 -1
- package/build/accounts/token-service.js +1 -1
- package/build/accounts/token-service.js.map +1 -1
- package/build/coverage/analyze.d.ts +1 -1
- package/build/coverage/analyze.js +6 -4
- package/build/coverage/analyze.js.map +1 -1
- package/build/coverage/baseline.js +37 -20
- package/build/coverage/baseline.js.map +1 -1
- package/build/coverage/compare.d.ts +1 -1
- package/build/coverage/compare.js +19 -10
- package/build/coverage/compare.js.map +1 -1
- package/build/coverage/discover.d.ts +5 -5
- package/build/coverage/discover.js +71 -155
- package/build/coverage/discover.js.map +1 -1
- package/build/coverage/report.js +3 -3
- package/build/coverage/report.js.map +1 -1
- package/build/coverage/types.d.ts +19 -4
- package/build/executor/index.d.ts +0 -3
- package/build/executor/index.js +1 -2
- package/build/executor/index.js.map +1 -1
- package/build/factory/defaults.js +30 -4
- package/build/factory/defaults.js.map +1 -1
- package/build/factory/generator.d.ts +10 -4
- package/build/factory/generator.js +86 -96
- package/build/factory/generator.js.map +1 -1
- package/build/factory/manifest/README.md +4 -3
- package/build/factory/manifest/calendar.yaml +1 -11
- package/build/factory/manifest/docs.yaml +15 -6
- package/build/factory/manifest/drive.yaml +1 -5
- package/build/factory/manifest/gmail.yaml +32 -25
- package/build/factory/manifest/meet.yaml +1 -1
- package/build/factory/manifest/sheets.yaml +2 -5
- package/build/factory/manifest/tasks.yaml +40 -2
- package/build/factory/patches.js +2 -0
- package/build/factory/patches.js.map +1 -1
- package/build/factory/registry.d.ts +2 -3
- package/build/factory/registry.js +3 -9
- package/build/factory/registry.js.map +1 -1
- package/build/factory/safety.js +4 -4
- package/build/factory/safety.js.map +1 -1
- package/build/factory/types.d.ts +16 -15
- package/build/google/client.d.ts +45 -0
- package/build/google/client.js +232 -0
- package/build/google/client.js.map +1 -0
- package/build/google/descriptor.d.ts +40 -0
- package/build/google/descriptor.js +37 -0
- package/build/google/descriptor.js.map +1 -0
- package/build/google/descriptor.json +5271 -0
- package/build/google/errors.d.ts +45 -0
- package/build/google/errors.js +44 -0
- package/build/google/errors.js.map +1 -0
- package/build/google/methods.d.ts +37 -0
- package/build/google/methods.js +13 -0
- package/build/google/methods.js.map +1 -0
- package/build/index.js +30 -4
- package/build/index.js.map +1 -1
- package/build/node-floor.d.ts +16 -0
- package/build/node-floor.js +73 -0
- package/build/node-floor.js.map +1 -0
- package/build/server/formatting/markdown.d.ts +1 -1
- package/build/server/formatting/markdown.js +1 -1
- package/build/server/formatting/next-steps.js +1 -1
- package/build/server/formatting/next-steps.js.map +1 -1
- package/build/server/handlers/accounts.js +2 -2
- package/build/server/handlers/accounts.js.map +1 -1
- package/build/server/scratchpad/adapters/import-doc.js +15 -13
- package/build/server/scratchpad/adapters/import-doc.js.map +1 -1
- package/build/server/scratchpad/adapters/import-drive.js +16 -11
- package/build/server/scratchpad/adapters/import-drive.js.map +1 -1
- package/build/server/scratchpad/adapters/import-email.js +3 -15
- package/build/server/scratchpad/adapters/import-email.js.map +1 -1
- package/build/server/scratchpad/adapters/import-meet.js +5 -17
- package/build/server/scratchpad/adapters/import-meet.js.map +1 -1
- package/build/server/scratchpad/adapters/import-sheet.js +5 -6
- package/build/server/scratchpad/adapters/import-sheet.js.map +1 -1
- package/build/server/scratchpad/adapters/send-calendar.js +18 -13
- package/build/server/scratchpad/adapters/send-calendar.js.map +1 -1
- package/build/server/scratchpad/adapters/send-doc.js +22 -17
- package/build/server/scratchpad/adapters/send-doc.js.map +1 -1
- package/build/server/scratchpad/adapters/send-email-draft.d.ts +1 -1
- package/build/server/scratchpad/adapters/send-email-draft.js +17 -25
- package/build/server/scratchpad/adapters/send-email-draft.js.map +1 -1
- package/build/server/scratchpad/adapters/send-email.d.ts +2 -2
- package/build/server/scratchpad/adapters/send-email.js +21 -25
- package/build/server/scratchpad/adapters/send-email.js.map +1 -1
- package/build/server/scratchpad/adapters/send-sheet.js +10 -10
- package/build/server/scratchpad/adapters/send-sheet.js.map +1 -1
- package/build/server/scratchpad/adapters/send-task.js +9 -8
- package/build/server/scratchpad/adapters/send-task.js.map +1 -1
- package/build/server/scratchpad/handler.js +22 -28
- package/build/server/scratchpad/handler.js.map +1 -1
- package/build/server/scratchpad/manager.d.ts +1 -1
- package/build/server/server.js +13 -10
- package/build/server/server.js.map +1 -1
- package/build/server/session/tracker.js +21 -25
- package/build/server/session/tracker.js.map +1 -1
- package/build/server/tools.d.ts +1 -1
- package/build/server/tools.js +3 -3
- package/build/server/tools.js.map +1 -1
- package/build/services/calendar/patch.js +178 -68
- package/build/services/calendar/patch.js.map +1 -1
- package/build/services/docs/patch.d.ts +5 -3
- package/build/services/docs/patch.js +89 -19
- package/build/services/docs/patch.js.map +1 -1
- package/build/services/drive/patch.d.ts +1 -1
- package/build/services/drive/patch.js +115 -143
- package/build/services/drive/patch.js.map +1 -1
- package/build/services/gmail/attachments.js +10 -15
- package/build/services/gmail/attachments.js.map +1 -1
- package/build/services/gmail/mail.d.ts +34 -0
- package/build/services/gmail/mail.js +245 -0
- package/build/services/gmail/mail.js.map +1 -0
- package/build/services/gmail/mime.d.ts +45 -4
- package/build/services/gmail/mime.js +138 -4
- package/build/services/gmail/mime.js.map +1 -1
- package/build/services/gmail/patch.js +103 -53
- package/build/services/gmail/patch.js.map +1 -1
- package/build/services/meet/patch.js +24 -31
- package/build/services/meet/patch.js.map +1 -1
- package/build/services/sheets/patch.js +30 -35
- package/build/services/sheets/patch.js.map +1 -1
- package/build/services/tasks/patch.d.ts +18 -0
- package/build/services/tasks/patch.js +37 -0
- package/build/services/tasks/patch.js.map +1 -0
- package/build/version.d.ts +1 -1
- package/build/version.js +2 -2
- package/build/version.js.map +1 -1
- package/package.json +23 -12
- package/build/__helpers__/testSetup.d.ts +0 -1
- package/build/__helpers__/testSetup.js +0 -6
- package/build/__helpers__/testSetup.js.map +0 -1
- package/build/__tests__/accounts/credentials.test.d.ts +0 -1
- package/build/__tests__/accounts/credentials.test.js +0 -127
- package/build/__tests__/accounts/credentials.test.js.map +0 -1
- package/build/__tests__/accounts/oauth.test.d.ts +0 -1
- package/build/__tests__/accounts/oauth.test.js +0 -71
- package/build/__tests__/accounts/oauth.test.js.map +0 -1
- package/build/__tests__/accounts/registry.test.d.ts +0 -1
- package/build/__tests__/accounts/registry.test.js +0 -74
- package/build/__tests__/accounts/registry.test.js.map +0 -1
- package/build/__tests__/accounts/token-service.test.d.ts +0 -1
- package/build/__tests__/accounts/token-service.test.js +0 -126
- package/build/__tests__/accounts/token-service.test.js.map +0 -1
- package/build/__tests__/executor/errors.test.d.ts +0 -1
- package/build/__tests__/executor/errors.test.js +0 -42
- package/build/__tests__/executor/errors.test.js.map +0 -1
- package/build/__tests__/executor/gws.test.d.ts +0 -1
- package/build/__tests__/executor/gws.test.js +0 -187
- package/build/__tests__/executor/gws.test.js.map +0 -1
- package/build/__tests__/executor/paths.test.d.ts +0 -1
- package/build/__tests__/executor/paths.test.js +0 -60
- package/build/__tests__/executor/paths.test.js.map +0 -1
- package/build/__tests__/executor/resolve-binary.test.d.ts +0 -1
- package/build/__tests__/executor/resolve-binary.test.js +0 -58
- package/build/__tests__/executor/resolve-binary.test.js.map +0 -1
- package/build/__tests__/executor/workspace.test.d.ts +0 -1
- package/build/__tests__/executor/workspace.test.js +0 -143
- package/build/__tests__/executor/workspace.test.js.map +0 -1
- package/build/__tests__/factory/calendar-patch.test.d.ts +0 -5
- package/build/__tests__/factory/calendar-patch.test.js +0 -269
- package/build/__tests__/factory/calendar-patch.test.js.map +0 -1
- package/build/__tests__/factory/drive-patch.test.d.ts +0 -5
- package/build/__tests__/factory/drive-patch.test.js +0 -344
- package/build/__tests__/factory/drive-patch.test.js.map +0 -1
- package/build/__tests__/factory/generator.test.d.ts +0 -1
- package/build/__tests__/factory/generator.test.js +0 -240
- package/build/__tests__/factory/generator.test.js.map +0 -1
- package/build/__tests__/factory/patch-coverage.test.d.ts +0 -10
- package/build/__tests__/factory/patch-coverage.test.js +0 -182
- package/build/__tests__/factory/patch-coverage.test.js.map +0 -1
- package/build/__tests__/factory/safety.test.d.ts +0 -1
- package/build/__tests__/factory/safety.test.js +0 -107
- package/build/__tests__/factory/safety.test.js.map +0 -1
- package/build/__tests__/factory/sheets-patch.test.d.ts +0 -6
- package/build/__tests__/factory/sheets-patch.test.js +0 -498
- package/build/__tests__/factory/sheets-patch.test.js.map +0 -1
- package/build/__tests__/integration/executor.test.d.ts +0 -5
- package/build/__tests__/integration/executor.test.js +0 -38
- package/build/__tests__/integration/executor.test.js.map +0 -1
- package/build/__tests__/integration/handlers.test.d.ts +0 -6
- package/build/__tests__/integration/handlers.test.js +0 -95
- package/build/__tests__/integration/handlers.test.js.map +0 -1
- package/build/__tests__/integration/setup.d.ts +0 -19
- package/build/__tests__/integration/setup.js +0 -61
- package/build/__tests__/integration/setup.js.map +0 -1
- package/build/__tests__/server/formatting/html-sanitize.test.d.ts +0 -7
- package/build/__tests__/server/formatting/html-sanitize.test.js +0 -174
- package/build/__tests__/server/formatting/html-sanitize.test.js.map +0 -1
- package/build/__tests__/server/formatting/markdown.test.d.ts +0 -1
- package/build/__tests__/server/formatting/markdown.test.js +0 -259
- package/build/__tests__/server/formatting/markdown.test.js.map +0 -1
- package/build/__tests__/server/formatting/next-steps.test.d.ts +0 -1
- package/build/__tests__/server/formatting/next-steps.test.js +0 -42
- package/build/__tests__/server/formatting/next-steps.test.js.map +0 -1
- package/build/__tests__/server/handler.test.d.ts +0 -1
- package/build/__tests__/server/handler.test.js +0 -97
- package/build/__tests__/server/handler.test.js.map +0 -1
- package/build/__tests__/server/handlers/__mocks__/executor.d.ts +0 -173
- package/build/__tests__/server/handlers/__mocks__/executor.js +0 -135
- package/build/__tests__/server/handlers/__mocks__/executor.js.map +0 -1
- package/build/__tests__/server/handlers/accounts.test.d.ts +0 -1
- package/build/__tests__/server/handlers/accounts.test.js +0 -129
- package/build/__tests__/server/handlers/accounts.test.js.map +0 -1
- package/build/__tests__/server/handlers/calendar.test.d.ts +0 -1
- package/build/__tests__/server/handlers/calendar.test.js +0 -96
- package/build/__tests__/server/handlers/calendar.test.js.map +0 -1
- package/build/__tests__/server/handlers/drive.test.d.ts +0 -1
- package/build/__tests__/server/handlers/drive.test.js +0 -68
- package/build/__tests__/server/handlers/drive.test.js.map +0 -1
- package/build/__tests__/server/handlers/email.test.d.ts +0 -1
- package/build/__tests__/server/handlers/email.test.js +0 -99
- package/build/__tests__/server/handlers/email.test.js.map +0 -1
- package/build/__tests__/server/handlers/validate.test.d.ts +0 -1
- package/build/__tests__/server/handlers/validate.test.js +0 -88
- package/build/__tests__/server/handlers/validate.test.js.map +0 -1
- package/build/__tests__/server/queue.test.d.ts +0 -1
- package/build/__tests__/server/queue.test.js +0 -199
- package/build/__tests__/server/queue.test.js.map +0 -1
- package/build/__tests__/server/server.test.d.ts +0 -7
- package/build/__tests__/server/server.test.js +0 -135
- package/build/__tests__/server/server.test.js.map +0 -1
- package/build/__tests__/server/session/context.test.d.ts +0 -1
- package/build/__tests__/server/session/context.test.js +0 -101
- package/build/__tests__/server/session/context.test.js.map +0 -1
- package/build/__tests__/server/session/tracker.test.d.ts +0 -1
- package/build/__tests__/server/session/tracker.test.js +0 -146
- package/build/__tests__/server/session/tracker.test.js.map +0 -1
- package/build/__tests__/server/tools.test.d.ts +0 -1
- package/build/__tests__/server/tools.test.js +0 -91
- package/build/__tests__/server/tools.test.js.map +0 -1
- package/build/__tests__/services/gmail/mime.test.d.ts +0 -1
- package/build/__tests__/services/gmail/mime.test.js +0 -23
- package/build/__tests__/services/gmail/mime.test.js.map +0 -1
- package/build/__tests__/services/meet/patch.test.d.ts +0 -4
- package/build/__tests__/services/meet/patch.test.js +0 -374
- package/build/__tests__/services/meet/patch.test.js.map +0 -1
- package/build/executor/errors.d.ts +0 -15
- package/build/executor/errors.js +0 -37
- package/build/executor/errors.js.map +0 -1
- package/build/executor/gws.d.ts +0 -26
- package/build/executor/gws.js +0 -197
- package/build/executor/gws.js.map +0 -1
- package/build/server/handlers/calendar.d.ts +0 -2
- package/build/server/handlers/calendar.js +0 -97
- package/build/server/handlers/calendar.js.map +0 -1
- package/build/server/handlers/drive.d.ts +0 -2
- package/build/server/handlers/drive.js +0 -58
- package/build/server/handlers/drive.js.map +0 -1
- package/build/server/handlers/email.d.ts +0 -2
- package/build/server/handlers/email.js +0 -119
- package/build/server/handlers/email.js.map +0 -1
- package/build/server/scratchpad/__tests__/docs-sync-integration.test.d.ts +0 -11
- package/build/server/scratchpad/__tests__/docs-sync-integration.test.js +0 -187
- package/build/server/scratchpad/__tests__/docs-sync-integration.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/docs-sync.test.d.ts +0 -16
- package/build/server/scratchpad/__tests__/docs-sync.test.js +0 -213
- package/build/server/scratchpad/__tests__/docs-sync.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/json-path.test.d.ts +0 -4
- package/build/server/scratchpad/__tests__/json-path.test.js +0 -121
- package/build/server/scratchpad/__tests__/json-path.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/manager.test.d.ts +0 -5
- package/build/server/scratchpad/__tests__/manager.test.js +0 -886
- package/build/server/scratchpad/__tests__/manager.test.js.map +0 -1
- package/build/server/scratchpad/__tests__/validate.test.d.ts +0 -4
- package/build/server/scratchpad/__tests__/validate.test.js +0 -112
- package/build/server/scratchpad/__tests__/validate.test.js.map +0 -1
|
@@ -28,7 +28,7 @@ export interface DiscoveredService {
|
|
|
28
28
|
helpers: Record<string, DiscoveredHelper>;
|
|
29
29
|
}
|
|
30
30
|
export interface DiscoveredSurface {
|
|
31
|
-
|
|
31
|
+
apiSurface: string;
|
|
32
32
|
services: Record<string, DiscoveredService>;
|
|
33
33
|
}
|
|
34
34
|
export type BaselineStatus = 'covered' | 'gap' | 'excluded';
|
|
@@ -38,7 +38,7 @@ export interface BaselineEntry {
|
|
|
38
38
|
params?: Record<string, 'covered' | 'gap'>;
|
|
39
39
|
}
|
|
40
40
|
export interface CoverageBaseline {
|
|
41
|
-
|
|
41
|
+
apiSurface: string;
|
|
42
42
|
generatedAt: string;
|
|
43
43
|
services: Record<string, {
|
|
44
44
|
operations: Record<string, BaselineEntry>;
|
|
@@ -46,7 +46,7 @@ export interface CoverageBaseline {
|
|
|
46
46
|
}
|
|
47
47
|
export interface ParamGap {
|
|
48
48
|
paramName: string;
|
|
49
|
-
|
|
49
|
+
inGoogle: boolean;
|
|
50
50
|
inManifest: boolean;
|
|
51
51
|
details?: string;
|
|
52
52
|
}
|
|
@@ -59,9 +59,24 @@ export interface ServiceCoverage {
|
|
|
59
59
|
newOps: string[];
|
|
60
60
|
removedOps: string[];
|
|
61
61
|
paramGaps: Record<string, ParamGap[]>;
|
|
62
|
+
/**
|
|
63
|
+
* The Google methods this service's manifest actually covers.
|
|
64
|
+
*
|
|
65
|
+
* This exists because the baseline used to INFER coverage from `paramGaps` — an
|
|
66
|
+
* operation was recorded as covered only if it had a parameter gap. An operation
|
|
67
|
+
* covered *perfectly*, with every parameter mapped, therefore had no gap entry, fell
|
|
68
|
+
* through, and was written to the baseline as `status: "gap"`. The baseline called an
|
|
69
|
+
* operation uncovered BECAUSE it was flawlessly covered, and 25 of them were committed
|
|
70
|
+
* as uncovered work for contributors to pick up.
|
|
71
|
+
*
|
|
72
|
+
* `coveredOps` (the count) was right the whole time; only the persisted list was wrong,
|
|
73
|
+
* so the printed report and the committed artifact disagreed and nothing compared them.
|
|
74
|
+
* Coverage is now carried explicitly, from the manifest, and asserted against the count.
|
|
75
|
+
*/
|
|
76
|
+
coveredPaths: string[];
|
|
62
77
|
}
|
|
63
78
|
export interface CoverageReport {
|
|
64
|
-
|
|
79
|
+
apiSurface: string;
|
|
65
80
|
timestamp: string;
|
|
66
81
|
totalOps: number;
|
|
67
82
|
coveredOps: number;
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
export { execute, gwsVersion } from './gws.js';
|
|
2
|
-
export type { GwsResult, GwsOptions } from './gws.js';
|
|
3
|
-
export { GwsError, GwsExitCode, parseGwsError } from './errors.js';
|
|
4
1
|
export { configDir, dataDir, credentialsDir, credentialPath, accountsFilePath, emailToSlug } from './paths.js';
|
package/build/executor/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export { GwsError, GwsExitCode, parseGwsError } from './errors.js';
|
|
1
|
+
// Local filesystem concerns: paths, and the workspace fence.
|
|
3
2
|
export { configDir, dataDir, credentialsDir, credentialPath, accountsFilePath, emailToSlug } from './paths.js';
|
|
4
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -66,18 +66,44 @@ function formatDefaultDetail(data) {
|
|
|
66
66
|
refs: { id, ...extractScalarRefs(obj) },
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Generic action formatter — confirm, and say WHAT was acted on.
|
|
71
|
+
*
|
|
72
|
+
* Google does not agree with itself about what an identifier is called: Tasks returns
|
|
73
|
+
* `id`, Docs returns `documentId`, Sheets returns `spreadsheetId`. This used to print
|
|
74
|
+
* only a key named exactly `id`, so creating a document produced the entire response
|
|
75
|
+
* "Operation completed." — no id, no title, nothing an agent could act on. The id was
|
|
76
|
+
* in `refs` (so `$0.documentId` chaining worked), but anything reading the text was
|
|
77
|
+
* told only that *something* had happened.
|
|
78
|
+
*
|
|
79
|
+
* So name the thing: whichever identifier came back, plus whatever the resource calls
|
|
80
|
+
* itself. A confirmation you cannot act on is barely a confirmation.
|
|
81
|
+
*/
|
|
82
|
+
const ID_KEYS = ['id', 'documentId', 'spreadsheetId', 'fileId', 'eventId', 'threadId'];
|
|
83
|
+
const NAME_KEYS = ['title', 'name', 'summary'];
|
|
70
84
|
function formatDefaultAction(data) {
|
|
71
85
|
const obj = (data ?? {});
|
|
72
|
-
const
|
|
86
|
+
const idKey = ID_KEYS.find((k) => obj[k] !== undefined && obj[k] !== null);
|
|
87
|
+
const id = idKey ? String(obj[idKey]) : 'unknown';
|
|
88
|
+
const nameKey = NAME_KEYS.find((k) => typeof obj[k] === 'string' && obj[k] !== '');
|
|
73
89
|
const parts = ['Operation completed.'];
|
|
74
|
-
if (
|
|
75
|
-
parts.push(`\n
|
|
90
|
+
if (nameKey)
|
|
91
|
+
parts.push(`\n\n**${titleCase(nameKey)}:** ${String(obj[nameKey])}`);
|
|
92
|
+
if (idKey)
|
|
93
|
+
parts.push(`\n**${titleCase(idKey)}:** ${id}`);
|
|
76
94
|
return {
|
|
77
95
|
text: parts.join(''),
|
|
96
|
+
// `id` stays populated whatever Google called the field, so next-steps and
|
|
97
|
+
// queue_operations references keep resolving.
|
|
78
98
|
refs: { id, ...extractScalarRefs(obj) },
|
|
79
99
|
};
|
|
80
100
|
}
|
|
101
|
+
/** documentId -> "Document ID"; title -> "Title" */
|
|
102
|
+
function titleCase(key) {
|
|
103
|
+
return key
|
|
104
|
+
.replace(/Id$/, ' ID')
|
|
105
|
+
.replace(/^./, (c) => c.toUpperCase());
|
|
106
|
+
}
|
|
81
107
|
/** Find the first array in a response object (items, files, messages, etc). */
|
|
82
108
|
function findArray(obj) {
|
|
83
109
|
if (Array.isArray(obj))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/factory/defaults.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/factory/defaults.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,IAAa,EAAE,KAAmB;IAC9D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACnC;YACE,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,SAAS,iBAAiB,CAAC,IAAa;IACtC,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,+BAA+B;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,GAAG,GAAG,IAA+B,CAAC;QAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QACnB,yCAAyC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,GAAG,KAAK,IAAI;gBAAE,SAAS;YAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,eAAe,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC3D,IAAI,EAAE;YACJ,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,EAAE,EAAE,MAAM,CAAE,KAAK,CAAC,CAAC,CAA6B,EAAE,EAAE,IAAI,EAAE,CAAC;YAC3D,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAE,CAA6B,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SACtE;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS,mBAAmB,CAAC,IAAa;IACxC,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;IACvF,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAa,CAAC,MAAM,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS,CAAC,sBAAsB;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE;KACxC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACvF,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAE/C,SAAS,mBAAmB,CAAC,IAAa;IACxC,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC3E,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAa,CAAC,sBAAsB,CAAC,CAAC;IACjD,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAClF,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE1D,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,2EAA2E;QAC3E,8CAA8C;QAC9C,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE;KACxC,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG;SACP,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,+EAA+E;AAC/E,SAAS,SAAS,CAAC,GAA4B;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;IACrC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,kDAAkD;AAClD,SAAS,iBAAiB,CAAC,GAA4B;IACrD,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;YACnF,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -3,13 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* For each service in the manifest, generates:
|
|
5
5
|
* 1. A JSON Schema tool definition (operation enum, typed params)
|
|
6
|
-
* 2. A handler function (maps operations to
|
|
6
|
+
* 2. A handler function (maps operations to Google API calls, applies formatting)
|
|
7
7
|
*
|
|
8
8
|
* Patches are optional per-service hooks that override default behavior.
|
|
9
9
|
*/
|
|
10
|
-
import type { Manifest, ServiceDef, ServicePatch, GeneratedTool, GeneratedToolSchema, GeneratedHandler } from './types.js';
|
|
11
|
-
/** Called by registry.ts to inject the ESM module directory. */
|
|
12
|
-
export declare function setModuleDir(dir: string): void;
|
|
10
|
+
import type { Manifest, ServiceDef, OperationDef, ServicePatch, GeneratedTool, GeneratedToolSchema, GeneratedHandler } from './types.js';
|
|
13
11
|
/**
|
|
14
12
|
* Load the manifest from `src/factory/manifest/` — one YAML file per service,
|
|
15
13
|
* each file's root being that service's definition; the filename (minus
|
|
@@ -29,3 +27,11 @@ export declare function generateTools(manifest: Manifest, patches?: Record<strin
|
|
|
29
27
|
export declare function generateSchema(service: ServiceDef): GeneratedToolSchema;
|
|
30
28
|
/** Generate a handler function for a service. */
|
|
31
29
|
export declare function generateHandler(service: ServiceDef, patch?: ServicePatch): GeneratedHandler;
|
|
30
|
+
/**
|
|
31
|
+
* Build the params a resource operation sends to Google.
|
|
32
|
+
*
|
|
33
|
+
* This is the manifest's mapping — declared params, `maps_to` renames, defaults,
|
|
34
|
+
* clamps. A resource operation never becomes a command line: the output here is
|
|
35
|
+
* the request params, handed straight to the client. See ADR-103.
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildResourceParams(opDef: OperationDef, params: Record<string, unknown>): Record<string, unknown>;
|
|
@@ -3,28 +3,30 @@
|
|
|
3
3
|
*
|
|
4
4
|
* For each service in the manifest, generates:
|
|
5
5
|
* 1. A JSON Schema tool definition (operation enum, typed params)
|
|
6
|
-
* 2. A handler function (maps operations to
|
|
6
|
+
* 2. A handler function (maps operations to Google API calls, applies formatting)
|
|
7
7
|
*
|
|
8
8
|
* Patches are optional per-service hooks that override default behavior.
|
|
9
9
|
*/
|
|
10
10
|
import { readFileSync, readdirSync } from 'node:fs';
|
|
11
|
-
import { basename, resolve } from 'node:path';
|
|
11
|
+
import { basename, dirname, resolve } from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
12
13
|
import { parse as parseYaml } from '../factory/yaml.js';
|
|
13
|
-
import {
|
|
14
|
+
import { call as googleCall } from '../google/client.js';
|
|
14
15
|
import { requireEmail, clamp } from '../server/handlers/validate.js';
|
|
15
16
|
import { formatDefault } from './defaults.js';
|
|
16
17
|
import { nextSteps } from '../server/formatting/next-steps.js';
|
|
17
18
|
import { evaluatePolicies } from './safety.js';
|
|
18
19
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
20
|
+
* This module's own directory, used to resolve the manifest relative to the
|
|
21
|
+
* built output — which is what makes `npx` and the .mcpb bundle work, where cwd
|
|
22
|
+
* is not the project root.
|
|
23
|
+
*
|
|
24
|
+
* This used to be injected by registry.ts via a `setModuleDir()` setter, purely
|
|
25
|
+
* because the CJS Jest runner could not parse `import.meta`. The test runner was
|
|
26
|
+
* shaping the source. Vitest runs ESM natively (ADR-101), so the module can just
|
|
27
|
+
* ask where it is.
|
|
22
28
|
*/
|
|
23
|
-
|
|
24
|
-
/** Called by registry.ts to inject the ESM module directory. */
|
|
25
|
-
export function setModuleDir(dir) {
|
|
26
|
-
_moduleDir = dir;
|
|
27
|
-
}
|
|
29
|
+
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
28
30
|
/**
|
|
29
31
|
* Load the manifest from `src/factory/manifest/` — one YAML file per service,
|
|
30
32
|
* each file's root being that service's definition; the filename (minus
|
|
@@ -51,28 +53,31 @@ export function loadManifest(dir) {
|
|
|
51
53
|
return { services };
|
|
52
54
|
}
|
|
53
55
|
/**
|
|
54
|
-
* Locate the manifest directory
|
|
55
|
-
*
|
|
56
|
-
*
|
|
56
|
+
* Locate the manifest directory: always a sibling of this module.
|
|
57
|
+
*
|
|
58
|
+
* This resolves to `src/factory/manifest` when running the sources (vitest, tsx)
|
|
59
|
+
* and `build/factory/manifest` in the built server — which is what makes `npx`
|
|
60
|
+
* and the .mcpb bundle work, where cwd is not the project root.
|
|
61
|
+
*
|
|
62
|
+
* There is deliberately NO fallback chain. An earlier version tried three more
|
|
63
|
+
* candidates (back to `src/` from `build/`, then two cwd-relative paths), which
|
|
64
|
+
* sounds like resilience and is actually concealment: the only time a fallback
|
|
65
|
+
* fires is when the built manifest is missing, and the `src/` fallback exists
|
|
66
|
+
* *only in the dev checkout*. A build shipped without its manifest therefore
|
|
67
|
+
* resolved fine on this machine and in CI, and threw on the consumer's first
|
|
68
|
+
* `npx` start. Failing here, immediately and everywhere, is the point.
|
|
57
69
|
*/
|
|
58
70
|
function resolveManifestDir() {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
candidates.push(resolve(_moduleDir, '../../src/factory/manifest')); // dev: from build/ to src/
|
|
71
|
+
const dir = resolve(MODULE_DIR, 'manifest');
|
|
72
|
+
try {
|
|
73
|
+
readdirSync(dir);
|
|
63
74
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (readdirSync(candidate).some((f) => f.endsWith('.yaml')))
|
|
69
|
-
return candidate;
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
75
|
+
catch {
|
|
76
|
+
throw new Error(`Could not read the manifest directory at ${dir}. ` +
|
|
77
|
+
`In a built server this directory is copied from src/factory/manifest by ` +
|
|
78
|
+
`the build; if it is missing, the build did not complete. Run \`npm run build\`.`);
|
|
74
79
|
}
|
|
75
|
-
|
|
80
|
+
return dir;
|
|
76
81
|
}
|
|
77
82
|
/** Generate all tools from the manifest with optional patches. */
|
|
78
83
|
export function generateTools(manifest, patches) {
|
|
@@ -139,18 +144,18 @@ export function generateHandler(service, patch) {
|
|
|
139
144
|
manage_calendar: 'calendar',
|
|
140
145
|
manage_drive: 'drive',
|
|
141
146
|
};
|
|
142
|
-
const domain = domainMap[service.tool_name] ?? service.
|
|
147
|
+
const domain = domainMap[service.tool_name] ?? service.google_service;
|
|
143
148
|
return async (params) => {
|
|
144
149
|
const operation = params.operation;
|
|
145
150
|
const opDef = service.operations[operation];
|
|
146
151
|
if (!opDef) {
|
|
147
|
-
throw new Error(`Unknown ${service.
|
|
152
|
+
throw new Error(`Unknown ${service.google_service} operation: ${operation}`);
|
|
148
153
|
}
|
|
149
154
|
const account = service.requires_email ? requireEmail(params) : '';
|
|
150
155
|
const ctx = { operation, params, account };
|
|
151
156
|
// Safety policies — run before anything else, including custom handlers.
|
|
152
|
-
// A blocked operation never reaches the handler or
|
|
153
|
-
const policyResult = evaluatePolicies([], ctx, service.
|
|
157
|
+
// A blocked operation never reaches the handler or Google.
|
|
158
|
+
const policyResult = evaluatePolicies([], ctx, service.google_service);
|
|
154
159
|
if (policyResult.action === 'block') {
|
|
155
160
|
return {
|
|
156
161
|
text: `**Blocked by safety policy:** ${policyResult.reason}`,
|
|
@@ -178,18 +183,40 @@ export function generateHandler(service, patch) {
|
|
|
178
183
|
text: response.text + framingFooter(),
|
|
179
184
|
};
|
|
180
185
|
}
|
|
181
|
-
//
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
|
|
186
|
+
// THE SEAM (ADR-103). Every operation goes to the Google API client we own, driven
|
|
187
|
+
// by the generated descriptor. There is no second path, and nothing shells out. An
|
|
188
|
+
// operation names a Google method, or a custom handler composes several, or it does
|
|
189
|
+
// not exist.
|
|
190
|
+
let data;
|
|
191
|
+
if (opDef.resource) {
|
|
192
|
+
let callParams = buildResourceParams(opDef, params);
|
|
193
|
+
// beforeExecute takes PARAMS. Hooks mutate the param object directly; there is
|
|
194
|
+
// no command line to do surgery on.
|
|
195
|
+
if (patch?.beforeExecute?.[operation]) {
|
|
196
|
+
callParams = await patch.beforeExecute[operation](callParams, ctx);
|
|
197
|
+
}
|
|
198
|
+
// The one place a cast is honest. Here the service and the resource path come
|
|
199
|
+
// from the MANIFEST — YAML, read at runtime — so no compile-time type can
|
|
200
|
+
// check them. That is fine, because this path has its own guard at a
|
|
201
|
+
// different stage:
|
|
202
|
+
//
|
|
203
|
+
// hand-written call sites -> COMPILE time (ServiceMethods[S]; see src/google/methods.ts)
|
|
204
|
+
// manifest-driven ops -> BUILD time (check-conformance: manifest ⊆ descriptor)
|
|
205
|
+
//
|
|
206
|
+
// Between them, every route to Google is checked before it can reach a user.
|
|
207
|
+
// The conformance check is probed and goes red on a bogus resource path, so
|
|
208
|
+
// a typo in the YAML fails the build rather than the call.
|
|
209
|
+
data = await googleCall(service.google_service, opDef.resource, callParams, { account });
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// No resource, and no custom handler took it. There is nothing left to call.
|
|
213
|
+
// An operation is a Google method or a composition of them — there is no third
|
|
214
|
+
// kind. See ADR-103.
|
|
215
|
+
throw new Error(`${service.google_service}.${operation} declares no 'resource' and has no custom handler.`);
|
|
188
216
|
}
|
|
189
|
-
//
|
|
190
|
-
|
|
191
|
-
//
|
|
192
|
-
let data = result.data;
|
|
217
|
+
// afterExecute hook — takes DATA. This is the hook that turns raw Google into OUR
|
|
218
|
+
// shape (see gmailPatch.afterExecute.search, which walks payload.headers). It is
|
|
219
|
+
// the right place for interpretation.
|
|
193
220
|
if (patch?.afterExecute?.[operation]) {
|
|
194
221
|
data = await patch.afterExecute[operation](data, ctx);
|
|
195
222
|
}
|
|
@@ -213,72 +240,35 @@ export function generateHandler(service, patch) {
|
|
|
213
240
|
};
|
|
214
241
|
};
|
|
215
242
|
}
|
|
216
|
-
/**
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
throw new Error(`Operation must define either 'resource' or 'helper'`);
|
|
227
|
-
}
|
|
228
|
-
/** Build args for gws resource calls: `gws service resource method --params '{...}'` */
|
|
229
|
-
function buildResourceArgs(gwsService, opDef, params) {
|
|
230
|
-
const resourceParts = opDef.resource.split('.');
|
|
231
|
-
const args = [gwsService, ...resourceParts];
|
|
232
|
-
// Build the --params JSON object
|
|
233
|
-
const gwsParams = { ...opDef.defaults };
|
|
243
|
+
/**
|
|
244
|
+
* Build the params a resource operation sends to Google.
|
|
245
|
+
*
|
|
246
|
+
* This is the manifest's mapping — declared params, `maps_to` renames, defaults,
|
|
247
|
+
* clamps. A resource operation never becomes a command line: the output here is
|
|
248
|
+
* the request params, handed straight to the client. See ADR-103.
|
|
249
|
+
*/
|
|
250
|
+
export function buildResourceParams(opDef, params) {
|
|
251
|
+
const out = { ...opDef.defaults };
|
|
234
252
|
if (opDef.params) {
|
|
235
253
|
for (const [paramName, paramDef] of Object.entries(opDef.params)) {
|
|
236
254
|
if (paramDef.client_only)
|
|
237
|
-
continue; // formatter-only; never reaches
|
|
255
|
+
continue; // formatter-only; never reaches Google
|
|
238
256
|
const value = params[paramName];
|
|
239
257
|
const targetKey = paramDef.maps_to ?? paramName;
|
|
240
258
|
if (value !== undefined && value !== null) {
|
|
241
|
-
|
|
259
|
+
out[targetKey] = paramDef.max
|
|
242
260
|
? clamp(value, paramDef.default ?? 10, paramDef.max)
|
|
243
261
|
: value;
|
|
244
262
|
}
|
|
245
263
|
else if (paramDef.default !== undefined) {
|
|
246
|
-
|
|
264
|
+
out[targetKey] = paramDef.default;
|
|
247
265
|
}
|
|
248
266
|
}
|
|
249
267
|
}
|
|
250
|
-
|
|
251
|
-
for (const [key, val] of Object.entries(gwsParams)) {
|
|
268
|
+
for (const [key, val] of Object.entries(out)) {
|
|
252
269
|
if (val === undefined)
|
|
253
|
-
delete
|
|
254
|
-
}
|
|
255
|
-
if (Object.keys(gwsParams).length > 0) {
|
|
256
|
-
args.push('--params', JSON.stringify(gwsParams));
|
|
257
|
-
}
|
|
258
|
-
return args;
|
|
259
|
-
}
|
|
260
|
-
/** Build args for gws helper calls: `gws service +helper --flag value ...` */
|
|
261
|
-
function buildHelperArgs(gwsService, opDef, params) {
|
|
262
|
-
const args = [gwsService, opDef.helper];
|
|
263
|
-
// Some helpers take a positional arg (e.g. +reply messageId)
|
|
264
|
-
// Check for required params that aren't in cli_args — those are positional
|
|
265
|
-
if (opDef.params) {
|
|
266
|
-
for (const [paramName, paramDef] of Object.entries(opDef.params)) {
|
|
267
|
-
if (paramDef.client_only)
|
|
268
|
-
continue; // formatter-only; never reaches gws
|
|
269
|
-
const value = params[paramName];
|
|
270
|
-
if (value === undefined || value === null)
|
|
271
|
-
continue;
|
|
272
|
-
if (opDef.cli_args?.[paramName]) {
|
|
273
|
-
// Flag-style arg
|
|
274
|
-
args.push(opDef.cli_args[paramName], String(value));
|
|
275
|
-
}
|
|
276
|
-
else if (paramDef.required) {
|
|
277
|
-
// Positional arg
|
|
278
|
-
args.push(String(value));
|
|
279
|
-
}
|
|
280
|
-
}
|
|
270
|
+
delete out[key];
|
|
281
271
|
}
|
|
282
|
-
return
|
|
272
|
+
return out;
|
|
283
273
|
}
|
|
284
274
|
//# sourceMappingURL=generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/factory/generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/factory/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ the `Manifest`.
|
|
|
7
7
|
|
|
8
8
|
## Notes
|
|
9
9
|
|
|
10
|
-
- People (contacts)
|
|
11
|
-
|
|
12
|
-
- Meet
|
|
10
|
+
- People (contacts) is excluded: the OAuth flow declares no contacts scope
|
|
11
|
+
(see `SERVICE_SCOPES` in `../../accounts/oauth.ts`).
|
|
12
|
+
- Meet is supported — authorize it by including `meet` in the services list
|
|
13
|
+
(`manage_accounts`, operation `scopes`).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tool_name: manage_calendar
|
|
2
2
|
description: "List events, view agenda, check availability, or manage calendar events."
|
|
3
3
|
requires_email: true
|
|
4
|
-
|
|
4
|
+
google_service: calendar
|
|
5
5
|
operations:
|
|
6
6
|
|
|
7
7
|
# --- Event viewing ---
|
|
@@ -37,7 +37,6 @@ operations:
|
|
|
37
37
|
agenda:
|
|
38
38
|
type: list
|
|
39
39
|
description: "today's schedule at a glance (all calendars). Returns calendarId per event for follow-up get calls."
|
|
40
|
-
helper: "+agenda"
|
|
41
40
|
params:
|
|
42
41
|
calendarId:
|
|
43
42
|
type: string
|
|
@@ -72,7 +71,6 @@ operations:
|
|
|
72
71
|
create:
|
|
73
72
|
type: action
|
|
74
73
|
description: "create a new calendar event"
|
|
75
|
-
helper: "+insert"
|
|
76
74
|
params:
|
|
77
75
|
calendarId:
|
|
78
76
|
type: string
|
|
@@ -101,14 +99,6 @@ operations:
|
|
|
101
99
|
meet:
|
|
102
100
|
type: boolean
|
|
103
101
|
description: "Add a Google Meet video conference link to the event"
|
|
104
|
-
cli_args:
|
|
105
|
-
calendarId: "--calendar"
|
|
106
|
-
summary: "--summary"
|
|
107
|
-
start: "--start"
|
|
108
|
-
end: "--end"
|
|
109
|
-
description: "--description"
|
|
110
|
-
location: "--location"
|
|
111
|
-
attendees: "--attendee"
|
|
112
102
|
|
|
113
103
|
quickAdd:
|
|
114
104
|
type: action
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tool_name: manage_docs
|
|
2
2
|
description: "Read, write, insert, and find-replace text in Google Docs documents."
|
|
3
3
|
requires_email: true
|
|
4
|
-
|
|
4
|
+
google_service: docs
|
|
5
5
|
operations:
|
|
6
6
|
|
|
7
7
|
get:
|
|
@@ -14,15 +14,27 @@ operations:
|
|
|
14
14
|
description: "Document ID"
|
|
15
15
|
required: true
|
|
16
16
|
|
|
17
|
+
# `title` rides in the BODY — documents.create declares no parameters at all
|
|
18
|
+
# (Discovery: `"parameters": {}`), so everything goes into the Document resource.
|
|
19
|
+
# Without this the tool could only ever produce documents called "Untitled document",
|
|
20
|
+
# and a caller passing a title got no error — the argument was simply not in the
|
|
21
|
+
# schema, so it was dropped in silence. manage_sheets.create has always taken one.
|
|
17
22
|
create:
|
|
18
23
|
type: action
|
|
19
|
-
description: "create a new
|
|
24
|
+
description: "create a new document"
|
|
20
25
|
resource: documents.create
|
|
26
|
+
params:
|
|
27
|
+
title:
|
|
28
|
+
type: string
|
|
29
|
+
description: "Document title (default: 'Untitled document')"
|
|
21
30
|
|
|
31
|
+
# One documents.batchUpdate with a single insertText at endOfSegmentLocation —
|
|
32
|
+
# append to end of body. It needs a request body, so it is a custom handler
|
|
33
|
+
# rather than a bare resource op (docsPatch.write).
|
|
22
34
|
write:
|
|
23
35
|
type: action
|
|
24
36
|
description: "append text to the end of a document"
|
|
25
|
-
|
|
37
|
+
resource: documents.batchUpdate
|
|
26
38
|
params:
|
|
27
39
|
documentId:
|
|
28
40
|
type: string
|
|
@@ -32,9 +44,6 @@ operations:
|
|
|
32
44
|
type: string
|
|
33
45
|
description: "Text to append (plain text)"
|
|
34
46
|
required: true
|
|
35
|
-
cli_args:
|
|
36
|
-
documentId: "--document"
|
|
37
|
-
text: "--text"
|
|
38
47
|
|
|
39
48
|
insertText:
|
|
40
49
|
type: action
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tool_name: manage_drive
|
|
2
2
|
description: "Search, upload, download, share, comment on, or manage files in Google Drive."
|
|
3
3
|
requires_email: true
|
|
4
|
-
|
|
4
|
+
google_service: drive
|
|
5
5
|
operations:
|
|
6
6
|
|
|
7
7
|
# --- File discovery ---
|
|
@@ -44,7 +44,6 @@ operations:
|
|
|
44
44
|
upload:
|
|
45
45
|
type: action
|
|
46
46
|
description: "upload a local file to Drive"
|
|
47
|
-
helper: "+upload"
|
|
48
47
|
params:
|
|
49
48
|
filePath:
|
|
50
49
|
type: string
|
|
@@ -56,9 +55,6 @@ operations:
|
|
|
56
55
|
parentFolderId:
|
|
57
56
|
type: string
|
|
58
57
|
description: "Destination folder ID"
|
|
59
|
-
cli_args:
|
|
60
|
-
name: "--name"
|
|
61
|
-
parentFolderId: "--parent"
|
|
62
58
|
|
|
63
59
|
viewImage:
|
|
64
60
|
type: detail
|