Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
4dcf9f1
WIP: creator mode shizz
Acorn221 May 9, 2025
f10215e
WIP: registering pear listener for messages from submodule
Acorn221 May 9, 2025
a510131
fix: sending roo code when we're in creator mode
Acorn221 Apr 17, 2025
9700c59
feat: added creator mode bar
Acorn221 Apr 17, 2025
c017029
Added newProject filtering
nang-dev Apr 19, 2025
2f2e1c1
Progress
nang-dev Apr 24, 2025
9ab8d86
Added creatorModeConfig
nang-dev Apr 24, 2025
03d7d74
fix:build
Acorn221 May 6, 2025
edd80be
chore: spelling + types
Acorn221 May 8, 2025
35739ec
fix: not using deep compare effect
Acorn221 May 9, 2025
228f260
fix: creator shizz
Acorn221 May 9, 2025
562f998
fix: creator mode style
Acorn221 May 9, 2025
c0a67cc
fix: task + stop btn
Acorn221 May 9, 2025
0a72e5f
feat: added message emitter to handle creator mode updates
Acorn221 May 9, 2025
1749a56
fix: sizing
Acorn221 May 9, 2025
23b1c19
chore: lil switchup
Acorn221 May 9, 2025
12e5a4e
feat: handling the feedback button
Acorn221 May 10, 2025
28b7ef2
fix: roo code shizz not coming up
Acorn221 May 10, 2025
2e4e456
feat: creator mode state management in roo
Acorn221 May 10, 2025
bfa6666
chore: changed text
Acorn221 May 10, 2025
fb757c5
Merge branch 'acorn/creator-rebase' into feat/creator-mode
Acorn221 May 10, 2025
568ed67
Fixed error messaging
nang-dev May 10, 2025
8e2089c
Error message
nang-dev May 10, 2025
1fd2f29
Typo
nang-dev May 10, 2025
9977837
feat: added pear ai creator mode with backend only flag to not show i…
Acorn221 May 11, 2025
0b45f71
fix: modes
Acorn221 May 11, 2025
7853668
fix: typo
Acorn221 May 11, 2025
3b062f6
fix: damn typo!
Acorn221 May 11, 2025
b8e92b1
Added installer
nang-dev May 11, 2025
0ade3a8
fix: text color in plannin bar
Acorn221 May 12, 2025
6db38be
feat: added gradient background to roo code + removed extra margin on…
Acorn221 May 12, 2025
44bec75
fix: creator mode new tasks are also in creator mode
Acorn221 May 12, 2025
480f999
fix: duplicate key
Acorn221 May 12, 2025
5135c13
WIP: creator mode shizz
Acorn221 May 9, 2025
614bc3a
WIP: registering pear listener for messages from submodule
Acorn221 May 9, 2025
5d5ed70
fix: sending roo code when we're in creator mode
Acorn221 Apr 17, 2025
5d49cc6
feat: added creator mode bar
Acorn221 Apr 17, 2025
1d77a46
Added newProject filtering
nang-dev Apr 19, 2025
6eb671b
Progress
nang-dev Apr 24, 2025
f9ad022
Added creatorModeConfig
nang-dev Apr 24, 2025
53b876c
fix:build
Acorn221 May 6, 2025
dd80a75
chore: spelling + types
Acorn221 May 8, 2025
b16e957
fix: not using deep compare effect
Acorn221 May 9, 2025
78f1dc0
fix: creator shizz
Acorn221 May 9, 2025
c9ca0fc
fix: creator mode style
Acorn221 May 9, 2025
669bd55
fix: task + stop btn
Acorn221 May 9, 2025
9cc10db
feat: added message emitter to handle creator mode updates
Acorn221 May 9, 2025
a87a379
fix: sizing
Acorn221 May 9, 2025
75953a1
chore: lil switchup
Acorn221 May 9, 2025
acba172
feat: handling the feedback button
Acorn221 May 10, 2025
310faf5
fix: roo code shizz not coming up
Acorn221 May 10, 2025
4bc4daa
feat: creator mode state management in roo
Acorn221 May 10, 2025
27ab389
chore: changed text
Acorn221 May 10, 2025
2a32e3f
Merge branch 'acorn/creator-rebase' into feat/creator-mode
Acorn221 May 10, 2025
a2258c6
Fixed error messaging
nang-dev May 10, 2025
9359712
Error message
nang-dev May 10, 2025
fc7378f
Typo
nang-dev May 10, 2025
9f68fc1
feat: added pear ai creator mode with backend only flag to not show i…
Acorn221 May 11, 2025
06686c6
fix: modes
Acorn221 May 11, 2025
c957cdd
fix: typo
Acorn221 May 11, 2025
b4c6936
fix: damn typo!
Acorn221 May 11, 2025
c14d26d
Added installer
nang-dev May 11, 2025
9e7bb24
fix: text color in plannin bar
Acorn221 May 12, 2025
115d0c8
feat: added gradient background to roo code + removed extra margin on…
Acorn221 May 12, 2025
291a9c0
fix: creator mode new tasks are also in creator mode
Acorn221 May 12, 2025
d3e62e0
rename roo rules (#80)
nang-dev May 12, 2025
1898b2c
rename roo rules (#80)
Himanshu-Singh-Chauhan May 12, 2025
20c294b
fix: new task
Acorn221 May 12, 2025
417daf3
Merge branch 'feat/creator-mode' into feat/creator-mode-rebased
Acorn221 May 12, 2025
cd2e60a
Use prod link
nang-dev May 12, 2025
f34eaf3
fix: only switch modes to webapp when we are making a webapp
Acorn221 May 12, 2025
d33a6db
Switch to pearai-creator-mode
nang-dev May 13, 2025
af7ad2b
Switch away from pearai-model-creator
nang-dev May 13, 2025
c9f086d
feat: include creator params in cline provider
Acorn221 May 13, 2025
380940d
fix: creator analytics
Acorn221 May 13, 2025
4b4718e
chore: enabling telemetry by default, hardcoding api key 😭
Acorn221 May 13, 2025
214c382
fix: identifying via pearai id
Acorn221 May 13, 2025
90a601d
fix: live indicator clipping
Acorn221 May 14, 2025
d9de442
fix: using posthog aliases
Acorn221 May 14, 2025
6aee669
feat(BREAKING): importing types from pearai submodule
Acorn221 May 14, 2025
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
3 changes: 3 additions & 0 deletions .vscodeignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ jest.*
.roomodes
.rooignore
.roo/**
.pearai-agent/**
.pearai-agent-ignore
.pearai-agent-modes
benchmark/**
cline_docs/**
e2e/**
Expand Down
93 changes: 93 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,7 @@
"@google/genai": "^0.9.0",
"@mistralai/mistralai": "^1.3.6",
"@modelcontextprotocol/sdk": "^1.7.0",
"@pearai/core": "file:./../pearai-submodule/core",
"@types/clone-deep": "^4.0.4",
"@types/pdf-parse": "^1.1.4",
"@types/tmp": "^0.2.6",
Expand Down
1 change: 1 addition & 0 deletions src/activate/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ export { handleUri } from "./handleUri"
export { registerCommands } from "./registerCommands"
export { registerCodeActions } from "./registerCodeActions"
export { registerTerminalActions } from "./registerTerminalActions"
export { registerPearListener } from "./registerPearListener"
115 changes: 115 additions & 0 deletions src/activate/registerPearListener.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import * as vscode from "vscode"
import { ClineProvider } from "../core/webview/ClineProvider"
import { assert } from "../utils/util"
import { PEARAI_CREATOR_MODE_WEBAPP_MANAGER_SLUG } from "../shared/modes"

export const getPearaiExtension = async () => {
const pearAiExtension = vscode.extensions.getExtension("pearai.pearai")

assert(!!pearAiExtension, "PearAI extension not found")

if (!pearAiExtension.isActive) {
await pearAiExtension.activate()
}

return pearAiExtension
}

// TODO: TYPES
export const getpearAIExports = async () => {
const pearAiExtension = await getPearaiExtension()

assert(!!pearAiExtension.exports, "⚠️⚠️ Error, no PearAI Exports could be found :( ⚠️⚠️");

return pearAiExtension.exports;
}

// TODO: SHOULD HAVE TYPE SYNCED WITH THE PEARAI SUBMODULE!
type CreatorModeState = "OVERLAY_CLOSED" | "OVERLAY_OPEN" | "OVERLAY_CLOSED_CREATOR_ACTIVE"

export const registerPearListener = async (provider: ClineProvider) => {
// Getting the pear ai extension instance
const exports = await getpearAIExports()

exports.pearAPI.creatorMode.onDidRequestExecutePlan(async (msg: any) => {
console.dir(`onDidRequestNewTask triggered with: ${JSON.stringify(msg)}`)

let canContinue = false;

while(!canContinue) {
await new Promise((resolve) => setTimeout(resolve, 10));
canContinue = provider.viewLaunched && provider.isViewLaunched;
}


// Get the sidebar provider
// Focus the sidebar first
await vscode.commands.executeCommand("pearai-roo-cline.SidebarProvider.focus")

// Wait for the view to be ready using a helper function
await ensureViewIsReady(provider)
// Wait a brief moment for UI to update
await new Promise((resolve) => setTimeout(resolve, 3000))

// * This does actually work but the UI update does not happen. This method calls this.postStateToWebview() so not sure what is going on - James
if(msg.newProjectType === "WEBAPP") {
// Only switch to the creator manager if we're creating a new project
// TODO: later when we need to make a different type of project, we need to change this
await provider.handleModeSwitch(PEARAI_CREATOR_MODE_WEBAPP_MANAGER_SLUG);
}

// Clicl the chat btn
await provider.postMessageToWebview({ type: "action", action: "chatButtonClicked" })

const creatorModeConfig = {
creatorMode: true,
newProjectType: msg.newProjectType,
newProjectPath: msg.newProjectPath,
}


// Initialize with task
await provider.initClineWithTask(msg.plan, undefined, undefined, undefined, creatorModeConfig);
});
// If there's a creator event in the cache after the extensions were refreshed, we need to get it!
exports.pearAPI.creatorMode.triggerCachedCreatorEvent(true);

exports.pearAPI.creatorMode.onDidChangeCreatorModeState(async (state: CreatorModeState) => {
// Get the sidebar provider
const sidebarProvider = ClineProvider.getVisibleInstance();

if (sidebarProvider) {
// Send a message to the webview that will trigger a window event
sidebarProvider.postMessageToWebview({
type: "creatorModeUpdate",
text: state,
});
}
});

}

// TODO: decide if this is needed
// Helper function to ensure the webview is ready
async function ensureViewIsReady(provider: ClineProvider): Promise<void> {
// If the view is already launched, we're good to go
if (provider.viewLaunched) {
return
}

// Otherwise, we need to wait for it to initialize
return new Promise<void>((resolve) => {
// Set up a one-time listener for when the view is ready
const disposable = provider.on("clineCreated", () => {
// Clean up the listener
disposable.dispose()
resolve()
})

// Set a timeout just in case
setTimeout(() => {
disposable.dispose()
resolve()
}, 5000)
})
}
13 changes: 11 additions & 2 deletions src/api/providers/anthropic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,18 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa
case "claude-3-opus-20240229":
case "claude-3-haiku-20240307":
betas.push("prompt-caching-2024-07-31")
// Include prompt_key if newProjectType is set
return {
headers: { "anthropic-beta": betas.join(",") },
authorization: `Bearer ${this.options.apiKey}`,
headers: {
"anthropic-beta": betas.join(","),
prompt_key: this.options.creatorModeConfig?.newProjectType
? String(this.options.creatorModeConfig.newProjectType)
: undefined,
project_path: this.options.creatorModeConfig?.newProjectPath
? String(this.options.creatorModeConfig.newProjectPath)
: undefined,
authorization: `Bearer ${this.options.apiKey}`,
},
}
default:
return undefined
Expand Down
41 changes: 23 additions & 18 deletions src/api/providers/pearai/pearai.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,28 +116,33 @@ export class PearAIHandler extends BaseProvider implements SingleCompletionHandl
}

async *createMessage(systemPrompt: string, messages: any[]): AsyncGenerator<any> {
const generator = this.handler.createMessage(systemPrompt, messages)
let warningMsg = ""
try {
const generator = this.handler.createMessage(systemPrompt, messages)
let warningMsg = ""

for await (const chunk of generator) {
console.dir(chunk)
if (chunk.type === "text" && chunk.metadata?.ui_only) {
warningMsg += chunk.metadata?.content
continue
for await (const chunk of generator) {
console.dir(chunk)
if (chunk.type === "text" && chunk.metadata?.ui_only) {
warningMsg += chunk.metadata?.content ?? ""
continue
}
yield chunk
}
yield chunk
}

if (warningMsg) {
if (warningMsg.includes("pay-as-you-go")) {
vscode.window.showInformationMessage(warningMsg, "View Pay-As-You-Go").then((selection) => {
if (selection === "View Pay-As-You-Go") {
vscode.env.openExternal(vscode.Uri.parse("https://trypear.ai/pay-as-you-go"))
}
})
} else {
vscode.window.showInformationMessage(warningMsg)
if (warningMsg) {
if (warningMsg.includes("pay-as-you-go")) {
vscode.window.showInformationMessage(warningMsg, "View Pay-As-You-Go").then((selection) => {
if (selection === "View Pay-As-You-Go") {
vscode.env.openExternal(vscode.Uri.parse("https://trypear.ai/pay-as-you-go"))
}
})
} else {
vscode.window.showInformationMessage(warningMsg)
}
}
} catch (e) {
const errorMessage = e instanceof Error ? e.message : String(e)
vscode.window.showWarningMessage(`Notice: ${errorMessage}`)
}
}

Expand Down
Loading
Loading