whipped 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +14 -13
- package/dist/web-ui/assets/{index-BOR6PC8f.js → index-Ce4HDOh7.js} +1 -0
- package/dist/web-ui/index.html +1 -1
- package/package.json +25 -14
package/README.md
CHANGED
|
@@ -194,7 +194,7 @@ Whipped can start a [Cloudflare Tunnel](https://developers.cloudflare.com/cloudf
|
|
|
194
194
|
|
|
195
195
|
A standalone Chrome/Chromium extension for capturing UI context off any web page. Click the toolbar icon to enter select mode, then click any element to capture its React component and source location. It builds a ready-to-paste **YAML prompt** for your AI coding agent — no server connection required.
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
Install from the [Chrome Web Store](https://chromewebstore.google.com/detail/codkafoociihebdklkpfjjoacenkkhci?utm_source=item-share-cb), or build from source at [github.com/nxnom/whipped-extension](https://github.com/nxnom/whipped-extension).
|
|
198
198
|
|
|
199
199
|
### Visual comments
|
|
200
200
|
|
package/dist/cli.js
CHANGED
|
@@ -22531,10 +22531,11 @@ ${devSystemPromptResult.text}`;
|
|
|
22531
22531
|
const conflictGitInstructions = conflictProjectConfig.gitInstructions?.trim() || DEFAULT_GIT_INSTRUCTIONS;
|
|
22532
22532
|
let outputBuffer = "";
|
|
22533
22533
|
let hookHandled = false;
|
|
22534
|
+
const conflictSystemPrompt = buildConflictResolutionSystemPrompt(card, conflictedFiles, conflictGitInstructions);
|
|
22534
22535
|
if (defaultAgent === "opencode") {
|
|
22535
22536
|
const mcpSpec = buildWhippedMcpServerSpec(getMcpServerPath(), this.options.serverUrl, workspaceId);
|
|
22536
22537
|
await writeOpencodeFiles(streamId, getServerPort(this.options.serverUrl), mcpSpec, {
|
|
22537
|
-
appendSystemPrompt:
|
|
22538
|
+
appendSystemPrompt: conflictSystemPrompt
|
|
22538
22539
|
}).catch(() => {
|
|
22539
22540
|
});
|
|
22540
22541
|
} else if (defaultAgent === "cursor") {
|
|
@@ -22544,7 +22545,7 @@ ${devSystemPromptResult.text}`;
|
|
|
22544
22545
|
}
|
|
22545
22546
|
const proc = spawnAgent({
|
|
22546
22547
|
agentId: defaultAgent,
|
|
22547
|
-
prompt:
|
|
22548
|
+
prompt: buildTaskPrompt(),
|
|
22548
22549
|
cwd: mergeWorktreePath,
|
|
22549
22550
|
hookSettingsPath: defaultAgent === "claude" ? CLAUDE_TASK_SETTINGS_PATH : void 0,
|
|
22550
22551
|
hookServerPort: defaultAgent === "codex" ? getServerPort(this.options.serverUrl) : void 0,
|
|
@@ -22553,7 +22554,7 @@ ${devSystemPromptResult.text}`;
|
|
|
22553
22554
|
...defaultAgent === "opencode" ? { [OPENCODE_CONFIG_DIR_ENV]: getOpencodeConfigDir(streamId) } : {},
|
|
22554
22555
|
...defaultAgent === "cursor" ? { [CURSOR_CONFIG_DIR_ENV]: getCursorConfigDir(streamId) } : {}
|
|
22555
22556
|
},
|
|
22556
|
-
appendSystemPrompt: defaultAgent !== "opencode" ?
|
|
22557
|
+
appendSystemPrompt: defaultAgent !== "opencode" ? conflictSystemPrompt : void 0,
|
|
22557
22558
|
onOutput: (data) => {
|
|
22558
22559
|
outputBuffer += data;
|
|
22559
22560
|
stateHub.broadcastTerminalOutput(workspaceId, streamId, data);
|
|
@@ -22715,27 +22716,27 @@ ${secretsSection}` : ""}${systemPrompt?.trim() ? `
|
|
|
22715
22716
|
|
|
22716
22717
|
${systemPrompt.trim()}` : ""}`;
|
|
22717
22718
|
}
|
|
22718
|
-
|
|
22719
|
+
function buildConflictResolutionSystemPrompt(card, conflictedFiles, gitInstructions) {
|
|
22720
|
+
return `You are a merge conflict resolution agent. Your only job is to resolve git merge conflicts.
|
|
22719
22721
|
|
|
22720
22722
|
Rules:
|
|
22721
22723
|
- Only edit files to remove conflict markers (<<<<<<< ======= >>>>>>>)
|
|
22722
22724
|
- Preserve the intent of BOTH sides where possible; when in doubt keep the incoming (task) changes
|
|
22723
22725
|
- Never refactor, rename, or change logic beyond resolving the conflict markers
|
|
22724
|
-
- Exit when done
|
|
22725
|
-
|
|
22726
|
-
|
|
22726
|
+
- Exit when done
|
|
22727
|
+
|
|
22728
|
+
## Task being merged
|
|
22727
22729
|
|
|
22728
|
-
Task being merged:
|
|
22729
22730
|
${card.description?.trim() ?? ""}
|
|
22730
22731
|
|
|
22731
|
-
Conflicted files
|
|
22732
|
+
## Conflicted files
|
|
22733
|
+
|
|
22732
22734
|
${conflictedFiles.map((f2) => `- ${f2}`).join("\n")}
|
|
22733
22735
|
|
|
22734
|
-
Resolve each conflict, preserving the task's intent. Then stage and commit
|
|
22735
|
-
the resolution. Write the commit message following the project's git
|
|
22736
|
-
conventions below \u2014 do not use a hard-coded template.
|
|
22736
|
+
Resolve each conflict, preserving the task's intent. Then stage and commit the resolution. Write the commit message following the project's git conventions below \u2014 do not use a hard-coded template.
|
|
22737
22737
|
|
|
22738
22738
|
## Git conventions
|
|
22739
|
+
|
|
22739
22740
|
${gitInstructions}`;
|
|
22740
22741
|
}
|
|
22741
22742
|
function buildTaskPrompt() {
|
|
@@ -28564,7 +28565,7 @@ process.on("uncaughtException", (err) => {
|
|
|
28564
28565
|
if (err.code === "EPIPE" || err.code === "ECONNRESET") return;
|
|
28565
28566
|
throw err;
|
|
28566
28567
|
});
|
|
28567
|
-
var VERSION9 = true ? "0.
|
|
28568
|
+
var VERSION9 = true ? "0.2.0" : "0.0.0-dev";
|
|
28568
28569
|
async function isPortAvailable(port, host) {
|
|
28569
28570
|
return new Promise((resolve5) => {
|
|
28570
28571
|
const probe = createServer2();
|
|
@@ -27186,6 +27186,7 @@ const EFFORT_OPTIONS = [
|
|
|
27186
27186
|
];
|
|
27187
27187
|
const MODEL_OPTIONS = {
|
|
27188
27188
|
claude: [
|
|
27189
|
+
{ value: "claude-fable-5", label: "Fable 5" },
|
|
27189
27190
|
{ value: "claude-opus-4-8", label: "Opus 4.8" },
|
|
27190
27191
|
{ value: "claude-opus-4-7", label: "Opus 4.7" },
|
|
27191
27192
|
{ value: "claude-opus-4-6", label: "Opus 4.6" },
|
package/dist/web-ui/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
7
7
|
<title>whipped</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-Ce4HDOh7.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-Dgu7Q26n.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "whipped",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Autonomous AI agent kanban board for Claude, Codex, Opencode, and Cursor.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -14,6 +14,20 @@
|
|
|
14
14
|
"engines": {
|
|
15
15
|
"node": ">=22"
|
|
16
16
|
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"clean": "rm -rf dist",
|
|
19
|
+
"build": "pnpm clean && pnpm web:build && node scripts/build.mjs",
|
|
20
|
+
"prepublishOnly": "pnpm build",
|
|
21
|
+
"postinstall": "node scripts/postinstall.mjs",
|
|
22
|
+
"dev": "NODE_ENV=development tsx src/cli.ts",
|
|
23
|
+
"dev:full": "node scripts/dev-full.mjs",
|
|
24
|
+
"web:dev": "pnpm --filter @whipped/web dev",
|
|
25
|
+
"web:build": "pnpm --filter @whipped/web build",
|
|
26
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
27
|
+
"web:typecheck": "pnpm --filter @whipped/web typecheck",
|
|
28
|
+
"lint": "biome lint src web-ui/src",
|
|
29
|
+
"format": "biome format --write ."
|
|
30
|
+
},
|
|
17
31
|
"dependencies": {
|
|
18
32
|
"@hono/zod-validator": "^0.8.0",
|
|
19
33
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
@@ -46,17 +60,14 @@
|
|
|
46
60
|
"tsx": "^4.20.3",
|
|
47
61
|
"typescript": "^5.9.3"
|
|
48
62
|
},
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"web:typecheck": "pnpm --filter @whipped/web typecheck",
|
|
59
|
-
"lint": "biome lint src web-ui/src",
|
|
60
|
-
"format": "biome format --write ."
|
|
63
|
+
"pnpm": {
|
|
64
|
+
"onlyBuiltDependencies": [
|
|
65
|
+
"better-sqlite3",
|
|
66
|
+
"esbuild",
|
|
67
|
+
"node-pty"
|
|
68
|
+
],
|
|
69
|
+
"overrides": {
|
|
70
|
+
"hono": "4.12.23"
|
|
71
|
+
}
|
|
61
72
|
}
|
|
62
|
-
}
|
|
73
|
+
}
|