Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add limtless-ai extension #17939

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open

Conversation

aridutilh
Copy link

@aridutilh aridutilh commented Mar 17, 2025

Description

Screencast

Checklist

- Fix linting issues and prepare for publishing
- feat: Add transcript viewing functionality and API key management
- Initial commit
@raycastbot raycastbot added the new extension Label for PRs with new extensions label Mar 17, 2025
@raycastbot
Copy link
Collaborator

Congratulations on your new Raycast extension! 🚀

Due to our current reduced availability, 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.

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

PR Summary

This PR adds a new Limitless AI extension for managing and analyzing Limitless Pendant's lifelog transcripts, with features for viewing transcripts, AI analysis, and API key management.

  • Extension name has a typo ('limtless-ai' instead of 'limitless-ai') across all files - this needs to be corrected as it's the unique identifier
  • README.md is too minimal for a new extension with 'view' commands - needs screenshots in metadata folder and more comprehensive documentation
  • Remove debug console.log in src/view-transcripts.tsx and consider fixing the duplicate cmd+. shortcut for copy actions
  • Remove unnecessary Swift-related patterns (.raycast-swift-build, .swiftpm, compiled_raycast_swift) from .gitignore since this is a TypeScript extension
  • Error handling in loadMore could be simplified using showFailureToast from @raycast/utils

💡 (2/5) Greptile learns from your feedback when you react with 👍/👎!

11 file(s) reviewed, 22 comment(s)
Edit PR Review Bot Settings | Greptile

Comment on lines +8 to +10
.raycast-swift-build
.swiftpm
compiled_raycast_swift
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Remove Swift-related ignore patterns as this is a TypeScript extension that doesn't use Swift

Suggested change
.raycast-swift-build
.swiftpm
compiled_raycast_swift

Comment on lines +1 to +4
{
"printWidth": 120,
"singleQuote": false
}
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Raycast's code style already includes these settings by default. No need to specify them in a custom .prettierrc

@@ -0,0 +1,64 @@
{
"$schema": "https://www.raycast.com/schemas/extension.json",
"name": "limtless-ai",
Copy link
Contributor

Choose a reason for hiding this comment

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

syntax: Extension name has a typo: 'limtless-ai' should be 'limitless-ai'

Suggested change
"name": "limtless-ai",
"name": "limitless-ai",

},
{
"name": "manage-api-key",
"title": "Manage Api Key",
Copy link
Contributor

Choose a reason for hiding this comment

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

style: 'Manage Api Key' should be 'Manage API Key' for consistency with other API mentions

Suggested change
"title": "Manage Api Key",
"title": "Manage API Key",

Comment on lines +20 to +23
"name": "ai-assistant",
"title": "AI Assistant",
"description": "Ask questions about your Limitless AI Pendant's lifelogs using AI.",
"mode": "view"
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Since this command uses AI, should include 'ai' with 'evals' in package.json

// Find a content with startTime for debugging
const firstLifelog = response.data.lifelogs[0];
const blockquote = firstLifelog?.contents?.find((c) => c.type === "blockquote" && c.startTime);
console.log("First blockquote with startTime:", blockquote);
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Remove debug console.log statement before production

Suggested change
console.log("First blockquote with startTime:", blockquote);

Comment on lines +148 to +153
showToast({
style: Toast.Style.Failure,
title: "Failed to load more transcripts",
message: err instanceof Error ? err.message : "Unknown error occurred",
});
}
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Can be simplified with showFailureToast from @raycast/utils

Suggested change
showToast({
style: Toast.Style.Failure,
title: "Failed to load more transcripts",
message: err instanceof Error ? err.message : "Unknown error occurred",
});
}
showFailureToast(err instanceof Error ? err.message : "Failed to load more transcripts");
}


setTranscripts((prev) => [...prev, ...response.data.lifelogs]);
setNextCursor(response.meta.lifelogs.nextCursor);
setHasMore(response.meta.lifelogs.count > transcripts.length + response.data.lifelogs.length);
Copy link
Contributor

Choose a reason for hiding this comment

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

logic: hasMore calculation uses stale transcripts.length - should use prev.length + response.data.lifelogs.length

Suggested change
setHasMore(response.meta.lifelogs.count > transcripts.length + response.data.lifelogs.length);
setHasMore(response.meta.lifelogs.count > prev.length + response.data.lifelogs.length);

Comment on lines +82 to +83
shortcut={{ modifiers: ["cmd"], key: "." }}
/>
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Same shortcut (cmd+.) used for two different copy actions - consider using different shortcuts

subtitle={error}
actions={
<ActionPanel>
<Action.OpenInBrowser title="Manage API Key" url="raycast://extensions/limtless-ai/manage-api-key" />
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Use Action.OpenPreferences instead of Action.OpenInBrowser for preferences

Suggested change
<Action.OpenInBrowser title="Manage API Key" url="raycast://extensions/limtless-ai/manage-api-key" />
<Action.OpenPreferences title="Manage Api Key" />

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new extension Label for PRs with new extensions
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants