Nod setup, Settings › Agents, agent menu and canvas cards - #589
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.com>
4 of 5 tasks
Orange is the Needs-you state, which the pill and border already carry; the chat pane's Allow once is action blue too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: scgopi <scgopireddy@gmail.com>
Signed-off-by: scgopi <scgopireddy@gmail.com>
Signed-off-by: scgopi <scgopireddy@gmail.com>
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.
Summary
Nod's setup, settings and place in the app (the NodSetup stream of GraphCode Nod), stacked on #583. You can set up Nod from the Welcome tour or from Settings. Settings gets a sidebar where Agents lists Nod and each CLI. The new-loop agent menu is grouped into Chat and Terminal, and canvas cards carry Nod's glyph, a goal progress bar and Allow once.
Changes
NodSetupView+NodSetupModel. You pick the engine, either Claude Agent SDK (Opus · Sonnet · Haiku) or GitHub Copilot SDK (GPT · Claude · Gemini), then sign in.CopilotDeviceFlow).authorization_pending,slow_down(+5 s),expired_tokenandaccess_denied.NodCredentialStorestores generic-password items underNodSettings.keychainService(app.graphcode.nod), one account per credential. An in-memory store is used for tests.NodClaudeSignIn.subscriptionLoginAllowed = false. The detector reads Keychain attributes only, so it never raises a prompt. API key is the path that ships.NodSettingsPaneis bound toGraphcodeSettings.nodand covers:.mcp.jsonwith an on/off switch, and Connect for remote servers that need sign-in.NodModelCatalogdefines models per engine and per-type defaults (Main Sonnet, Goal Opus, Timed Haiku, Turn Sonnet, Composite Opus / children Sonnet, evaluator Haiku). Stale stored ids fall back to the default.NodSettings.switchEnginedrops choices the new engine can't run. Allowlist and spend-cap helpers are added.NodSettings.disabledMCPServersfield, decoded tolerantly.RunsAsAgentMenureplaces the Agent picker. It is grouped into Chat (Nod with engine, sign-in and a Model submenu) and Terminal (the CLIs).canHost, unchanged, with the missing capability written beside the row ("no sub-agents").LoopNode.activityas the live line.answerableFromCard; otherwise it shows Review in chat with "network · needs context".FeatureRamps.nodfrom Add GraphCode Nod as a sixth backend kind, with its wire protocol #583 (beta 100, stable 0), as well asisSpiked.isSpiked.Waiting on other streams / humans
NodCardDetailthroughNodCardWiring.provider/.answerer, which are no-ops on this branch, as agreed with NodLaunch. NodLaunch's follow-up addsLoopNode.nod: NodCardState?and points the answerer atNodControlClient.send(.resolvePermission(.allowOnce)).GraphCodeGitHubClientID. Without it the sheet says "This build has no GitHub sign-in configured." rather than borrowing another app's id.NodProtocol.swiftandPROTOCOL.mdare untouched.Renders
NodSetupRenderTestsdraws every view headless withNSHostingViewinto.build/nod-renders/and fails if a render is blank:5a-setup-claude5b-copilot-waiting,5b-copilot-signed-in6a-agent-menu-goal,6a-agent-menu-composite6b-canvas-cards7a-settings-nod,7a-settings-copilot-cliTest plan
RED: xcodebuild build-for-testing with graphcode/Sources and GraphcodeKit/Sources checked out from origin/feat/nod-foundation under the new NodSetupTests -> exit 65, NodSetupTests.swift:11:17 error: cannot find 'NodModelCatalog' in scope; :105:17 cannot find 'NodCredentialStore' in scope
GREEN: xcodebuild test -only-testing NodModelCatalogTests NodCredentialStoreTests NodClaudeSignInTests CopilotDeviceFlowTests AgentMenuSectionTests NodCardPresentationTests NodMCPServerTests NodSetupModelTests NodSetupRenderTests LoopCardPresentationTests -> pass, 67 tests in 10 suites
REGRESSION: xcodebuild -scheme graphcode test with private DerivedData -> pass, 2060 tests in 226 suites, 0 failed, 0 skipped (xcresult)
Gate on 1fca568 (= pushed head), private DerivedData:
xcodebuild testexit 0: 2060 tests / 226 suites / 0 failures (2056 before the ramp tests).graphcode-clibuild exit 0;graphcodedbuild exit 0.scripts/cli-smoke.shagainst a separate SwiftPM build: exit 0.Tools/portable-prepare.py+swift test) compiles the newNodModelCatalog.swift: exit 0.swift format lint --strictclean.Checklist
git commit -s) per the DCOswift format lint --strict, swiftlint 0 errors)