sparkecoder 0.1.114 → 0.1.115

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.
Files changed (107) hide show
  1. package/dist/agent/index.d.ts +3 -3
  2. package/dist/cli.js +156 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/db/index.d.ts +2 -2
  5. package/dist/{index-Bi8Ek02A.d.ts → index-Biy5JTop.d.ts} +104 -104
  6. package/dist/index.d.ts +5 -5
  7. package/dist/{schema-ecQSnCMz.d.ts → schema-CYSKJZ3m.d.ts} +3 -3
  8. package/dist/{search-DOzC4ojH.d.ts → search-CVVfuBPZ.d.ts} +4 -4
  9. package/dist/skills/default/computer-use.md +20 -13
  10. package/dist/skills/default/recording.md +66 -42
  11. package/dist/tools/index.d.ts +3 -3
  12. package/package.json +1 -1
  13. package/src/skills/default/computer-use.md +20 -13
  14. package/src/skills/default/recording.md +66 -42
  15. package/web/.next/BUILD_ID +1 -1
  16. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  17. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  18. package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
  19. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  20. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  21. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  22. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  23. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  24. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  25. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  26. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  27. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
  28. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  29. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  30. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  31. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  32. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  33. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  34. package/web/.next/standalone/web/.next/server/app/agents.html +1 -1
  35. package/web/.next/standalone/web/.next/server/app/agents.rsc +1 -1
  36. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
  37. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
  38. package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +1 -1
  39. package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +1 -1
  40. package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  41. package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +1 -1
  42. package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
  43. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  44. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
  45. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
  46. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  47. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
  48. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
  49. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  50. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  51. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  52. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  53. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
  54. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
  55. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  56. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
  57. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
  58. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  59. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  60. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  61. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  62. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
  63. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
  64. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  65. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
  66. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
  67. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  68. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  69. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  70. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  71. package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
  72. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  73. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  74. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  75. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  76. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  77. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  78. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  79. package/web/.next/standalone/web/.next/server/app/index.rsc +1 -1
  80. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
  81. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
  82. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
  83. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  84. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
  85. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  86. package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
  87. package/web/.next/standalone/web/.next/server/app/settings.rsc +1 -1
  88. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +1 -1
  89. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +1 -1
  90. package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +1 -1
  91. package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  92. package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  93. package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  94. package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  95. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  96. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  97. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  98. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  99. /package/web/.next/standalone/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_buildManifest.js +0 -0
  100. /package/web/.next/standalone/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_clientMiddlewareManifest.json +0 -0
  101. /package/web/.next/standalone/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_ssgManifest.js +0 -0
  102. /package/web/.next/standalone/web/.next/static/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_buildManifest.js +0 -0
  103. /package/web/.next/standalone/web/.next/static/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_clientMiddlewareManifest.json +0 -0
  104. /package/web/.next/standalone/web/.next/static/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_ssgManifest.js +0 -0
  105. /package/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_buildManifest.js +0 -0
  106. /package/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_clientMiddlewareManifest.json +0 -0
  107. /package/web/.next/static/{N09EiHl0JwEgsGMdCtwpB → pSGgtxBjN5_o0YHZgQzXm}/_ssgManifest.js +0 -0
@@ -1,6 +1,6 @@
1
1
  import 'ai';
2
- import '../schema-ecQSnCMz.js';
3
- export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, C as ContextManager, M as MessageAttachment, d as buildSystemPrompt, e as buildTaskPromptAddendum } from '../index-Bi8Ek02A.js';
4
- import '../search-DOzC4ojH.js';
2
+ import '../schema-CYSKJZ3m.js';
3
+ export { A as Agent, a as AgentOptions, b as AgentRunOptions, c as AgentStreamResult, C as ContextManager, M as MessageAttachment, d as buildSystemPrompt, e as buildTaskPromptAddendum } from '../index-Biy5JTop.js';
4
+ import '../search-CVVfuBPZ.js';
5
5
  import 'drizzle-orm/sqlite-core';
6
6
  import 'zod';
package/dist/cli.js CHANGED
@@ -16422,7 +16422,7 @@ function generateOpenAPISpec() {
16422
16422
  init_config();
16423
16423
  init_semantic();
16424
16424
  init_db();
16425
- import { writeFileSync as writeFileSync6, readFileSync as readFileSync10, existsSync as existsSync21 } from "fs";
16425
+ import { mkdirSync as mkdirSync10, writeFileSync as writeFileSync6, readFileSync as readFileSync10, existsSync as existsSync21, statSync as statSync3 } from "fs";
16426
16426
  import { resolve as resolve12, join as join16 } from "path";
16427
16427
  function getCliVersion() {
16428
16428
  const here = dirname8(fileURLToPath5(import.meta.url));
@@ -18026,5 +18026,160 @@ program.command("request-permissions").description("Request macOS permissions fo
18026
18026
  }
18027
18027
  console.log();
18028
18028
  });
18029
+ {
18030
+ let stateFilePath = function() {
18031
+ return join16(ensureAppDataDirectory(), "recordings.json");
18032
+ }, readState = function() {
18033
+ const p = stateFilePath();
18034
+ if (!existsSync21(p)) return [];
18035
+ try {
18036
+ return JSON.parse(readFileSync10(p, "utf-8"));
18037
+ } catch {
18038
+ return [];
18039
+ }
18040
+ }, writeState = function(rows) {
18041
+ writeFileSync6(stateFilePath(), JSON.stringify(rows, null, 2), { mode: 384 });
18042
+ }, isAlive = function(pid) {
18043
+ try {
18044
+ process.kill(pid, 0);
18045
+ return true;
18046
+ } catch {
18047
+ return false;
18048
+ }
18049
+ }, pruneDead = function(rows) {
18050
+ return rows.filter((r) => isAlive(r.pid));
18051
+ };
18052
+ stateFilePath2 = stateFilePath, readState2 = readState, writeState2 = writeState, isAlive2 = isAlive, pruneDead2 = pruneDead;
18053
+ const record = program.command("record").description("Start/stop screen recordings");
18054
+ 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) => {
18055
+ const { spawn: spawn3 } = await import("child_process");
18056
+ const { homedir: homedir2, platform: osPlatform } = await import("os");
18057
+ const outDir = opts.dir ? resolve12(opts.dir.replace(/^~/, homedir2())) : join16(homedir2(), "recordings");
18058
+ mkdirSync10(outDir, { recursive: true });
18059
+ const id = `rec-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
18060
+ const ext = osPlatform() === "darwin" ? "mov" : "mp4";
18061
+ const filename = `${id}${opts.name ? `-${String(opts.name).replace(/[^a-z0-9-]+/gi, "-").toLowerCase()}` : ""}.${ext}`;
18062
+ const path = join16(outDir, filename);
18063
+ let cmd;
18064
+ let args;
18065
+ if (osPlatform() === "darwin") {
18066
+ cmd = "screencapture";
18067
+ args = ["-v", "-C", "-k", path];
18068
+ } else if (osPlatform() === "linux") {
18069
+ const display = process.env.DISPLAY || ":0.0";
18070
+ const size = process.env.SPARKECODER_RECORD_SIZE || "1920x1080";
18071
+ cmd = "ffmpeg";
18072
+ args = [
18073
+ "-y",
18074
+ "-f",
18075
+ "x11grab",
18076
+ "-framerate",
18077
+ "25",
18078
+ "-video_size",
18079
+ size,
18080
+ "-i",
18081
+ display,
18082
+ "-c:v",
18083
+ "libx264",
18084
+ "-preset",
18085
+ "veryfast",
18086
+ "-pix_fmt",
18087
+ "yuv420p",
18088
+ path
18089
+ ];
18090
+ } else {
18091
+ console.error(JSON.stringify({ error: `Unsupported platform: ${osPlatform()}` }));
18092
+ process.exit(1);
18093
+ }
18094
+ const child = spawn3(cmd, args, { detached: true, stdio: "ignore" });
18095
+ child.unref();
18096
+ if (!child.pid) {
18097
+ console.error(JSON.stringify({ error: `Failed to spawn ${cmd}` }));
18098
+ process.exit(1);
18099
+ }
18100
+ const row = {
18101
+ id,
18102
+ name: opts.name,
18103
+ path,
18104
+ pid: child.pid,
18105
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
18106
+ platform: osPlatform()
18107
+ };
18108
+ const rows = pruneDead(readState());
18109
+ rows.push(row);
18110
+ writeState(rows);
18111
+ console.log(JSON.stringify({ id, path, pid: child.pid, platform: osPlatform() }));
18112
+ });
18113
+ record.command("stop <id>").description("Stop a recording started by `sparkecoder record start`").action(async (id) => {
18114
+ const rows = readState();
18115
+ const row = rows.find((r) => r.id === id);
18116
+ if (!row) {
18117
+ console.error(JSON.stringify({ error: `No recording found with id ${id}` }));
18118
+ process.exit(1);
18119
+ }
18120
+ const startedAt = new Date(row.startedAt).getTime();
18121
+ if (isAlive(row.pid)) {
18122
+ try {
18123
+ process.kill(row.pid, "SIGINT");
18124
+ } catch {
18125
+ }
18126
+ for (let i = 0; i < 40; i++) {
18127
+ if (!isAlive(row.pid)) break;
18128
+ await new Promise((r) => setTimeout(r, 200));
18129
+ }
18130
+ if (isAlive(row.pid)) {
18131
+ try {
18132
+ process.kill(row.pid, "SIGTERM");
18133
+ } catch {
18134
+ }
18135
+ }
18136
+ }
18137
+ writeState(rows.filter((r) => r.id !== id));
18138
+ const fileExists = existsSync21(row.path);
18139
+ const sizeMb = fileExists ? Math.round(statSync3(row.path).size / (1024 * 1024) * 10) / 10 : 0;
18140
+ console.log(JSON.stringify({
18141
+ id,
18142
+ path: row.path,
18143
+ durationSec: Math.round((Date.now() - startedAt) / 1e3),
18144
+ sizeMb,
18145
+ ok: fileExists
18146
+ }));
18147
+ });
18148
+ record.command("list").description("List active recordings").action(() => {
18149
+ const rows = pruneDead(readState());
18150
+ writeState(rows);
18151
+ console.log(JSON.stringify(rows, null, 2));
18152
+ });
18153
+ record.command("stop-all").description("Stop every active recording").action(async () => {
18154
+ const rows = readState();
18155
+ const stopped = [];
18156
+ for (const r of rows) {
18157
+ if (isAlive(r.pid)) {
18158
+ try {
18159
+ process.kill(r.pid, "SIGINT");
18160
+ } catch {
18161
+ }
18162
+ for (let i = 0; i < 30; i++) {
18163
+ if (!isAlive(r.pid)) break;
18164
+ await new Promise((res) => setTimeout(res, 200));
18165
+ }
18166
+ if (isAlive(r.pid)) {
18167
+ try {
18168
+ process.kill(r.pid, "SIGTERM");
18169
+ } catch {
18170
+ }
18171
+ }
18172
+ }
18173
+ stopped.push({ id: r.id, path: r.path, ok: existsSync21(r.path) });
18174
+ }
18175
+ writeState([]);
18176
+ console.log(JSON.stringify({ stopped }));
18177
+ });
18178
+ }
18179
+ var stateFilePath2;
18180
+ var readState2;
18181
+ var writeState2;
18182
+ var isAlive2;
18183
+ var pruneDead2;
18029
18184
  program.parse();
18030
18185
  //# sourceMappingURL=cli.js.map