openfox 1.6.16 → 1.6.18

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 (31) hide show
  1. package/dist/{auto-compaction-2RKC6DC2.js → auto-compaction-A657A2UQ.js} +5 -5
  2. package/dist/{chat-handler-IY2XVOO6.js → chat-handler-2NXHPPMS.js} +9 -9
  3. package/dist/{chunk-4OI4VPZ6.js → chunk-6TWWJIFP.js} +64 -49
  4. package/dist/{chunk-F54ZJN4X.js → chunk-AV45GQ7B.js} +4 -4
  5. package/dist/{chunk-NJWPSSRW.js → chunk-DZHZ3UUR.js} +4 -4
  6. package/dist/{chunk-2KP34IDL.js → chunk-EEPU4INU.js} +4 -2
  7. package/dist/{chunk-U54QVKL2.js → chunk-KCJC3VBS.js} +4 -4
  8. package/dist/{chunk-6L3X7T4K.js → chunk-PMDJEJYY.js} +2 -2
  9. package/dist/{chunk-T5PBG2PE.js → chunk-THP77DXS.js} +2 -2
  10. package/dist/{chunk-NN65D5SI.js → chunk-WRFOMNHM.js} +80 -134
  11. package/dist/{chunk-SN7OBEVL.js → chunk-ZGTXED6Q.js} +3 -3
  12. package/dist/cli/dev.js +1 -1
  13. package/dist/cli/index.js +1 -1
  14. package/dist/{events-2ETDOE5B.js → events-LI4NAFRZ.js} +3 -3
  15. package/dist/{folding-M7FMUBOL.js → folding-HRZMWP4H.js} +2 -2
  16. package/dist/{orchestrator-U5VCLBYQ.js → orchestrator-VWMGHSCG.js} +6 -6
  17. package/dist/package.json +2 -2
  18. package/dist/{processor-VUEJM73B.js → processor-7TH3ATDK.js} +7 -7
  19. package/dist/{protocol-KUKFSV5U.js → protocol-YNVBDNL7.js} +2 -2
  20. package/dist/{serve-GOLQMQFA.js → serve-KMTRAQ4F.js} +8 -8
  21. package/dist/server/index.js +7 -7
  22. package/dist/{tools-55YICCVH.js → tools-F7RWE4YI.js} +5 -5
  23. package/dist/web/assets/{index-D4V7Gtvt.css → index-CcnXf371.css} +1 -1
  24. package/dist/web/assets/{index-CZBXRYpK.js → index-DwDDssmB.js} +45 -45
  25. package/dist/web/index.html +2 -2
  26. package/dist/web/sw.js +1 -1
  27. package/package.json +2 -2
  28. /package/dist/{server/commands/defaults → command-defaults}/commit-push.command.md +0 -0
  29. /package/dist/{server/commands/defaults → command-defaults}/init.command.md +0 -0
  30. /package/dist/{server/commands/defaults → command-defaults}/test-ui.command.md +0 -0
  31. /package/dist/{server/skills/defaults → skill-defaults}/browser.skill.md +0 -0
@@ -2,13 +2,13 @@ import {
2
2
  maybeAutoCompactContext,
3
3
  performManualContextCompaction,
4
4
  resolveCompactionStatsIdentity
5
- } from "./chunk-4OI4VPZ6.js";
5
+ } from "./chunk-6TWWJIFP.js";
6
6
  import "./chunk-NBU6KIOD.js";
7
7
  import "./chunk-574HZVLE.js";
8
8
  import "./chunk-55N6FAAZ.js";
9
- import "./chunk-6L3X7T4K.js";
10
- import "./chunk-2KP34IDL.js";
11
- import "./chunk-NJWPSSRW.js";
9
+ import "./chunk-PMDJEJYY.js";
10
+ import "./chunk-EEPU4INU.js";
11
+ import "./chunk-DZHZ3UUR.js";
12
12
  import "./chunk-22CTURMH.js";
13
13
  import "./chunk-7IOZFJBW.js";
14
14
  import "./chunk-XKFPU2FA.js";
@@ -22,4 +22,4 @@ export {
22
22
  performManualContextCompaction,
23
23
  resolveCompactionStatsIdentity
24
24
  };
25
- //# sourceMappingURL=auto-compaction-2RKC6DC2.js.map
25
+ //# sourceMappingURL=auto-compaction-A657A2UQ.js.map
@@ -2,28 +2,28 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  getSessionMessageCount
5
- } from "./chunk-SN7OBEVL.js";
5
+ } from "./chunk-ZGTXED6Q.js";
6
6
  import {
7
7
  applyGeneratedSessionName,
8
8
  generateSessionName,
9
9
  needsNameGenerationCheck
10
- } from "./chunk-F54ZJN4X.js";
10
+ } from "./chunk-AV45GQ7B.js";
11
11
  import {
12
12
  runChatTurn
13
- } from "./chunk-U54QVKL2.js";
14
- import "./chunk-4OI4VPZ6.js";
13
+ } from "./chunk-KCJC3VBS.js";
14
+ import "./chunk-6TWWJIFP.js";
15
15
  import "./chunk-NBU6KIOD.js";
16
16
  import "./chunk-574HZVLE.js";
17
17
  import "./chunk-55N6FAAZ.js";
18
18
  import {
19
19
  getEventStore
20
- } from "./chunk-6L3X7T4K.js";
21
- import "./chunk-2KP34IDL.js";
20
+ } from "./chunk-PMDJEJYY.js";
21
+ import "./chunk-EEPU4INU.js";
22
22
  import {
23
23
  createChatMessageMessage,
24
24
  createPhaseChangedMessage,
25
25
  createSessionRunningMessage
26
- } from "./chunk-NJWPSSRW.js";
26
+ } from "./chunk-DZHZ3UUR.js";
27
27
  import "./chunk-22CTURMH.js";
28
28
  import "./chunk-7IOZFJBW.js";
29
29
  import "./chunk-XKFPU2FA.js";
@@ -61,7 +61,7 @@ async function startChatSession(sessionId, content, deps, options) {
61
61
  sessionManager.setRunning(sessionId, true);
62
62
  broadcastForSession(sessionId, createSessionRunningMessage(true));
63
63
  try {
64
- const { maybeAutoCompactContext } = await import("./auto-compaction-2RKC6DC2.js");
64
+ const { maybeAutoCompactContext } = await import("./auto-compaction-A657A2UQ.js");
65
65
  await maybeAutoCompactContext({
66
66
  sessionManager,
67
67
  sessionId,
@@ -170,4 +170,4 @@ export {
170
170
  startChatSession,
171
171
  stopSessionExecution
172
172
  };
173
- //# sourceMappingURL=chat-handler-IY2XVOO6.js.map
173
+ //# sourceMappingURL=chat-handler-2NXHPPMS.js.map
@@ -18,7 +18,7 @@ import {
18
18
  getContextMessages,
19
19
  getCurrentContextWindowId,
20
20
  getEventStore
21
- } from "./chunk-6L3X7T4K.js";
21
+ } from "./chunk-PMDJEJYY.js";
22
22
  import {
23
23
  createChatDoneMessage,
24
24
  createChatMessageMessage,
@@ -27,7 +27,7 @@ import {
27
27
  createChatToolOutputMessage,
28
28
  createChatVisionFallbackMessage,
29
29
  createQueueStateMessage
30
- } from "./chunk-NJWPSSRW.js";
30
+ } from "./chunk-DZHZ3UUR.js";
31
31
  import {
32
32
  AskUserInterrupt,
33
33
  askUserTool
@@ -2477,19 +2477,16 @@ function createToolProgressHandler(messageId, callId, onMessage) {
2477
2477
  }
2478
2478
 
2479
2479
  // src/server/skills/registry.ts
2480
- import { readdir as readdir2, readFile as readFile6, writeFile as writeFile4, mkdir as mkdir3, access as access3, unlink as unlink2 } from "fs/promises";
2481
- import { join as join4, dirname as dirname4 } from "path";
2482
- import { constants as constants3 } from "fs";
2480
+ import { writeFile as writeFile4, mkdir as mkdir3, unlink as unlink2 } from "fs/promises";
2481
+ import { join as join5, dirname as dirname4 } from "path";
2483
2482
  import { fileURLToPath as fileURLToPath2 } from "url";
2483
+ import matter3 from "gray-matter";
2484
+
2485
+ // src/server/shared/item-loader.ts
2486
+ import { readdir as readdir2, readFile as readFile6, access as access3 } from "fs/promises";
2487
+ import { join as join4 } from "path";
2488
+ import { constants as constants3 } from "fs";
2484
2489
  import matter2 from "gray-matter";
2485
- var __bundleDir2 = dirname4(fileURLToPath2(import.meta.url));
2486
- var DEFAULTS_DIR2 = join4(__bundleDir2, "defaults");
2487
- var DEFAULTS_DIR_ALT2 = join4(__bundleDir2, "skill-defaults");
2488
- var SKILL_EXTENSION = ".skill.md";
2489
- var SKILL_SETTING_PREFIX = "skill.enabled.";
2490
- function getSkillsDir(configDir) {
2491
- return join4(configDir, "skills");
2492
- }
2493
2490
  async function pathExists2(path) {
2494
2491
  try {
2495
2492
  await access3(path, constants3.R_OK);
@@ -2498,51 +2495,74 @@ async function pathExists2(path) {
2498
2495
  return false;
2499
2496
  }
2500
2497
  }
2501
- async function loadDefaultSkills() {
2502
- let defaults = [];
2498
+ async function getDefaultIds(dir, extension) {
2503
2499
  try {
2504
- defaults = await loadSkillsFromDir(DEFAULTS_DIR2);
2500
+ const files = (await readdir2(dir)).filter((f) => f.endsWith(extension));
2501
+ return files.map((f) => f.replace(extension, ""));
2505
2502
  } catch {
2503
+ return [];
2506
2504
  }
2507
- if (!defaults.length) {
2508
- try {
2509
- defaults = await loadSkillsFromDir(DEFAULTS_DIR_ALT2);
2510
- } catch {
2511
- }
2512
- }
2513
- return defaults;
2514
2505
  }
2515
- async function loadSkillsFromDir(dir) {
2506
+ async function loadItemsFromDir(dir, options) {
2516
2507
  if (!await pathExists2(dir)) {
2517
2508
  return [];
2518
2509
  }
2519
2510
  let files;
2520
2511
  try {
2521
- files = (await readdir2(dir)).filter((f) => f.endsWith(SKILL_EXTENSION));
2512
+ files = (await readdir2(dir)).filter((f) => f.endsWith(options.extension));
2522
2513
  } catch {
2523
2514
  return [];
2524
2515
  }
2525
- const skills = [];
2516
+ const items = [];
2526
2517
  for (const file of files) {
2527
2518
  try {
2528
2519
  const raw = await readFile6(join4(dir, file), "utf-8");
2529
2520
  const { data, content } = matter2(raw);
2530
2521
  if (data.id && content.trim()) {
2531
- skills.push({
2522
+ items.push({
2532
2523
  metadata: data,
2533
2524
  prompt: content.trim()
2534
2525
  });
2535
2526
  } else {
2536
- logger.warn("Skipping invalid skill file", { file });
2527
+ logger.warn(`Skipping invalid ${options.logName} file`, { file });
2537
2528
  }
2538
2529
  } catch (err) {
2539
- logger.warn("Failed to parse skill file", { file, error: err instanceof Error ? err.message : String(err) });
2530
+ logger.warn(`Failed to parse ${options.logName} file`, {
2531
+ file,
2532
+ error: err instanceof Error ? err.message : String(err)
2533
+ });
2540
2534
  }
2541
2535
  }
2542
- return skills;
2536
+ return items;
2537
+ }
2538
+
2539
+ // src/server/skills/registry.ts
2540
+ var __bundleDir2 = dirname4(fileURLToPath2(import.meta.url));
2541
+ var DEFAULTS_DIR2 = join5(__bundleDir2, "defaults");
2542
+ var DEFAULTS_DIR_ALT2 = join5(__bundleDir2, "skill-defaults");
2543
+ var SKILL_EXTENSION = ".skill.md";
2544
+ var SKILL_SETTING_PREFIX = "skill.enabled.";
2545
+ function getSkillsDir(configDir) {
2546
+ return join5(configDir, "skills");
2547
+ }
2548
+ async function loadDefaultSkills() {
2549
+ let defaults = await loadItemsFromDir(DEFAULTS_DIR2, {
2550
+ extension: SKILL_EXTENSION,
2551
+ logName: "skill"
2552
+ });
2553
+ if (!defaults.length) {
2554
+ defaults = await loadItemsFromDir(DEFAULTS_DIR_ALT2, {
2555
+ extension: SKILL_EXTENSION,
2556
+ logName: "skill"
2557
+ });
2558
+ }
2559
+ return defaults;
2543
2560
  }
2544
2561
  async function loadUserSkills(configDir) {
2545
- return loadSkillsFromDir(getSkillsDir(configDir));
2562
+ return loadItemsFromDir(getSkillsDir(configDir), {
2563
+ extension: SKILL_EXTENSION,
2564
+ logName: "skill"
2565
+ });
2546
2566
  }
2547
2567
  async function loadAllSkills(configDir) {
2548
2568
  const [defaultSkills, userSkills] = await Promise.all([
@@ -2574,14 +2594,6 @@ function isSkillEnabled(skillId) {
2574
2594
  function setSkillEnabled(skillId, enabled) {
2575
2595
  setSetting(`${SKILL_SETTING_PREFIX}${skillId}`, String(enabled));
2576
2596
  }
2577
- async function getDefaultIds(dir, extension) {
2578
- try {
2579
- const files = (await readdir2(dir)).filter((f) => f.endsWith(extension));
2580
- return files.map((f) => f.replace(extension, ""));
2581
- } catch {
2582
- return [];
2583
- }
2584
- }
2585
2597
  async function getDefaultSkillIds() {
2586
2598
  const ids = await getDefaultIds(DEFAULTS_DIR2, SKILL_EXTENSION);
2587
2599
  if (ids.length) return ids;
@@ -2599,15 +2611,15 @@ function findSkillById(skillId, skills) {
2599
2611
  return skills.find((s) => s.metadata.id === skillId);
2600
2612
  }
2601
2613
  async function skillExists(configDir, skillId) {
2602
- return pathExists2(join4(getSkillsDir(configDir), `${skillId}${SKILL_EXTENSION}`));
2614
+ return pathExists2(join5(getSkillsDir(configDir), `${skillId}${SKILL_EXTENSION}`));
2603
2615
  }
2604
2616
  async function saveSkill(configDir, skill) {
2605
2617
  const skillsDir = getSkillsDir(configDir);
2606
2618
  if (!await pathExists2(skillsDir)) {
2607
2619
  await mkdir3(skillsDir, { recursive: true });
2608
2620
  }
2609
- const filePath = join4(skillsDir, `${skill.metadata.id}${SKILL_EXTENSION}`);
2610
- const content = matter2.stringify(skill.prompt, skill.metadata);
2621
+ const filePath = join5(skillsDir, `${skill.metadata.id}${SKILL_EXTENSION}`);
2622
+ const content = matter3.stringify(skill.prompt, skill.metadata);
2611
2623
  await writeFile4(filePath, content, "utf-8");
2612
2624
  }
2613
2625
  async function deleteSkill(configDir, skillId) {
@@ -2615,7 +2627,7 @@ async function deleteSkill(configDir, skillId) {
2615
2627
  if (isDefault) {
2616
2628
  return { success: false, reason: "Cannot delete built-in defaults" };
2617
2629
  }
2618
- const filePath = join4(getSkillsDir(configDir), `${skillId}${SKILL_EXTENSION}`);
2630
+ const filePath = join5(getSkillsDir(configDir), `${skillId}${SKILL_EXTENSION}`);
2619
2631
  try {
2620
2632
  await unlink2(filePath);
2621
2633
  deleteSetting(`${SKILL_SETTING_PREFIX}${skillId}`);
@@ -3291,7 +3303,7 @@ var callSubAgentTool = {
3291
3303
  };
3292
3304
  }
3293
3305
  try {
3294
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-55YICCVH.js");
3306
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-F7RWE4YI.js");
3295
3307
  const toolRegistry = getToolRegistryForAgent2(agentDef);
3296
3308
  const turnMetrics = new TurnMetrics();
3297
3309
  const result = await executeSubAgent({
@@ -3547,7 +3559,7 @@ var webFetchTool = createTool(
3547
3559
  // src/server/dev-server/manager.ts
3548
3560
  import { spawn as spawn4 } from "child_process";
3549
3561
  import { readFile as readFile7, writeFile as writeFile5, mkdir as mkdir4 } from "fs/promises";
3550
- import { resolve as resolve5, join as join5 } from "path";
3562
+ import { resolve as resolve5, join as join6 } from "path";
3551
3563
  var MAX_LOG_LINES = 2e3;
3552
3564
  var MAX_LOG_BYTES = 1e5;
3553
3565
  var CONFIG_PATH = ".openfox/dev.json";
@@ -3603,7 +3615,7 @@ var DevServerManager = class {
3603
3615
  }
3604
3616
  async loadConfig(workdir) {
3605
3617
  try {
3606
- const configPath = join5(this.resolveWorkdir(workdir), CONFIG_PATH);
3618
+ const configPath = join6(this.resolveWorkdir(workdir), CONFIG_PATH);
3607
3619
  const raw = await readFile7(configPath, "utf-8");
3608
3620
  const parsed = JSON.parse(raw);
3609
3621
  if (!parsed.command || !parsed.url) return null;
@@ -3618,9 +3630,9 @@ var DevServerManager = class {
3618
3630
  }
3619
3631
  async saveConfig(workdir, config) {
3620
3632
  const resolved = this.resolveWorkdir(workdir);
3621
- const dirPath = join5(resolved, ".openfox");
3633
+ const dirPath = join6(resolved, ".openfox");
3622
3634
  await mkdir4(dirPath, { recursive: true });
3623
- const configPath = join5(resolved, CONFIG_PATH);
3635
+ const configPath = join6(resolved, CONFIG_PATH);
3624
3636
  await writeFile5(configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
3625
3637
  }
3626
3638
  async start(workdir) {
@@ -4390,6 +4402,9 @@ export {
4390
4402
  createChatDoneEvent,
4391
4403
  getAllInstructions,
4392
4404
  assembleAgentRequest,
4405
+ pathExists2 as pathExists,
4406
+ getDefaultIds,
4407
+ loadItemsFromDir,
4393
4408
  loadDefaultSkills,
4394
4409
  loadUserSkills,
4395
4410
  loadAllSkills,
@@ -4417,4 +4432,4 @@ export {
4417
4432
  getToolRegistryForAgent,
4418
4433
  createToolRegistry
4419
4434
  };
4420
- //# sourceMappingURL=chunk-4OI4VPZ6.js.map
4435
+ //# sourceMappingURL=chunk-6TWWJIFP.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  updateSessionMetadata
3
- } from "./chunk-6L3X7T4K.js";
3
+ } from "./chunk-PMDJEJYY.js";
4
4
  import {
5
5
  buildMessagesFromStoredEvents,
6
6
  foldPendingConfirmations
7
- } from "./chunk-2KP34IDL.js";
7
+ } from "./chunk-EEPU4INU.js";
8
8
  import {
9
9
  createSessionStateMessage
10
- } from "./chunk-NJWPSSRW.js";
10
+ } from "./chunk-DZHZ3UUR.js";
11
11
  import {
12
12
  logger
13
13
  } from "./chunk-PNBH3RAX.js";
@@ -108,4 +108,4 @@ export {
108
108
  needsNameGenerationCheck,
109
109
  applyGeneratedSessionName
110
110
  };
111
- //# sourceMappingURL=chunk-F54ZJN4X.js.map
111
+ //# sourceMappingURL=chunk-AV45GQ7B.js.map
@@ -119,8 +119,8 @@ function createPhaseChangedMessage(phase) {
119
119
  function createCriteriaUpdatedMessage(criteria, changedId) {
120
120
  return createServerMessage("criteria.updated", { criteria, ...changedId ? { changedId } : {} });
121
121
  }
122
- function createContextStateMessage(context) {
123
- return createServerMessage("context.state", { context });
122
+ function createContextStateMessage(context, subAgentId) {
123
+ return createServerMessage("context.state", { context, ...subAgentId && { subAgentId } });
124
124
  }
125
125
  function createSessionNameGeneratedMessage(name, sessionId) {
126
126
  const msg = {
@@ -252,7 +252,7 @@ function storedEventToServerMessage(event) {
252
252
  }
253
253
  case "context.state": {
254
254
  const data = event.data;
255
- return createContextStateMessage(data);
255
+ return createContextStateMessage(data, data.subAgentId);
256
256
  }
257
257
  case "session.name_generated": {
258
258
  const data = event.data;
@@ -333,4 +333,4 @@ export {
333
333
  isQueueCancelPayload,
334
334
  storedEventToServerMessage
335
335
  };
336
- //# sourceMappingURL=chunk-NJWPSSRW.js.map
336
+ //# sourceMappingURL=chunk-DZHZ3UUR.js.map
@@ -390,7 +390,9 @@ function foldContextState(events, initialWindowId) {
390
390
  }
391
391
  case "context.state": {
392
392
  const data = event.data;
393
- latestContextState = data;
393
+ if (!data.subAgentId) {
394
+ latestContextState = data;
395
+ }
394
396
  break;
395
397
  }
396
398
  case "context.compacted": {
@@ -635,4 +637,4 @@ export {
635
637
  getMessagesForWindow,
636
638
  buildContextMessagesFromMessages
637
639
  };
638
- //# sourceMappingURL=chunk-2KP34IDL.js.map
640
+ //# sourceMappingURL=chunk-EEPU4INU.js.map
@@ -13,14 +13,14 @@ import {
13
13
  getToolRegistryForAgent,
14
14
  loadAllAgentsDefault,
15
15
  runTopLevelAgentLoop
16
- } from "./chunk-4OI4VPZ6.js";
16
+ } from "./chunk-6TWWJIFP.js";
17
17
  import {
18
18
  getCurrentContextWindowId,
19
19
  getEventStore
20
- } from "./chunk-6L3X7T4K.js";
20
+ } from "./chunk-PMDJEJYY.js";
21
21
  import {
22
22
  buildSnapshotFromSessionState
23
- } from "./chunk-2KP34IDL.js";
23
+ } from "./chunk-EEPU4INU.js";
24
24
  import {
25
25
  logger
26
26
  } from "./chunk-PNBH3RAX.js";
@@ -293,4 +293,4 @@ export {
293
293
  runBuilderTurn,
294
294
  runVerifierTurn
295
295
  };
296
- //# sourceMappingURL=chunk-U54QVKL2.js.map
296
+ //# sourceMappingURL=chunk-KCJC3VBS.js.map
@@ -5,7 +5,7 @@ import {
5
5
  foldSessionState,
6
6
  spreadOptionalMessageFields,
7
7
  stripPromptContextMessages
8
- } from "./chunk-2KP34IDL.js";
8
+ } from "./chunk-EEPU4INU.js";
9
9
  import {
10
10
  getDatabase
11
11
  } from "./chunk-3EHGGBWE.js";
@@ -1066,4 +1066,4 @@ export {
1066
1066
  compactContext,
1067
1067
  getRecentUserPromptsForSession
1068
1068
  };
1069
- //# sourceMappingURL=chunk-6L3X7T4K.js.map
1069
+ //# sourceMappingURL=chunk-PMDJEJYY.js.map
@@ -154,7 +154,7 @@ async function runCli(options) {
154
154
  if (!configExists) {
155
155
  await runNetworkSetup(mode);
156
156
  }
157
- const { runServe } = await import("./serve-GOLQMQFA.js");
157
+ const { runServe } = await import("./serve-KMTRAQ4F.js");
158
158
  await runServe({
159
159
  mode,
160
160
  port: values.port ? parseInt(values.port) : void 0,
@@ -167,4 +167,4 @@ async function runCli(options) {
167
167
  export {
168
168
  runCli
169
169
  };
170
- //# sourceMappingURL=chunk-T5PBG2PE.js.map
170
+ //# sourceMappingURL=chunk-THP77DXS.js.map