<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Adds a GitHub Action to detect and comment on potential duplicate issues
when a new issue is opened. This reduces triage time and keeps issue
lists clean.
- **New Features**
- Adds .github/workflows/duplicate-issues.yml triggered on issues:
opened.
- Uses opencode with Anthropic Claude Sonnet 4 to scan existing issues
and comment with links if duplicates are likely; stays silent otherwise.
- Runs with minimal permissions; allows gh issue commands and denies
webfetch.
- **Migration**
- Create the ai-bots environment and add the ANTHROPIC_API_KEY secret
(GITHUB_TOKEN is provided by GitHub).
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Adds an explicit Husky pre-commit setup to run the formatter and linter
before each commit. Replaces the auto-run prepare hook with a manual npm
run init-precommit command.
- **Migration**
- Run npm run init-precommit once in your repo to install the pre-commit
hook.
<!-- End of auto-generated description by cubic. -->
fixes#1109https://github.com/WiseLibs/better-sqlite3/blob/master/docs/api.md#transactionfunction---function
> Transaction functions do not work with async functions. Technically
speaking, async functions always return after the first await, which
means the transaction will already be committed before any async code
executes.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Fixes a runtime error when deleting the first custom provider by using a
synchronous DB transaction. Ensures associated models and the provider
are removed atomically without failing.
- **Bug Fixes**
- Replace async transaction callback with a synchronous one and remove
awaits on tx operations to match the DB API and prevent the first-delete
error.
<!-- End of auto-generated description by cubic. -->
Co-authored-by: 顾颢 <hao.gu@factchina.com>
The prompt text says:
> - Use TypeScript.
But in the examples there are .jsx files.
I got errors sometimes (in my fork with other changes too) that JSX got
generated instead of TSX. This seems to have fixed it for me.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Updated system prompt examples to use .tsx/.ts instead of .jsx/.js,
matching the “Use TypeScript” instruction. This prevents JSX drift and
reduces cases where generated code uses JSX instead of TSX.
<!-- End of auto-generated description by cubic. -->
Fixes#1037
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Enable JSON file support in codebase scanning so common configs and data
(e.g., package.json, vercel.json, translations) are included. Adds .json
to the allowed extensions and removes special-casing for
package.json/vercel.json.
<!-- End of auto-generated description by cubic. -->
Fixes#554#1049
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Stop mutating package.json when reading files. readFileWithCache now
returns raw content so all fields are preserved (e.g., packageManager).
Fixes#554 and #1049.
- **Bug Fixes**
- Removed package.json "cleaning" logic and the cleanContent helper.
- Return and cache unmodified file content from both fs and
virtualFileSystem.
<!-- End of auto-generated description by cubic. -->
fixes#1010
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Disable automatic JWT verification for Supabase Edge Functions and
update prompts/templates to require and demonstrate manual auth
handling. Fixes#1010.
- **Bug Fixes**
- Set verify_jwt: false in function deployment.
- Updated Supabase prompt with an Authentication section and guidance to
manually verify tokens.
- Adjusted the hello function template to check the Authorization header
and return 401 when missing.
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Parameterized the system prompt and tokenized it in e2e dumps to make
snapshots smaller and stable. No runtime behavior changes; future prompt
edits won’t churn tests.
- **Refactors**
- Exported BUILD_SYSTEM_PREFIX and BUILD_SYSTEM_POSTFIX from
system_prompt.ts.
- Updated test_helper to replace the full prompt with
${BUILD_SYSTEM_PREFIX}/${BUILD_SYSTEM_POSTFIX} tokens in message dumps.
- Regenerated e2e snapshots to use tokens, reducing ~270 lines per
snapshot.
<!-- End of auto-generated description by cubic. -->
Fixes#1077
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Fix the SetupBanner being cut off in the empty chat state. The
placeholder message now uses flex-1 instead of h-full so the banner
renders fully.
<!-- End of auto-generated description by cubic. -->
Co-authored-by: 顾颢 <guhao@dayee.com>
This PR fixes the issue #1072 where long words in chat messages overflow
outside the message container.
The fix applies Tailwind’s `break-words` utility to ensure that overly
long words wrap properly within the chat bubble.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Fixes text overflow in chat messages by adding Tailwind’s break-words to
the message content. Long words and URLs now wrap inside the bubble
instead of spilling out.
<!-- End of auto-generated description by cubic. -->
This PR adds a reference to the architecture doc in contributing.md .
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Added a link to the Architecture Guide in CONTRIBUTING.md to give
contributors a high-level overview and ensure changes align with the
project architecture.
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Add a high-level Architecture doc for Dyad in docs/architecture.md. It
explains the Electron renderer/main model, the life of a request
(streaming, parsing, applying Dyad tags), and the reasoning behind our
context and agentic choices to improve onboarding and clarity.
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Disable Electron safeStorage encryption in test builds so e2e runs are
consistent and don’t require the OS keychain. Added an IS_TEST_BUILD
guard in encrypt() to force the unencrypted fallback during tests.
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Bump version from 0.18.0-beta.1 to the stable 0.18.0. Updates
package.json to finalize the v0.18.0 release for publishing.
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Bumped the package version from 0.18.0-beta.1 to 0.18.0-beta.2 to
prepare the next beta release.
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Adds Smart Context v3 with selectable modes (Off, Conservative,
Balanced) and surfaces token savings in chat. Also improves token
estimation by counting per-file tokens when Smart Context is enabled.
- **New Features**
- Smart Context selector in Pro settings with three options.
Conservative is the default when enabled without an explicit choice.
- New setting: proSmartContextOption ("balanced"); undefined implies
Conservative.
- Engine now receives enable_smart_files_context and smart_context_mode.
- Chat shows a DyadTokenSavings card when the message contains
token-savings?original-tokens=...&smart-context-tokens=..., with percent
saved and a tooltip for exact tokens.
- Token estimation uses extracted file contents for accuracy when Pro +
Smart Context is on; otherwise falls back to formatted codebase output.
<!-- End of auto-generated description by cubic. -->
### Summary
This PR implements a timestamp feature for messages in the prompt
window, responding to feature request #944.
**What this does:**
- Prefixes each sent message with a timestamp and message version.
### Screenshot
<img width="530" height="116" alt="image"
src="https://github.com/user-attachments/assets/62a86890-b120-42dd-ab48-8eeb4515a292"
/>
---------
Co-authored-by: Will Chen <willchen90@gmail.com>
Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
## 🚀 Feature: Copy to Clipboard for Code Blocks
### What's Changed
- Added a copy button to all code blocks that allows users to easily
copy code snippets
- Implemented visual feedback showing a checkmark when code is
successfully copied
- Copy button automatically reverts back after 2 seconds
### Technical Details
- Uses `navigator.clipboard.writeText()` for modern clipboard API
- Positioned copy button in the top-right corner alongside language
label
- Maintains existing code highlighting functionality
### UI/UX Improvements
- Clean, minimal copy button design that doesn't interfere with code
readability
- Clear visual feedback with copy and check icon transition
- Consistent styling with existing theme system
### Video
https://github.com/user-attachments/assets/8f388217-da8a-422e-9087-42cce8df68ad
---------
Co-authored-by: Will Chen <willchen90@gmail.com>
- [x] Update chat_stream_handlers
- [x] Update token handlers
- [x] Update HomeChatInput
- [x] update lexical chat input: do not allow referencing same app
(current app, or other already selected apps)
- [x] I don't think smart context will work on this...
- [x] Enter doesn't clear...
Now users can free to edit their custom models by double clicking any
custom models created in each provider.
Before this, they have to delete -> create a new one.
I simply add an edit panel (which looks the same as 'Add Custom Model')
and integrate that process into the "update" button.
There is one more issue that if a user deletes a model that he was using
in chat, then back to chat, that model would still appear (and work)
unless user chooses a new one.
Tried to modify "delete-custom-model" in language_model_handlers.ts by
the logic that if the name of that model matches the latest using one ->
switch to auto (or default) model. Yet I failed, maybe need more
explanation for this :)
Closes#820; adds a .env.example file to document required environment
variables and streamline the setup process for new developers.
---------
Co-authored-by: Will Chen <willchen90@gmail.com>
Resolves#787. Prevents crashes when running capacitor commands on a
system with an incompatible (older) Node.js version.
---------
Co-authored-by: Will Chen <willchen90@gmail.com>