Skip to content

A3 පර්යාය ඉවත්කර, ගොඩනැගීමේ වාඩු සහ අනෙක් වැඩිදුර සවිස්තර#2

Closed
imabdulazeez wants to merge 69 commits into
mainfrom
aa/test
Closed

A3 පර්යාය ඉවත්කර, ගොඩනැගීමේ වාඩු සහ අනෙක් වැඩිදුර සවිස්තර#2
imabdulazeez wants to merge 69 commits into
mainfrom
aa/test

Conversation

@imabdulazeez
Copy link
Copy Markdown
Owner

@imabdulazeez imabdulazeez commented May 17, 2026

Summary

  • ඩෙස්ක්‍රිප්ටර් අයිතන්ය නම A3 ලෙස යාවත්කාලීන කරන ලද (Alpha සිට)
  • ගොඩනැගීමේ වාඩුව ට්‍රැකින් සහ ප්‍රදර්ශන අනුවාද ස්වරූපයි
  • ඔබේ ගිටහබ් නඩුවලට බහු නිධන හේතු සඳහා ගබඩා පරාමිතිය එකතු කරන ලද
  • සූත්‍ර නැවතීම සහ නැවත ප්‍රවර්ධනයට සහාය දක්වන ලේඛනයි
  • ටර්මිනල සහ වෙනස් ෂ්‍රේණීවලට ෂ්‍රිතය අභිරුචිකරණයි
  • ඉලෙක්ට්‍රෝන අවසර පිළිබඳ කටයුතු සහ ඉතිරි නිෂ්පාදනයි
  • ගිට් ගබඩා කර්තබ්‍ය ඉස්කුරුඩුවලට සහාය දක්වා ප්‍රජා ගිටහබ් වගුවලින් වඩා හොඳ හඳුනුම්
  • අවසරප්‍රාප්ත අපතේ ඉතිරිකර ඩිස්කලෝ ඉතිරි කරන ලද ක්‍රියා සහ අනෙක් දෝෂ නිවැරදි කිරීමි

Note

Rebrand desktop app from Alpha to A3 and add proposed plan promote/revert commands

  • Renames stage label, product name, and HTML title from Alpha/T3 Code (Alpha) to A3/T3 Code (A3) across desktop and web.
  • Adds buildTimestamp to desktop versioning: resolved from env var T3CODE_BUILD_TIMESTAMP, then packaged package.json, then current time; propagated into displayVersion shown in Electron's about panel.
  • Introduces thread.proposed-plan.promote and thread.proposed-plan.revert orchestration commands with full pipeline: contracts, decider, projector, DB migration (revertedAt column), and client store.
  • Chat UI gains promote-to-plan, revert-plan, and implement-in-new-thread-draft actions; reverting a user message now restores text and image attachments into the composer.
  • Adds settings for autoCreatePrOnPush, diffFontFamily, terminalFontFamily, hideUnavailableProviders, changedFilesExpandedByDefault, and per-operation prompt instruction overrides (commit, PR, branch); a new FontPicker component loads system fonts via queryLocalFonts.
  • All text generation providers (Claude, Codex, Cursor, OpenCode) now accept instructionsOverride and sanitize PR body via sanitizePrBody to unwrap JSON-wrapped responses.
  • Source control providers (GitHub, GitLab, Bitbucket, AzureDevOps) now forward headRepository and repository for cross-repo PR creation and default-branch resolution.
  • Risk: MakeDesktopEnvironmentInput and many test harnesses now require buildTimestamp; before-quit handler races shutdown against a 5 s timeout and calls process.exit(0) directly rather than app.quit().

Macroscope summarized e352e1c.

… a git repo are detected

Previously isGitRepository only checked cwd/.git, so opening t3code at a
sub-package of a monorepo (e.g. apps/server) was treated as non-git,
silently disabling checkpoints and the diff panel. Walk up to the
filesystem root to match git's own behavior.

Fixes pingdotgg#2441
Apply review suggestion: collapse the parent-walk into a single while
loop using the dirname-equals-self termination check, and drop the
redundant parse(cwd).root guard. Behavior is unchanged for every cwd the
codebase actually passes in (always a sub-path of the repo).
The previous while-loop form advanced current to its parent in the loop
condition before the existsSync check ran, so the input directory was
never tested. Calling isGitRepository on a path that itself contains
.git returned false. Switch to do...while so the check runs before the
advance, without duplicating the existsSync call.
- Update product names and titles across web and desktop
- Add "AA" to DesktopAppStageLabel type
- Add client setting `autoCreatePrOnPush` (default on)
- Downgrade feature-branch quick actions to commit/push only when off
- Expose toggle in General settings
- Update dialog titles and descriptions to use "branch"
- Clarify progress messages: "feature ref" → "feature branch"
- Update error messages and hints for consistency
- Change test expectations to match new terminology
- Allow users to choose monospace fonts from system fonts
- Fonts persist in settings and apply to diff view
- Uses Local Font Access API with common fonts fallback
- Grant local-fonts permission in Electron
- Generalize DiffFontPicker to FontPicker for reuse
- Add terminalFontFamily setting to contracts schema
- Apply custom font selection in TerminalViewport
- Rename General to Appearance for UI-related settings (fonts, theme, diff display)
- Move chat/task settings to Threads & tasks section
- Move project config to Projects section
- Move git settings to Version control section
Adds default value for new setting to keep tests passing
Brings in: server CLI submodule split (pingdotgg#2545), process/trace diagnostics
views (pingdotgg#2532), JetBrains editor support (pingdotgg#2475), MessagesTimeline render
optimizations (pingdotgg#2527, pingdotgg#2498), git/terminal test stabilization (pingdotgg#2540),
keybindings settings editor (pingdotgg#2533), and provider update advisories
(pingdotgg#2312).

Conflict resolutions:
- packages/contracts/src/settings.ts: kept aa's diffFontFamily and
  terminalFontFamily alongside upstream's
  dismissedProviderUpdateNotificationKeys.
- apps/desktop/src/clientPersistence.test.ts: same shape, fixture mirrors
  the schema.
- apps/web/src/components/settings/SettingsPanels.tsx: kept both import
  groups (FontPicker from aa, ProviderUpdateLaunchNotification.logic from
  upstream).
- apps/web/src/localApi.test.ts: extended both fixtures with
  diffFontFamily and terminalFontFamily so the merged ClientSettings
  shape typechecks against the strict desktop bridge contract.

Pre-existing aa typecheck issues fixed at the root so the merge commit
is green:
- apps/desktop/src/electron.d.ts: declaration-merge "local-fonts" into
  Electron's Session.setPermissionRequestHandler permission union (the
  Electron 40 typings omit it even though the runtime supports it).
- apps/web/src/components/DiffPanel.tsx: conditionally spread style on
  Virtualizer instead of passing undefined, satisfying
  exactOptionalPropertyTypes.
Extend the Electron permission allowlist so navigator.clipboard.writeText
calls from the renderer ("Copy" buttons in messages, sidebar, etc.) work
in production. Without this, the permission handler installed alongside
the local-fonts grant denied clipboard-sanitized-write, surfacing
"Failed to copy" toasts. Dev mode was unaffected.
- Adds formatBuildTimestamp utility for UTC YYYYMMDD-HHMM format
- Updates artifactName to include timestamp in builds
- Helps distinguish builds for debugging
- Add chatImageAttachmentsToComposerImages helper to restore images
- Track user messages by ID for lookup during revert
- Make onRevertToTurnCount async and return success status
- Populate composer draft with reverted message content and attachments
- Reorganize flat source tree into modular architecture (app/, backend/, electron/, ipc/, etc.)
- Implement proper dependency injection using Effect Context services
- Consolidate app lifecycle, configuration, and environment management
- Update electron to v41.5.0 and add Effect language service support
- Move desktop-specific .gitignore entries to root
Adds a heuristic to detect and capture plan-like text when Claude completes
a plan-mode turn without calling ExitPlanMode. This makes the Implement
button appear for structured text plans that don't explicitly use the SDK tool.

The fallback gates on all of:
- Turn ran in plan mode
- No ExitPlanMode already captured
- No pending user input request
- Turn completed successfully

The heuristic checks for:
- Text length >= 200 chars (filters trivial responses)
- Structural markers (headings, bullet/numbered lists)
- Not starting with refusal stems
- Either 3+ total list items OR a plan-related heading keyword

Captures via the same emitProposedPlanCompleted path, with rawMethod
"claude/text-fallback" for observability. Deduplication prevents double-firing
when ExitPlanMode already captured the turn.

No web/client changes required—the capture flows through existing
turn.proposed.completed → activeProposedPlan → Implement button path.
- Store currentInteractionMode in context to properly reflect plan/default mode
- Use tracked mode instead of input-based derivation for resolvedInteractionMode
- Add null safety check for text block access
- Support claude.sdk.text-fallback event source
- Adds 5-second timeout (SHUTDOWN_EXIT_TIMEOUT_MS) to shutdown sequence
- Uses Promise.race() to ensure app exits even if shutdown effect hangs
- Properly manages timeout handle cleanup
- Prevents indefinite app hang on quit
Add check for pending user inputs before allowing plan promotion to Claude, ensuring users cannot promote a plan while unsent messages await.
- Change formatBuildTimestamp to use local time getters
- Remove -u flag from date command in release workflow
- Update test expectations and comments
- New "Implement in a new thread (don't send)" menu option
- Draft threads track source plan references
- New useStartImplementationDraftFromPlan hook for creating implementation drafts
Adds "Implement in a new thread (don't send)" composer menu option that
lands the implementation prompt in a draft thread, preserving sourceProposedPlan
linkage on the first send.

Conflicts resolved in ComposerPrimaryActions/ChatComposer (kept both the
new menu item and the existing Revert plan item) and ChatView (kept both
the promote/revert plan handlers and the new draft helper).
- Sanitize PR body generation to unwrap JSON envelopes from LLM responses
- Support reimplementing already-implemented plans with updated UI labels
- Add hasReimplementableProposedPlan to determine plan eligibility
- Add full thread diff support with optimized context lookups
- Extract process execution to injectable ProcessRunner dependency
- Remove open package dependency and add externalLauncher
- Update test infrastructure for dependency injection patterns
Change user-facing text from "ref" to "branch" for clarity. Updates branch selector labels, placeholders, error messages, and related test selectors.
- Introduces changedFilesExpandedByDefault user setting
- Updates UI state store to track overrides vs default state
- Adds toggle in Settings panel to control expansion behavior
Workspace protocol deps (workspace:*) are internal monorepo references and should not be included in the standalone desktop artifact
- Sample server and child processes every 5 seconds with CPU/memory tracking
- Aggregate historical data into configurable time windows (5m-1h)
- Visualize CPU usage with charts and per-process summaries
- Add exponential backoff for VCS remote refresh failures
- Export diagnostic utilities for improved testability
- New setting to hide disabled/coming-soon providers from sidebar
- Includes UI toggle in provider settings panel
# Conflicts:
#	apps/web/src/components/chat/ModelPickerContent.tsx
- Enable cross-fork PR creation by specifying head repository
- Add headRepository parameter to createChangeRequest
- Add repository parameter to getDefaultBranch across providers
- Include GitHub CLI tests for new parameter
- Add settings UI for editing commit message, PR, and branch name instructions
- Extract default instructions to contracts and wire through text generation pipeline
- Instructions override built-in defaults when provided, enabling users to customize AI behavior
- Pass --repo flag to GitHub CLI when repository is specified
- Use headContext.headRepositoryNameWithOwner for fork/cross-repo PRs
- Enables PR queries scoped to head repository
@github-actions github-actions Bot added size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels May 17, 2026
@imabdulazeez imabdulazeez deleted the aa/test branch May 17, 2026 10:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant