Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions extensions/blume-search/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
raycast-env.d.ts
dist/
8 changes: 8 additions & 0 deletions extensions/blume-search/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"bracketSpacing": true,
"printWidth": 120,
"tabWidth": 2,
"semi": true,
"singleQuote": false,
"useTabs": false
}
6 changes: 6 additions & 0 deletions extensions/blume-search/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## [Initial Release] - 2026-08-14

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Changelog hardcodes release date

The Initial Release heading hardcodes 2026-08-14 instead of {PR_MERGE_DATE}, preventing release automation from inserting the actual merge date.

Suggested change
## [Initial Release] - 2026-08-14
## [Initial Release] - {PR_MERGE_DATE}

Rule Used: What: Changelog entries must use {PR_MERGE_DATE}... (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/blume-search/CHANGELOG.md
Line: 1

Comment:
**Changelog hardcodes release date**

The Initial Release heading hardcodes `2026-08-14` instead of `{PR_MERGE_DATE}`, preventing release automation from inserting the actual merge date.

```suggestion
## [Initial Release] - {PR_MERGE_DATE}
```

**Rule Used:** What: Changelog entries must use `{PR_MERGE_DATE}`... ([source](https://app.greptile.com/raycast/-/custom-context?memory=c2214c11-df56-490a-b1c0-09a385df481a))

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Fix in Claude Code Fix in Cursor Fix in Codex


- Search local Blume projects, conversations, messages, setup artifacts, and suggestions.
- Filter results using Blume's entity icons and colors.
- Open results in stable Blume or Blume Canary.
- Keep all search data local through Blume's bundled read-only search helper.
50 changes: 50 additions & 0 deletions extensions/blume-search/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Blume Search for Raycast

Search the same projects, conversations, messages, setup artifacts, and suggestions as Blume's
in-app search. The extension starts the local search helper shipped inside Blume; the helper uses
Blume's shared search use case and a read-only SQLite adapter. Nothing is sent over the network.

## Develop locally

1. Install a Blume build that includes the Raycast search helper and open it once so its database exists.
2. Run `cd apps/raycast && npm ci`. The extension is intentionally excluded from the pnpm
workspace because Raycast Store CI consumes its standalone `package-lock.json`.
3. Run `npm run dev` and open **Search Blume** in Raycast.

Stable Blume is used by default. To search Blume Canary, choose it under **Blume Application** in
Raycast's extension preferences. One helper process stays alive only while the command is open,
and its database is protected by SQLite read-only and `query_only` enforcement.

## Store releases

Raycast Store publishing is review-based: `ray publish` submits or updates a pull request in
`raycast/extensions`, and Raycast deploys the extension after that pull request is merged.

The repository's **Raycast Extension** workflow validates every extension change using npm, the
same package manager used by Raycast's Store CI. To enable automatic update submissions after a
compatible Blume desktop release is stable:

1. Sign in with `ray login` and confirm that `ray profile` reports the manifest's registered
Raycast Store handle (`olav_ljosland`).
2. Create a protected `raycast-store` GitHub environment.
3. Add `RAYCAST_TOKEN` and `RAYCAST_GITHUB_TOKEN` secrets to that environment. The GitHub token
must be able to create or update the Raycast extensions pull request.
4. Run the workflow manually with **submit** enabled for the initial Store submission. Optionally
provide the stable desktop tag; otherwise the workflow reads the live Blume stable update feed.
Public Store publication intentionally runs without Raycast's unsupported `--non-interactive`
flag; the environment secrets provide Raycast and GitHub authentication without a login prompt.
5. After the desktop helper has reached stable Blume, set the repository variable
`RAYCAST_AUTO_SUBMIT` to `true`. Later merges that change `apps/raycast`, and later successful
stable desktop promotions, will automatically submit an update for Raycast review.

Leave `RAYCAST_AUTO_SUBMIT` disabled before the compatible desktop helper is available to stable
users. Both manual and automatic submissions verify that the chosen stable release is on main,
matches the immutable stable-promotion marker and live update feed, contains the helper source,
ready-frame support, and build entry, and publishes the expected macOS updater ZIP. Current helpers
advertise their supported protocol versions before accepting searches.
During the additive rollout, the extension waits briefly for that frame and then falls back to the
previous request-first protocol v1 used by older helper builds; unsupported advertised versions fail
with an update prompt. This compatibility window can be removed in a later extension release after
the ready-frame desktop release is stable, and rolling back the extension remains safe while helpers
continue to accept v1 requests. The workflow never publishes from pull requests or non-default
branches.
4 changes: 4 additions & 0 deletions extensions/blume-search/assets/conversations.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added extensions/blume-search/assets/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions extensions/blume-search/assets/messages.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions extensions/blume-search/assets/projects.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions extensions/blume-search/assets/setup.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions extensions/blume-search/assets/suggestions.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions extensions/blume-search/eslint.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const raycastConfig = require("@raycast/eslint-config");

module.exports = [
{
files: ["src/**/*.{js,jsx,ts,tsx}"],
},
...raycastConfig.flat(),
];
Comment on lines +1 to +8

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 ESLint config skips defineConfig

This ESLint v9 flat configuration exports its array directly instead of using defineConfig from eslint/config, bypassing the repository’s supported normalization pattern for nested preset arrays.

Suggested change
const raycastConfig = require("@raycast/eslint-config");
module.exports = [
{
files: ["src/**/*.{js,jsx,ts,tsx}"],
},
...raycastConfig.flat(),
];
const { defineConfig } = require("eslint/config");
const raycastConfig = require("@raycast/eslint-config");
module.exports = defineConfig([
{
files: ["src/**/*.{js,jsx,ts,tsx}"],
},
...raycastConfig.flat(),
]);

Rule Used: What: In ESLint v9+, defineConfig is exported fr... (source)

Prompt To Fix With AI
This is a comment left during a code review.
Path: extensions/blume-search/eslint.config.cjs
Line: 1-8

Comment:
**ESLint config skips defineConfig**

This ESLint v9 flat configuration exports its array directly instead of using `defineConfig` from `eslint/config`, bypassing the repository’s supported normalization pattern for nested preset arrays.

```suggestion
const { defineConfig } = require("eslint/config");
const raycastConfig = require("@raycast/eslint-config");

module.exports = defineConfig([
  {
    files: ["src/**/*.{js,jsx,ts,tsx}"],
  },
  ...raycastConfig.flat(),
]);
```

**Rule Used:** What: In ESLint v9+, `defineConfig` is exported fr... ([source](https://app.greptile.com/raycast/github/raycast/extensions/-/custom-context?memory=ded2e079-95d0-44a7-80b5-83bbe04916f5))

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Claude Code Fix in Cursor Fix in Codex

Loading
Loading