Uh oh!
There was an error while loading. Please reload this page.
Added actions for every @command. - #2782
Open
robgruen wants to merge 32 commits into
Open
Conversation
Uh oh!
There was an error while loading. Please reload this page.
…egexp' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
…egexp' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
robgruen
marked this pull request as ready for review
August 1, 2026 01:15
Uh oh!
There was an error while loading. Please reload this page.
…egexp' Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
robgruen
commented
Aug 2, 2026
CollaboratorAuthor
Copilot resolve the merge conflicts in this pull request |
# Conflicts: # ts/docs/plans/agent-command-actions/PLAN.md # ts/docs/plans/agent-command-actions/STATUS.md # ts/packages/dispatcher/dispatcher/src/context/system/action/describeActionHandler.ts # ts/packages/dispatcher/dispatcher/src/context/system/handlers/conversationCommandHandlers.ts # ts/packages/dispatcher/dispatcher/src/context/system/schema/conversationActionSchema.agr # ts/packages/dispatcher/dispatcher/src/context/system/schema/describeActionSchema.ts # ts/packages/dispatcher/dispatcher/src/context/system/systemAgent.ts # ts/pnpm-lock.yaml
Contributor
Merge conflicts resolved in d4a75c6. Here's a summary of the resolutions:
|
# Conflicts: # ts/pnpm-lock.yaml
# Conflicts: # ts/pnpm-lock.yaml
# Conflicts: # ts/pnpm-lock.yaml
Resolve conflicts: - player: keep the extracted runLoadSpotifyUserData helper and move main's loaded/skipped file reporting into it so the command and action paths report the same result. - player: keep both the display helper and @typeagent/config imports. - powershell: adopt main's jest test setup and port the new powerShellShow.spec.ts from node:test to jest. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The merge text-merged pnpm-lock.yaml, keeping the PR branch's stale importer entries alongside main's updated package.json files. That left the lockfile out of sync (e.g. esbuild specifier ^0.28.1 vs ^0.28.2 in package.json), which breaks 'pnpm install --frozen-lockfile' in CI. Take main's lockfile as the base and re-add only this PR's dependency additions. Verified with 'pnpm install --frozen-lockfile'. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Build (agent-dispatcher failed to compile):
- Extract the duplicated opt() helper into actionParams.ts and make it
generic so spread results match the command flag value types.
- Add actionParams(), which reads parameters off an action union. Members
without parameters and members whose parameters is optional both yield
{}, fixing the type error and the TypeError thrown when the translator
omits parameters (e.g. 'show help', 'list constructions').
- Cast in the exhaustive default branches so actionName resolves on never.
Correctness:
- dispatcher.diagnostics is no longer injected, so the open-ended
dispatchRequest action is not added to every translation prompt.
- toggleAgent repeats --off per agent name; the parser takes one token
per flag occurrence, so '--off a b' disabled a and enabled b.
- powershell: strip fallbackToReasoning on the command path, which has no
reasoning retry and so displayed nothing on failure.
- powershell: invalid flowParametersJson now fails instead of silently
running the flow with defaults.
- powershell: use the session store, not the module-global one.
- browser: surface action errors as ActionResult errors instead of
console.error, which never reached the user.
- browser: '@browser learn <goal>' needs implicitQuotes to accept a
multi-word goal.
- greeting: drop the internal mock flag from the LLM-facing schema and
guard the empty possibleGreetings case that threw in randomInt.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>The PR adds loadSpotifyUserData, spotifyLogin, and spotifyLogout to playerSchema.ts, which changes the player schema hash and leaves the prebuilt v5 construction cache stale. builtinConstructions.spec.ts fails on the stale hash until the cache is regenerated. Regenerated with: pnpm cli data regenerate -b v5 --constructions --updateHash Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The coverage assertions are all 'the set of gaps is empty', which stays true when a host drops out of the enumeration entirely. An agent that fails to load is skipped silently by collectCommandsFromContext, so losing all 31 browser endpoints would take coverage from 388/388 to 357/357 and the gate would still pass. - Fail strict collection when an agent that should expose commands never loaded (getCommandEnabledState returns undefined), instead of skipping. - Assert the expected host set and a lower bound on endpoint count. Both are floors, so adding agents or endpoints won't fail the gate. - Extend the shared jest config instead of redeclaring it, so this gate gets the repo's 90s timeout and the CI failure reporter. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Replace the 'as any' context cast with a typed one and strip fallbackToReasoning without an unused destructured binding. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Resolve conflicts: - systemAgent.ts: keep both action families. main added system.log; this branch added index, diagnostics, session, memory, copilot, feedback, operations, construction, and collision. - systemSchemaParse.spec.ts: register both logActionSchema and this branch's index/memory schemas in ENTRY_TYPES. - pnpm-lock.yaml: take main's lockfile and re-add only this branch's dependency additions, so it stays in sync with main's package.json files. Verified with 'pnpm install --frozen-lockfile'. main's new @log command family shipped without action links, which the coverage gate correctly flagged as 5 missing endpoints. Its command handlers already delegate to exported free functions that executeLogAction also calls, so linking them is enough for both paths to share one implementation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
executeConfigAction interpolated translator-supplied agent names into a command string that processCommandNoLock then re-tokenizes. An agent name like 'calendar --reset' resolved as the real --reset flag, which sets every agent back to its default - a config rewrite the user never asked for. The same interpolation split any multi-word name into two names. All six cases now go through executeCommandFromHandlers with structured parameters, like runConfigCommand already did, so nothing model-supplied is re-parsed as command syntax. This also stops the six from swallowing failures: processCommandNoLock catches internally and never rethrows, so a failed toggle was reported to the caller as a successful action. Breaking the string path exposed a module cycle: configCommandHandlers -> command -> systemAgent, whose module-level systemHandlers called getConfigCommandHandlers() while this PR's singleton was still initializing. It only worked before because an unrelated import happened to load command.js first. systemHandlers and its command interface are now built lazily, and configCommandHandlers imports resolveCommand dynamically at its one call site. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…ct docs Calendar: calendarGoogleAuth took the Google authorization code as an LLM-authored parameter. The command path gets the code the user typed; the action path got whatever the translator emitted, and the code was sent to the model provider (the outbound scrubber has no pattern for Google's 4/0A format). A truncated or rewritten code silently burns the single-use grant. The action is now parameterless and points the user at the command, and the grammar rule no longer captures a code. playerLocal: '@LocalPlayer play' failed with 'Invalid track number: 0' whenever the queue was built with addToQueue and nothing had played yet - currentIndex starts at -1 and playFromQueue is 1-based. Newly reachable by natural language, so fixing rather than inheriting. playerLocal: add the missing test:local script. Without it 'pnpm -r --no-bail' silently skipped the package, so all three spec files - including the grammar spec this PR added a dependency for - never ran in CI. playerLocal: the command-link test asserted the length of its own literal; compare against the live table instead. Docs: STATUS.md reported 387/387 when the tool prints 393/393, and claimed '--mock' greeting action parity that was deliberately removed. Both STATUS.md and PLAN.md now state that the gate enforces link coverage, not behavioral equivalence, and call out the two endpoints whose actions intentionally do less than their command. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
build_ts failed the lint ratchet with 24 net-new violations against main, almost all @typescript-eslint/no-explicit-any in the new action handlers. Most were type annotations rather than real dynamism: - ParsedCommandParams<any> and 'params?: any' become CommandParams, a shared alias for ParsedCommandParams<ParameterDefinitions>, for commands resolved by name at dispatch time. - getFlagType(definition as any) and the flag value map are now typed. - The powershell flowParametersJson catch narrows the error instead of typing it as any. The one genuinely loose spot is an action's parameters object: each switch case reads its own fields off a union whose members disagree about whether parameters exists. That is now the single exported ActionParams type with one documented eslint-disable and a TODO, rather than 20 scattered anys. Narrowing it per case belongs with the change that makes executeCommandFromHandlers apply each command's declared defaults, which would also delete the hand-copied default literals the reviewers flagged. Ratchet now reports 154 -> 142: the changed files carry fewer violations than the base. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
build_ts failed the circular-dependency ratchet. The action handlers pulled the command tree in behind them, so every systemAgent -> actionHandler edge closed a cycle back through command.ts and internal.ts. - CommandHandlerContext is now a type-only import in every action handler, which is what it always was. This alone removed 15 cycles. - history, index, notification, and settings action handlers take their command table as a parameter instead of importing it, matching what the other handlers already did. history, notification, and settings also stop using processCommandNoLock, which catches internally and never rethrows, so their failures were reported to the caller as successful actions. - STATUS_NOTICE_DEFAULT_MESSAGE moves to its own leaf module so the action handler and the command handler can share it without an edge between them. Total cycles drop from 220 on main to 210 here. The ratchet keys cycles by their full path, though, and the remaining 87 keys are paths this PR already introduced before these fixes (verified: this branch adds no new keys versus the pre-fix merge commit). Only 2 of them involve the new action handlers at all; the other 85 are among pre-existing dispatcher core files whose paths shifted. Those are grandfathered in the exceptions file the repo documents as the mechanism for code-circular. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Tal Zaccai (TalZaccai)
approved these changes
Aug 19, 2026
…rage gate The host floor I added listed osNotifications, but that agent is defaultEnabled: false and platform-dependent, so it enumerates on Windows and not on Linux. build_ts passed on Windows and macOS and failed on both Linux runners, twice (the retry confirmed it wasn't flaky). Require only the hosts that are always present and lower the endpoint floor to 385, which still catches any of them dropping out: Linux enumerates 391 without osNotifications, and losing a real host like browser (33) or localPlayer (16) trips it. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Resolve the log command handler conflict by preserving command action metadata while adopting the current local telemetry behavior from main. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.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 freeto 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.
This pull request implements full natural-language action coverage for every bundled TypeAgent
@command, with a particular focus on the browser agent's automation commands. It introduces new action schemas and handlers for browser automation, integrates them into the browser agent, and documents the plan and status of this coverage milestone. The most important changes are grouped below:Browser Agent: Automation Actions Integration
BrowserAutomationActions) and handler (executeBrowserAutomationAction) for browser automation commands, supporting launching hidden/standalone automation browsers and closing them. These actions are now fully integrated and invoked via natural-language requests, ensuring parity with their command equivalents. [1][2][3][4][5][6]OpenStandaloneAutomationBrowserHandlercommand to the new automation action, ensuring that both command and action paths share the same implementation and side effects.Documentation: Coverage Plan and Status
PLAN.md) detailing the requirements, implementation rules, and phases for achieving natural-language action coverage for all TypeAgent commands.STATUS.md) that reports strict endpoint coverage, current progress, and documents the completion of all agent-host and system command families.SDK/Helpers: Type and Export Improvements
CommandHandlerTypestype and thegetCommandHandlerfunction from the command helpers, improving type safety and reusability across the codebase. [1][2]Browser Agent: User Experience Enhancement
These changes collectively ensure that every executable TypeAgent command is now accessible via a behaviorally equivalent natural-language action, with strict parity and comprehensive test coverage.