Repository navigation
feat(cli)!: cli-core's shared mcp and doctor; session list, guide and first screen - #17
Merged
Merged
Conversation
… first screen gcal moves onto cli-core 0.471.0's commands for CLIs that are not messengers, so its mcp and doctor match drive's and zoom's. - mcp: cli-core's appMcpCommand replaces src/mcp.ts and src/commands/mcp.ts. `gcal <profile> mcp` is now `mcp serve`, with revoke, server, config, add, check, --profiles, --http; no profile is ever picked (WC-MCP-9, WC-ACCT-1). The instructions name the untrusted text (WC-MCP-11). api call and calendars.clear stay hidden (mcp: false); sharing stays at ask; events.notify and sharing.notify still apply. - doctor: cli-core's appDoctorReport (store, oauth_client, profile_lock) plus gcal's credential_file. appDoctorCommand has no hook for a field of the CLI's own, so the command stays in gcal. - session list (WC-ACCT-12, NEED-1884): every profile here with signed_in, account and credential_storage; no profile taken or picked. cli-core has no helper for non-messengers, so it is gcal's own. Signed in means the sign-in is in the file or the keyring; session end keeps the account file. - guide with scenarios/ and the first help screen, through cli-core's guideCommand and installHelp, as drive does. - contracts/mcp-catalogue.json pins the commands agents can find (H-8); help.snap, mcp-tools.json, docs/commands.md and the test matrix are regenerated. - Tests reach MCP through `gcal personal mcp serve` (src/testing/mcp.ts), keeping every gcal-only MCP assertion. BREAKING CHANGE: `gcal <profile> mcp` is `gcal <profile> mcp serve`; add the agent entry again with `mcp add` or `mcp config`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Task
Move gcal onto cli-core 0.471.0's shared commands for CLIs that are not messengers (cli-core #2129), and close the alignment-review gaps:
session list(NEED-1884), the first help screen andguide, the MCP catalogue snapshot.Why
gcal had its own bare
mcp(noserve | revoke | server | config | add | check, no--profiles, no--http) and its owndoctor, both near copies of drive's. The handbook asks forsession list(WC-ACCT-12) and a pinned command catalogue (H-8); gcal had neither.What
appMcpCommand(IDENTITY, configuration, { name: "Google Calendar", untrusted: [...], permissionExample, skill, signedIn }).src/mcp.ts,src/commands/mcp.tsand the old test are deleted.gcal <profile> mcp→gcal <profile> mcp serve(WC-MCP-9: no profile picked; WC-MCP-11: instructions name event titles, descriptions, locations, attendee and organizer names, shared calendar names). gcal's rules hold:api callandcalendars.clearare never offered (mcp: false), sharing atask,events.notify/sharing.notifyapply over MCP — all still asserted inapi.test.ts,calendar*.test.ts.appDoctorReport(store,oauth_client,profile_lock) plus gcal'scredential_file(keyring|file, fix: sign-in kept in a file, typed sign-in reasons, store closed before the answer, Google token leak rules #15). The command stays in gcal:AppDoctorOptionshas no hook for a CLI's own field.oauth_clientisownwithGCAL_GOOGLE_CLIENT_ID, otherwisenullwith a reason that says a profile signed in with--client-filekeeps its own client.gcal session list— every profile here (config or signed in once) withsigned_in,account,credential_storage; takes no profile, picks none (WC-ACCT-1, WC-ACCT-12). gcal's own: cli-core has no helper for non-messengers. "Signed in" = the sign-in is in the file or keyring; the account file survivessession end, so it is not used. The same definition feedsmcp check.guide— cli-core'sinstallHelp(viafirstScreen) andguideCommand, withscenarios/(set-up, agent-access, find-time), as drive does;checkGuideruns insrc/mcp.test.ts.contracts/mcp-catalogue.json(H-8);help.snap,mcp-tools.json,docs/commands.md, test matrix regenerated.@modelcontextprotocol/serverdropped (no gcal code serves MCP any more);biome.json's rule now exempts only the test harnesssrc/testing/mcp.ts.gcal <profile> mcp→mcp serve; CHANGELOG under "Changed — may break callers" says how to re-add an agent entry.Testing
pnpm release:checkpasses locally: standards, lint, typecheck, test:coverage (266 tests), lint:commands, cross-CLI audit (0 new), contracts, test matrix (0 missing), docs, generate:check, version, no-leak, package smoke (now also runsguidefrom the installed package).guide,guide set-up --json,mcp config --permission api=readonly,mcp config --profiles all,mcp serve --profiles nope(exit 2),session list --json,--help.🤖 Generated with Claude Code