sparkecoder 0.1.116 → 0.1.117
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/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.js +20 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +56 -6
- package/dist/cli.js.map +1 -1
- package/dist/db/index.d.ts +2 -2
- package/dist/{index-Biy5JTop.d.ts → index-Bi8Ek02A.d.ts} +104 -104
- package/dist/index.d.ts +5 -5
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/{schema-CYSKJZ3m.d.ts → schema-ecQSnCMz.d.ts} +3 -3
- package/dist/{search-CVVfuBPZ.d.ts → search-DOzC4ojH.d.ts} +4 -4
- package/dist/server/index.js +20 -0
- package/dist/server/index.js.map +1 -1
- package/dist/tools/index.d.ts +3 -3
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.html +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/web/.next/server/app/index.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
- /package/web/.next/standalone/web/.next/static/{7tYFi20tEUZNGXmy2DJ1K → static/vLqK4jK7EKdLCpQ-D6-qL}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{7tYFi20tEUZNGXmy2DJ1K → static/vLqK4jK7EKdLCpQ-D6-qL}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{7tYFi20tEUZNGXmy2DJ1K → static/vLqK4jK7EKdLCpQ-D6-qL}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{static/7tYFi20tEUZNGXmy2DJ1K → vLqK4jK7EKdLCpQ-D6-qL}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{static/7tYFi20tEUZNGXmy2DJ1K → vLqK4jK7EKdLCpQ-D6-qL}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{static/7tYFi20tEUZNGXmy2DJ1K → vLqK4jK7EKdLCpQ-D6-qL}/_ssgManifest.js +0 -0
- /package/web/.next/static/{7tYFi20tEUZNGXmy2DJ1K → vLqK4jK7EKdLCpQ-D6-qL}/_buildManifest.js +0 -0
- /package/web/.next/static/{7tYFi20tEUZNGXmy2DJ1K → vLqK4jK7EKdLCpQ-D6-qL}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{7tYFi20tEUZNGXmy2DJ1K → vLqK4jK7EKdLCpQ-D6-qL}/_ssgManifest.js +0 -0
package/dist/cli.js
CHANGED
|
@@ -8410,6 +8410,26 @@ When you spawn a **desktop worker**, include a one-liner in the goal asking it t
|
|
|
8410
8410
|
|
|
8411
8411
|
Default bias: **when in doubt, decompose**. Two workers running in parallel and reporting independently is almost always better UX than one worker doing things sequentially.
|
|
8412
8412
|
|
|
8413
|
+
### How to TALK to the user (versus how you reason internally)
|
|
8414
|
+
|
|
8415
|
+
All of the rules below \u2014 decomposition, parallel spawning, "don't invent commands", load-the-skill, etc. \u2014 are **your internal operating procedure**. They are how you decide what to do. They are NOT something to recite back to the user.
|
|
8416
|
+
|
|
8417
|
+
When replying to the user (Slack, web, or any channel), be a normal helpful assistant:
|
|
8418
|
+
|
|
8419
|
+
- Tell them *what you're doing*, not *how you're doing it internally*.
|
|
8420
|
+
- Don't quote your own prompt language ("just the goal", "read the skill", "no step-by-step from me", "decomposing into parallel workers"). The user doesn't care about your delegation pattern.
|
|
8421
|
+
- Don't narrate "handing off to a worker now" unless it's actually relevant (e.g. they asked how you work, or the work is going to take a noticeably long time).
|
|
8422
|
+
- Skip ceremony. A short acknowledgement + a brief description of the actual task + (optionally) a heads-up if there's anything they need to do or avoid is plenty.
|
|
8423
|
+
|
|
8424
|
+
| What you might be tempted to say | What you should say instead |
|
|
8425
|
+
|---|---|
|
|
8426
|
+
| *"Got it \u2014 handing it off with just the goal + 'read the skills and figure it out.' No step-by-step from me."* | *"On it. Recording a screen capture of the Weather app showing Anchorage. Don't touch the keyboard while it's running \u2014 I'll post the video when it's done."* |
|
|
8427
|
+
| *"Decomposing into two parallel workers: one headless, one desktop."* | *"Running the tests and pulling the diff at the same time. Back in ~30s."* |
|
|
8428
|
+
| *"Spawning worker \`screenshot-calc\` with goal: \u2026"* | *"Taking a screenshot of Calculator now."* |
|
|
8429
|
+
| *"I'll relay the user's instructions to the worker verbatim."* | *(say nothing \u2014 just do it)* |
|
|
8430
|
+
|
|
8431
|
+
If the user explicitly asks how you work, *then* you can explain the orchestrator/worker split. Otherwise: less is more.
|
|
8432
|
+
|
|
8413
8433
|
### How to write a worker goal (and what NOT to put in it)
|
|
8414
8434
|
|
|
8415
8435
|
You delegate; the worker executes. Stay at the **what** level, not the **how**.
|
|
@@ -18281,7 +18301,6 @@ program.command("request-permissions").description("Request macOS permissions fo
|
|
|
18281
18301
|
stateFilePath2 = stateFilePath, readState2 = readState, writeState2 = writeState, isAlive2 = isAlive, pruneDead2 = pruneDead;
|
|
18282
18302
|
const record = program.command("record").description("Start/stop screen recordings");
|
|
18283
18303
|
record.command("start").description("Start a screen recording (returns id, path, pid as JSON)").option("--name <slug>", "Optional human-readable label for the recording").option("--dir <path>", "Output directory (default: ~/recordings)").action(async (opts) => {
|
|
18284
|
-
const { spawn: spawn3 } = await import("child_process");
|
|
18285
18304
|
const { homedir: homedir2, platform: osPlatform } = await import("os");
|
|
18286
18305
|
const outDir = opts.dir ? resolve12(opts.dir.replace(/^~/, homedir2())) : join17(homedir2(), "recordings");
|
|
18287
18306
|
mkdirSync11(outDir, { recursive: true });
|
|
@@ -18292,7 +18311,7 @@ program.command("request-permissions").description("Request macOS permissions fo
|
|
|
18292
18311
|
let cmd;
|
|
18293
18312
|
let args;
|
|
18294
18313
|
if (osPlatform() === "darwin") {
|
|
18295
|
-
cmd = "screencapture";
|
|
18314
|
+
cmd = existsSync22("/usr/sbin/screencapture") ? "/usr/sbin/screencapture" : "screencapture";
|
|
18296
18315
|
args = ["-v", "-C", "-k", path];
|
|
18297
18316
|
} else if (osPlatform() === "linux") {
|
|
18298
18317
|
const display = process.env.DISPLAY || ":0.0";
|
|
@@ -18320,12 +18339,43 @@ program.command("request-permissions").description("Request macOS permissions fo
|
|
|
18320
18339
|
console.error(JSON.stringify({ error: `Unsupported platform: ${osPlatform()}` }));
|
|
18321
18340
|
process.exit(1);
|
|
18322
18341
|
}
|
|
18323
|
-
const
|
|
18324
|
-
child
|
|
18325
|
-
|
|
18326
|
-
|
|
18342
|
+
const { spawn: spawnRec } = await import("child_process");
|
|
18343
|
+
const child = spawnRec(cmd, args, { detached: true, stdio: ["ignore", "ignore", "pipe"] });
|
|
18344
|
+
let stderrTail = "";
|
|
18345
|
+
child.stderr?.on("data", (b) => {
|
|
18346
|
+
stderrTail = (stderrTail + b.toString()).slice(-2e3);
|
|
18347
|
+
});
|
|
18348
|
+
let spawnError = null;
|
|
18349
|
+
child.on("error", (err) => {
|
|
18350
|
+
spawnError = err?.message ?? String(err);
|
|
18351
|
+
});
|
|
18352
|
+
let exited = false;
|
|
18353
|
+
let exitCode = null;
|
|
18354
|
+
child.on("exit", (code) => {
|
|
18355
|
+
exited = true;
|
|
18356
|
+
exitCode = code;
|
|
18357
|
+
});
|
|
18358
|
+
await new Promise((r) => setTimeout(r, 600));
|
|
18359
|
+
if (spawnError || exited || !child.pid) {
|
|
18360
|
+
const diagnosis = [
|
|
18361
|
+
spawnError && `spawn error: ${spawnError}`,
|
|
18362
|
+
exited && `recorder exited code=${exitCode} within 600ms`,
|
|
18363
|
+
stderrTail.trim() && `stderr: ${stderrTail.trim()}`,
|
|
18364
|
+
osPlatform() === "darwin" && `tried: ${cmd} ${args.join(" ")}`,
|
|
18365
|
+
osPlatform() === "darwin" && `if missing Screen Recording permission, run: sparkecoder request-permissions`,
|
|
18366
|
+
osPlatform() === "linux" && `display=${process.env.DISPLAY || ":0.0"} \u2014 ensure X server is running and ffmpeg is installed`
|
|
18367
|
+
].filter(Boolean).join(". ");
|
|
18368
|
+
console.error(JSON.stringify({
|
|
18369
|
+
error: `Failed to start ${cmd}`,
|
|
18370
|
+
detail: diagnosis || "(no diagnostic output)",
|
|
18371
|
+
cmd,
|
|
18372
|
+
args,
|
|
18373
|
+
pid: child.pid,
|
|
18374
|
+
exitCode
|
|
18375
|
+
}));
|
|
18327
18376
|
process.exit(1);
|
|
18328
18377
|
}
|
|
18378
|
+
child.unref();
|
|
18329
18379
|
const row = {
|
|
18330
18380
|
id,
|
|
18331
18381
|
name: opts.name,
|