Conversation
- Initial Publish - Initial commit
|
Congratulations on your new Raycast extension! 🚀 We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days. Once the PR is approved and merged, the extension will be available on our Store. |
|
While developing this extension, I encountered an issue regarding command icons. The Raycast Store requires 512px PNGs, which unnecessarily increases the extension's file size and renders poorly in the List view, appearing jagged and grainy. Local SVGs provide excellent rendering quality, but trigger an |
Greptile SummaryThis PR introduces the InFlow extension, an AI-powered text transformation tool that reads selected text from any macOS app, runs it through a configurable AI provider (Raycast AI, OpenAI, DeepSeek, Qwen, GLM, OpenRouter, or a custom OpenAI-compatible endpoint), and either pastes the result back inline or shows it in a preview panel. The core architecture is well-thought-out, with clean separation between input detection, AI orchestration, streaming output, and clipboard-based paste-and-verify logic. A few Raycast store requirements need to be addressed before merging:
Confidence Score: 3/5
Important Files Changed
Prompt To Fix All With AIThis is a comment left during a code review.
Path: extensions/inflow/src/inflow-settings.tsx
Line: 102-107
Comment:
**Custom localization logic using system locale**
`Intl.DateTimeFormat().resolvedOptions().locale` reads the OS locale to auto-detect a default language. Raycast only supports US English and discourages locale-based detection in favor of the preferences API. The same pattern appears in `src/core/languages.ts` via `getDefaultLanguageFromEnv`.
Instead of detecting the locale at runtime, consider using a static default (e.g., `"English (US)"`) or exposing this choice as a proper Raycast preference field so the user makes an explicit selection without locale sniffing.
```suggestion
setDefaultLanguage(
normalizeStoredLanguageValue(settings.defaultLanguage || "") ||
"English (US)",
);
```
**Rule Used:** What: Do not implement custom localization logic i... ([source](https://app.greptile.com/review/custom-context?memory=78677f74-64f7-483b-b90d-9c33e2e049da))
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/inflow/eslint.config.js
Line: 1-35
Comment:
**Non-standard ESLint configuration pattern**
The current config manually wires `@raycast/eslint-plugin` and doesn't use `defineConfig` from `eslint/config`, which is the required pattern for Raycast extensions. It also uses `@raycast/eslint-plugin` directly instead of the high-level `@raycast/eslint-config` preset.
The standard Raycast pattern is:
```javascript
import { defineConfig } from "eslint/config";
import raycast from "@raycast/eslint-config";
export default defineConfig([...raycast]);
```
Upgrading to ESLint v9 and adopting this pattern would align the extension with the rest of the Raycast ecosystem.
**Rule Used:** What: In ESLint v9+, `defineConfig` is exported fr... ([source](https://app.greptile.com/review/custom-context?memory=ded2e079-95d0-44a7-80b5-83bbe04916f5))
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/inflow/package.json
Line: 10-15
Comment:
**`Applications` category is too broad for this extension**
`Applications` is described as "End-user apps and utilities (e.g., CleanShot X)," which fits extensions that wrap a standalone macOS application. InFlow is an AI writing-assistant utility; `Productivity` already covers this well and is the more specific match. Consider removing `Applications` from the `categories` array.
```suggestion
"categories": [
"Productivity"
],
```
**Rule Used:** What: Assign at least one predefined category to e... ([source](https://app.greptile.com/review/custom-context?memory=f49debbf-b6f6-4c0d-9b35-e1927815992b))
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/inflow/src/core/logger.ts
Line: 3
Comment:
**Debug switch left enabled**
`ENABLE_DEBUG = true` is fine for local development, but it's easy to accidentally ship a build with this enabled. Because `IS_DEV` also requires `NODE_ENV === "development"`, logs are suppressed in production builds — so there is no runtime impact. However, the comment `// --- DEV SWITCH ---` implies this should be toggled off before merging. Setting it to `false` makes the intent explicit and prevents accidental dev noise if the build environment ever changes.
```suggestion
const ENABLE_DEBUG = false;
```
How can I resolve this? If you propose a fix, please make it concise.
---
This is a comment left during a code review.
Path: extensions/inflow/package.json
Line: 170-175
Comment:
**Missing `.prettierrc` configuration file**
All Raycast extensions must ship with a `.prettierrc` file that sets `printWidth: 120` and `singleQuote: false`. No `.prettierrc` is present in this extension. Without it, formatter output may diverge from the Raycast standard.
Add `extensions/inflow/.prettierrc` with:
```json
{
"printWidth": 120,
"singleQuote": false
}
```
**Rule Used:** What: All extensions must use the standard Raycast... ([source](https://app.greptile.com/review/custom-context?memory=7be27780-7fcb-4602-9122-17c47fdd52ee))
How can I resolve this? If you propose a fix, please make it concise.Reviews (1): Last reviewed commit: "Add inflow extension" | Re-trigger Greptile |
Avoid overly broad issue Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Setting the logger to false explicitly states the intent and prevents accidental development noise if the build environment changes. Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
|
This pull request has been automatically marked as stale because it did not have any recent activity. It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊 |
|
I am not sure what I need to do next? I always thought I was waiting for the reviewer's review. |
0xdhrv
left a comment
There was a problem hiding this comment.
Thanks for your contribution @xiaochunjimmy 🔥
At a high level, this functionality appears to overlap with what can already be achieved using Raycast’s existing AI commands ↗. The core workflow invoking AI to process, transform, or generate content based on user input is already well-supported through built-in AI features, including custom AI commands and prompt-based interactions.
In particular:
- The primary actions can be replicated using existing AI commands without additional setup complexity.
- Supporting this separately would duplicate functionality that is already actively maintained and improved within Raycast AI.
If there are specific features, constraints, or workflows that are not currently possible with AI commands (for example, deeper integrations, automation, or domain-specific enhancements), it would be great to highlight those. That context can help determine whether this should extend existing capabilities rather than introduce parallel functionality.
This would help avoid duplication and keep related functionality consolidated in one place. As mentioned in our extension guidelines here ↗
|
@0xdhrv Thank you for your patient explanation. I understand this, as Raycast is a commercial product, and we should actively maintain its ecosystem. |
Description
InFlow is a Raycast extension that lets you transform selected text with AI — instantly and in place.
Select text in any macOS app, run a command, and the result is automatically written back or shown in a panel. No app switching. No copy and paste.
This extension leverages Raycast’s text selection and AI APIs alongside List, Detail, and HUD interface components to deliver interactive operations and feedback.
Use it to:
Screencast
InFlow.Demo.mp4
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare placed outside of themetadatafolder