openfox 2.0.112 → 2.0.113

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 (85) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +1 -0
  3. package/dist/CHANGELOG.md +27 -0
  4. package/dist/{chat-handler-BYXZIIV3.js → chat-handler-PEK5JDHO.js} +24 -24
  5. package/dist/{chunk-3UILDGOO.js → chunk-3R43CMLS.js} +8 -8
  6. package/dist/{chunk-ERYUSG5C.js → chunk-43M7QZMX.js} +2 -2
  7. package/dist/{chunk-SYJMUIRC.js → chunk-4NMGX5F2.js} +2 -2
  8. package/dist/{chunk-RAKPI4OE.js → chunk-5VYSKVZT.js} +28 -25
  9. package/dist/{chunk-FFPCVN5M.js → chunk-6UPBZ2ZR.js} +4 -4
  10. package/dist/{chunk-C5NQF2K4.js → chunk-AZFZE36I.js} +15 -6
  11. package/dist/chunk-B2PHPBFU.js +7 -0
  12. package/dist/{chunk-P45RJGOT.js → chunk-BKCW3JLL.js} +1 -1
  13. package/dist/{chunk-N4RTAGFY.js → chunk-BNFGDTEU.js} +2 -2
  14. package/dist/{chunk-JNHKKUGJ.js → chunk-BYSUSSSC.js} +2 -2
  15. package/dist/{chunk-NB2D6I64.js → chunk-CP44U7BT.js} +5 -5
  16. package/dist/{chunk-SVJFMZ2Q.js → chunk-EC5T5A6O.js} +11 -4
  17. package/dist/{chunk-RKMP74BB.js → chunk-EMI3YYLP.js} +3 -3
  18. package/dist/{chunk-BOSKQI62.js → chunk-FF2EKUQO.js} +4 -4
  19. package/dist/{chunk-XCK5IBO4.js → chunk-HGOTZWON.js} +41 -19
  20. package/dist/{chunk-XWNCKIPO.js → chunk-HKD4IMOE.js} +2 -2
  21. package/dist/{chunk-C372UH7N.js → chunk-KSXCOHHW.js} +18 -20
  22. package/dist/{chunk-Z56SEG4Z.js → chunk-O2YSYW2F.js} +6 -6
  23. package/dist/{chunk-UAF2FOI5.js → chunk-ONONXV3N.js} +7 -7
  24. package/dist/{chunk-LCQ5AN6Y.js → chunk-PWXBIUEY.js} +5 -1
  25. package/dist/{chunk-33Q7LCVD.js → chunk-R2MTWC7C.js} +2 -2
  26. package/dist/{chunk-JDT63SSP.js → chunk-SNLLOXCM.js} +3 -3
  27. package/dist/{chunk-FSYRANYR.js → chunk-TCGWZBTS.js} +3 -4
  28. package/dist/{chunk-IYTDCPEQ.js → chunk-TEQEDOWI.js} +206 -143
  29. package/dist/{chunk-PCC4DBPF.js → chunk-V4664YKR.js} +2 -2
  30. package/dist/{chunk-FR5LUTLQ.js → chunk-VGRVPYZ5.js} +10 -6
  31. package/dist/{chunk-RT2A2RRL.js → chunk-WWTYWLDM.js} +2 -2
  32. package/dist/{chunk-6FPGJR7O.js → chunk-XQR76MQ5.js} +2 -2
  33. package/dist/{chunk-RISQXU32.js → chunk-Y64PEWKP.js} +2 -2
  34. package/dist/{chunk-QGXLZZBS.js → chunk-YB6WYVNY.js} +2 -2
  35. package/dist/{chunk-SDGNV45R.js → chunk-YGPPFVLJ.js} +10 -10
  36. package/dist/cli/dev.js +1 -1
  37. package/dist/cli/index.js +1 -1
  38. package/dist/{client-QNQTX5EA.js → client-3LJGD6KY.js} +5 -5
  39. package/dist/{compactor-X2KZ3XFU.js → compactor-ZBNKANHV.js} +10 -10
  40. package/dist/{config-TW5FHQEM.js → config-EAB3V4QK.js} +2 -2
  41. package/dist/{dynamic-context-ZRQO2FJN.js → dynamic-context-F2XTQJR5.js} +9 -9
  42. package/dist/{events-Y6XXQYFG.js → events-224IO5NJ.js} +7 -7
  43. package/dist/{folding-Z4GNWRC3.js → folding-YTTTVS56.js} +5 -5
  44. package/dist/http-client-YC3UA5OZ.js +11 -0
  45. package/dist/{inspect-proxy-N42Z5TOG.js → inspect-proxy-B7LGGTM7.js} +4 -4
  46. package/dist/{manager-HCMDFEQH.js → manager-4QGXI6WZ.js} +5 -5
  47. package/dist/{model-overrides-O3ZYKFP7.js → model-overrides-OY2YKUNV.js} +4 -4
  48. package/dist/{orchestrator-P5EUMC7E.js → orchestrator-JKBY7B3P.js} +23 -23
  49. package/dist/package.json +5 -4
  50. package/dist/{path-security-525YLND3.js → path-security-PFMZY7IA.js} +11 -11
  51. package/dist/{platform-MEQUWG6U.js → platform-QNGCKX4L.js} +4 -4
  52. package/dist/{processor-UN4H4V7F.js → processor-NYPJ5PFA.js} +23 -23
  53. package/dist/{project-creator-BVA55HY6.js → project-creator-AWP2JUFS.js} +3 -3
  54. package/dist/{projects-PQXME5S4.js → projects-C4353IQK.js} +3 -3
  55. package/dist/{protocol-D6MISQyz.d.ts → protocol-CBT1d98i.d.ts} +3 -1
  56. package/dist/{protocol-FTHAR2YL.js → protocol-LZZ7C4VQ.js} +3 -3
  57. package/dist/provider/index.d.ts +4 -4
  58. package/dist/{provider-3R4X62LW.js → provider-PIRPN2CC.js} +8 -8
  59. package/dist/{provider-manager-W5N4XRE5.js → provider-manager-GNEPR6UN.js} +6 -6
  60. package/dist/{registry-74KPZ5NV.js → registry-VCKDSVKA.js} +4 -4
  61. package/dist/{serve-WHFUNQ6Z.js → serve-6DRHQLCG.js} +31 -31
  62. package/dist/server/index.d.ts +7 -4
  63. package/dist/server/index.js +30 -30
  64. package/dist/server-HUHFJW7U.js +48 -0
  65. package/dist/{session-overrides-XH6I3COP.js → session-overrides-RNKV35MU.js} +6 -6
  66. package/dist/{sessions-D772YTWL.js → sessions-D5CEPQGU.js} +7 -5
  67. package/dist/{settings-KO6DSJLD.js → settings-BNRNX6IW.js} +3 -3
  68. package/dist/shared/index.d.ts +3 -3
  69. package/dist/shared/index.js +1 -1
  70. package/dist/skill-defaults/workflows/SKILL.md +499 -0
  71. package/dist/{tools-HTUTYMKI.js → tools-2B363F7L.js} +21 -21
  72. package/dist/{types-BMEOlLT0.d.ts → types-BAxh20ZL.d.ts} +8 -1
  73. package/dist/{types-D0TgGL3t.d.ts → types-cVfqOj6M.d.ts} +1 -1
  74. package/dist/{update-BRUFGGTW.js → update-IQMRYN7J.js} +2 -2
  75. package/dist/web/assets/{index-nS1p0g8O.css → index-CjWC6EQ4.css} +1 -1
  76. package/dist/web/assets/index-DBUtUSHK.js +323 -0
  77. package/dist/web/index.html +2 -2
  78. package/dist/web/sw.js +1 -1
  79. package/dist/workflow-defaults/default.workflow.json +41 -3
  80. package/dist/{workspace-YDUQZ3HC.js → workspace-YUNHV4WS.js} +4 -4
  81. package/package.json +5 -4
  82. package/dist/chunk-P5AA7OYJ.js +0 -7
  83. package/dist/http-client-2GDKHZIG.js +0 -11
  84. package/dist/server-7MOOJR2N.js +0 -48
  85. package/dist/web/assets/index-Dukvfqm-.js +0 -323
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.113 - 2026-08-07
4
+
5
+ ### Features
6
+
7
+ - **⚠️ Heads-up: Build & Verify now asks where to work** — the workflow prompts for a workspace before running and can auto-create one, replacing the previous silent default
8
+ - **Pin favorite sessions to the top** — star any session to keep it at the top of the sidebar and session picker
9
+ - **Sidebars are resizable** — drag to resize the session and project rails; widths reset on page refresh
10
+ - **Built-in workflow authoring skill** — agents can load the canonical spec to write compliant workflows
11
+
12
+ ### Enhancements
13
+
14
+ - **Editable attachments when editing a message** — attachments show with remove buttons and persist on resend
15
+ - **Launch command pinned in the log viewer** — background processes show their start command and cwd at the top
16
+
17
+ ### Bug Fixes
18
+
19
+ - **Same-name workflows can coexist** — built-in, global, and project workflows share IDs without colliding, each tagged and separately editable
20
+ - **Native context menu over links** — right-clicking a link opens the browser menu instead of the custom one
21
+ - **Auto-scroll rearmed after replay** — replaying or edit-resending a message resumes live scrolling on streamed output
22
+ - **No stray empty workspace.json** — unrelated settings saves no longer drop an empty config file into `.openfox/`
23
+ - **Inputs behave on touch devices** — fields no longer steal focus and pop the soft keyboard on phones and tablets
24
+ - **OpenCode Go model catalog fixed** — models now load from the correct `/zen/go/v1` endpoint
25
+ - **Windows paths and root checks fixed** — backslash workspace paths are detected again, bare drive roots are rejected, casing changes no longer warn falsely, and the root save flag can't get stuck
26
+ - **Token budget counts output accurately** — context-size tracking includes prompt plus completion, preventing spurious context-length errors
27
+ - **Unknown slash commands sent as text** — a `/`-input that isn't a command sends as a normal message instead of vanishing
28
+ - **Slash commands honor their agent mode** — launching a command now applies the agent mode configured for it
29
+
3
30
  ## 2.0.112 - 2026-08-03
4
31
 
5
32
  ### Bug Fixes
package/README.md CHANGED
@@ -77,6 +77,7 @@ openfox provider remove # Remove provider
77
77
 
78
78
  - **Plan → Builder Workflow**: Interactive task breakdown followed by autonomous implementation
79
79
  - **Contract-Driven Execution**: Acceptance criteria serve as immutable contract
80
+ - **Workflows**: Declarative multi-step pipelines (agent turns, sub-agents, shell commands, user gates) with conditional transitions. File format and authoring reference: [docs/WORKFLOWS.md](docs/WORKFLOWS.md)
80
81
  - **Iterative Verification**: Agent loops until all criteria pass
81
82
  - **LSP Integration**: Immediate feedback on code validity
82
83
  - **Real-Time Metrics**: Prefill time, generation speed, context usage
package/dist/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.113 - 2026-08-07
4
+
5
+ ### Features
6
+
7
+ - **⚠️ Heads-up: Build & Verify now asks where to work** — the workflow prompts for a workspace before running and can auto-create one, replacing the previous silent default
8
+ - **Pin favorite sessions to the top** — star any session to keep it at the top of the sidebar and session picker
9
+ - **Sidebars are resizable** — drag to resize the session and project rails; widths reset on page refresh
10
+ - **Built-in workflow authoring skill** — agents can load the canonical spec to write compliant workflows
11
+
12
+ ### Enhancements
13
+
14
+ - **Editable attachments when editing a message** — attachments show with remove buttons and persist on resend
15
+ - **Launch command pinned in the log viewer** — background processes show their start command and cwd at the top
16
+
17
+ ### Bug Fixes
18
+
19
+ - **Same-name workflows can coexist** — built-in, global, and project workflows share IDs without colliding, each tagged and separately editable
20
+ - **Native context menu over links** — right-clicking a link opens the browser menu instead of the custom one
21
+ - **Auto-scroll rearmed after replay** — replaying or edit-resending a message resumes live scrolling on streamed output
22
+ - **No stray empty workspace.json** — unrelated settings saves no longer drop an empty config file into `.openfox/`
23
+ - **Inputs behave on touch devices** — fields no longer steal focus and pop the soft keyboard on phones and tablets
24
+ - **OpenCode Go model catalog fixed** — models now load from the correct `/zen/go/v1` endpoint
25
+ - **Windows paths and root checks fixed** — backslash workspace paths are detected again, bare drive roots are rejected, casing changes no longer warn falsely, and the root save flag can't get stuck
26
+ - **Token budget counts output accurately** — context-size tracking includes prompt plus completion, preventing spurious context-length errors
27
+ - **Unknown slash commands sent as text** — a `/`-input that isn't a command sends as a normal message instead of vanishing
28
+ - **Slash commands honor their agent mode** — launching a command now applies the agent mode configured for it
29
+
3
30
  ## 2.0.112 - 2026-08-03
4
31
 
5
32
  ### Bug Fixes
@@ -2,49 +2,49 @@ import {
2
2
  buildRunChatTurnParams,
3
3
  finalizeTurnCompletion,
4
4
  generateSessionNameForSession
5
- } from "./chunk-3UILDGOO.js";
5
+ } from "./chunk-3R43CMLS.js";
6
6
  import {
7
7
  runChatTurn
8
- } from "./chunk-SDGNV45R.js";
9
- import "./chunk-Z56SEG4Z.js";
10
- import "./chunk-RAKPI4OE.js";
11
- import "./chunk-BOSKQI62.js";
8
+ } from "./chunk-YGPPFVLJ.js";
9
+ import "./chunk-O2YSYW2F.js";
10
+ import "./chunk-5VYSKVZT.js";
11
+ import "./chunk-FF2EKUQO.js";
12
12
  import "./chunk-JR54MDZI.js";
13
- import "./chunk-XWNCKIPO.js";
14
- import "./chunk-33Q7LCVD.js";
15
- import "./chunk-SVJFMZ2Q.js";
13
+ import "./chunk-HKD4IMOE.js";
14
+ import "./chunk-R2MTWC7C.js";
15
+ import "./chunk-EC5T5A6O.js";
16
16
  import "./chunk-I72ACQ6R.js";
17
17
  import "./chunk-JE7LW7Y6.js";
18
18
  import "./chunk-OAN4BXEW.js";
19
- import "./chunk-FR5LUTLQ.js";
19
+ import "./chunk-VGRVPYZ5.js";
20
20
  import "./chunk-J7GAZGZT.js";
21
- import "./chunk-JDT63SSP.js";
22
- import "./chunk-FFPCVN5M.js";
21
+ import "./chunk-SNLLOXCM.js";
22
+ import "./chunk-6UPBZ2ZR.js";
23
23
  import {
24
24
  getEventStore
25
- } from "./chunk-NB2D6I64.js";
25
+ } from "./chunk-CP44U7BT.js";
26
26
  import {
27
27
  createChatMessageMessage,
28
28
  createPhaseChangedMessage,
29
29
  createSessionRunningMessage
30
- } from "./chunk-SYJMUIRC.js";
31
- import "./chunk-N4RTAGFY.js";
30
+ } from "./chunk-4NMGX5F2.js";
31
+ import "./chunk-BNFGDTEU.js";
32
32
  import "./chunk-JURM3RPZ.js";
33
- import "./chunk-RISQXU32.js";
34
- import "./chunk-6FPGJR7O.js";
35
- import "./chunk-QGXLZZBS.js";
33
+ import "./chunk-Y64PEWKP.js";
34
+ import "./chunk-XQR76MQ5.js";
35
+ import "./chunk-YB6WYVNY.js";
36
36
  import "./chunk-LCLH6ZUL.js";
37
- import "./chunk-C5NQF2K4.js";
38
- import "./chunk-JNHKKUGJ.js";
37
+ import "./chunk-AZFZE36I.js";
38
+ import "./chunk-BYSUSSSC.js";
39
39
  import "./chunk-J2GP3J3X.js";
40
40
  import "./chunk-V4IE7HJY.js";
41
41
  import "./chunk-YHEQTVFV.js";
42
42
  import "./chunk-L737Y63F.js";
43
- import "./chunk-RT2A2RRL.js";
44
- import "./chunk-LCQ5AN6Y.js";
43
+ import "./chunk-WWTYWLDM.js";
44
+ import "./chunk-PWXBIUEY.js";
45
45
  import "./chunk-K44MW7JJ.js";
46
- import "./chunk-P45RJGOT.js";
47
- import "./chunk-C372UH7N.js";
46
+ import "./chunk-BKCW3JLL.js";
47
+ import "./chunk-KSXCOHHW.js";
48
48
  import "./chunk-CQGTEGKL.js";
49
49
  import "./chunk-5WRI5ZAA.js";
50
50
 
@@ -167,4 +167,4 @@ export {
167
167
  startChatSession,
168
168
  stopSessionExecution
169
169
  };
170
- //# sourceMappingURL=chat-handler-BYXZIIV3.js.map
170
+ //# sourceMappingURL=chat-handler-PEK5JDHO.js.map
@@ -1,27 +1,27 @@
1
1
  import {
2
2
  combineEventsWithSnapshot,
3
3
  getEventStore
4
- } from "./chunk-NB2D6I64.js";
4
+ } from "./chunk-CP44U7BT.js";
5
5
  import {
6
6
  createContextStateMessage,
7
7
  createSessionStateMessage
8
- } from "./chunk-SYJMUIRC.js";
8
+ } from "./chunk-4NMGX5F2.js";
9
9
  import {
10
10
  getPendingQuestionsForSession
11
11
  } from "./chunk-JURM3RPZ.js";
12
12
  import {
13
13
  buildMessagesFromStoredEvents,
14
14
  foldPendingConfirmations
15
- } from "./chunk-QGXLZZBS.js";
15
+ } from "./chunk-YB6WYVNY.js";
16
16
  import {
17
17
  updateSessionMetadata
18
- } from "./chunk-C5NQF2K4.js";
18
+ } from "./chunk-AZFZE36I.js";
19
19
  import {
20
20
  getRuntimeConfig
21
- } from "./chunk-JNHKKUGJ.js";
21
+ } from "./chunk-BYSUSSSC.js";
22
22
  import {
23
23
  getMaxVisibleItems
24
- } from "./chunk-RT2A2RRL.js";
24
+ } from "./chunk-WWTYWLDM.js";
25
25
  import {
26
26
  logger
27
27
  } from "./chunk-K44MW7JJ.js";
@@ -153,7 +153,7 @@ async function generateSessionNameForSession(sessionId, userMessage, deps, signa
153
153
  client = deps.getLLMClient();
154
154
  client.setModel(providerConfig.model);
155
155
  } else if (providerConfig) {
156
- const { createLLMClient } = await import("./client-QNQTX5EA.js");
156
+ const { createLLMClient } = await import("./client-3LJGD6KY.js");
157
157
  client = createLLMClient({
158
158
  llm: {
159
159
  baseUrl: providerConfig.baseUrl,
@@ -204,4 +204,4 @@ export {
204
204
  needsNameGeneration,
205
205
  generateSessionNameForSession
206
206
  };
207
- //# sourceMappingURL=chunk-3UILDGOO.js.map
207
+ //# sourceMappingURL=chunk-3R43CMLS.js.map
@@ -17,7 +17,7 @@ import {
17
17
  import {
18
18
  LLMError,
19
19
  OpenAIHttpClient
20
- } from "./chunk-PCC4DBPF.js";
20
+ } from "./chunk-V4664YKR.js";
21
21
  import {
22
22
  logger
23
23
  } from "./chunk-K44MW7JJ.js";
@@ -310,4 +310,4 @@ function createLLMClient(config, initialBackend = "unknown") {
310
310
  export {
311
311
  createLLMClient
312
312
  };
313
- //# sourceMappingURL=chunk-ERYUSG5C.js.map
313
+ //# sourceMappingURL=chunk-43M7QZMX.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  createServerMessage,
6
6
  isClientMessage
7
- } from "./chunk-P45RJGOT.js";
7
+ } from "./chunk-BKCW3JLL.js";
8
8
 
9
9
  // src/server/session/client-session.ts
10
10
  function toClientSession(session) {
@@ -366,4 +366,4 @@ export {
366
366
  createQueueStateMessage,
367
367
  storedEventToServerMessage
368
368
  };
369
- //# sourceMappingURL=chunk-SYJMUIRC.js.map
369
+ //# sourceMappingURL=chunk-4NMGX5F2.js.map
@@ -4,7 +4,7 @@ import {
4
4
  getEnabledSkillMetadata,
5
5
  isSkillEnabled,
6
6
  loadAllSkills
7
- } from "./chunk-BOSKQI62.js";
7
+ } from "./chunk-FF2EKUQO.js";
8
8
  import {
9
9
  TurnMetrics,
10
10
  consumeStreamGenerator,
@@ -19,10 +19,10 @@ import {
19
19
  COMPACTION_PROMPT,
20
20
  buildBasePrompt,
21
21
  computeEffectiveTools
22
- } from "./chunk-XWNCKIPO.js";
22
+ } from "./chunk-HKD4IMOE.js";
23
23
  import {
24
24
  startInspectProxy
25
- } from "./chunk-33Q7LCVD.js";
25
+ } from "./chunk-R2MTWC7C.js";
26
26
  import {
27
27
  checkAborted,
28
28
  createProcess,
@@ -36,7 +36,7 @@ import {
36
36
  spawnShellProcess,
37
37
  startProcessCommand,
38
38
  stopProcess
39
- } from "./chunk-SVJFMZ2Q.js";
39
+ } from "./chunk-EC5T5A6O.js";
40
40
  import {
41
41
  getMaxPerSession,
42
42
  getSessionProcessCount,
@@ -52,36 +52,36 @@ import {
52
52
  getGitBranch,
53
53
  isGitRepository,
54
54
  listWorkspaces
55
- } from "./chunk-FR5LUTLQ.js";
55
+ } from "./chunk-VGRVPYZ5.js";
56
56
  import {
57
57
  getSessionDisabledServers
58
- } from "./chunk-JDT63SSP.js";
58
+ } from "./chunk-SNLLOXCM.js";
59
59
  import {
60
60
  PathAccessDeniedError,
61
61
  extractAbsolutePathsFromCommand,
62
62
  extractSensitivePathsFromCommand,
63
63
  registerPathConfirmation,
64
64
  requestPathAccess
65
- } from "./chunk-FFPCVN5M.js";
65
+ } from "./chunk-6UPBZ2ZR.js";
66
66
  import {
67
67
  getCurrentContextWindowId,
68
68
  getCurrentWindowMessageOptions,
69
69
  getEventStore
70
- } from "./chunk-NB2D6I64.js";
70
+ } from "./chunk-CP44U7BT.js";
71
71
  import {
72
72
  createChatDoneMessage,
73
73
  createChatMessageMessage,
74
74
  createChatMessageUpdatedMessage,
75
75
  createChatPathConfirmationMessage,
76
76
  createQueueStateMessage
77
- } from "./chunk-SYJMUIRC.js";
77
+ } from "./chunk-4NMGX5F2.js";
78
78
  import {
79
79
  AskUserInterrupt,
80
80
  askUserTool
81
81
  } from "./chunk-JURM3RPZ.js";
82
82
  import {
83
83
  resolveLLMClientForAgent
84
- } from "./chunk-RISQXU32.js";
84
+ } from "./chunk-Y64PEWKP.js";
85
85
  import {
86
86
  buildContextMessagesFromEventHistory,
87
87
  foldContextState,
@@ -91,13 +91,13 @@ import {
91
91
  handleToolResult,
92
92
  reorderToolMessages,
93
93
  stripOrphanedToolCalls
94
- } from "./chunk-QGXLZZBS.js";
94
+ } from "./chunk-YB6WYVNY.js";
95
95
  import {
96
96
  findAgentById,
97
97
  getRuntimeConfig,
98
98
  getSubAgents,
99
99
  loadAllAgentsDefault
100
- } from "./chunk-JNHKKUGJ.js";
100
+ } from "./chunk-BYSUSSSC.js";
101
101
  import {
102
102
  modelSupportsVision
103
103
  } from "./chunk-V4IE7HJY.js";
@@ -115,14 +115,14 @@ import {
115
115
  import {
116
116
  SETTINGS_KEYS,
117
117
  getSetting
118
- } from "./chunk-RT2A2RRL.js";
118
+ } from "./chunk-WWTYWLDM.js";
119
119
  import {
120
120
  logger
121
121
  } from "./chunk-K44MW7JJ.js";
122
122
  import {
123
123
  loadGlobalConfig,
124
124
  saveGlobalConfig
125
- } from "./chunk-C372UH7N.js";
125
+ } from "./chunk-KSXCOHHW.js";
126
126
  import {
127
127
  getGlobalConfigDir
128
128
  } from "./chunk-CQGTEGKL.js";
@@ -139,7 +139,7 @@ async function requestUserConfirmation(context, toolLabel, desc) {
139
139
  if (context.dangerLevel === "dangerous") return Promise.resolve(true);
140
140
  if (toolLabel === "workspace" || toolLabel === "command") {
141
141
  try {
142
- const { getSetting: getSetting2, SETTINGS_KEYS: SETTINGS_KEYS2 } = await import("./settings-KO6DSJLD.js");
142
+ const { getSetting: getSetting2, SETTINGS_KEYS: SETTINGS_KEYS2 } = await import("./settings-BNRNX6IW.js");
143
143
  if (getSetting2(SETTINGS_KEYS2.CONFIRM_ON_WORKSPACE_ACTIONS) !== "true") {
144
144
  return Promise.resolve(true);
145
145
  }
@@ -1927,10 +1927,15 @@ ${CONTINUE_PROMPT}` : CONTINUE_PROMPT;
1927
1927
  previousContextTokens,
1928
1928
  result.modelParams
1929
1929
  );
1930
- sessionManager.setCurrentContextSize(sessionId, result.usage.promptTokens, config.subAgentMetadata?.subAgentId);
1930
+ sessionManager.setCurrentContextSize(
1931
+ sessionId,
1932
+ result.usage.promptTokens,
1933
+ result.usage.completionTokens,
1934
+ config.subAgentMetadata?.subAgentId
1935
+ );
1931
1936
  if (!compacting) {
1932
1937
  const contextState2 = sessionManager.getContextState(sessionId);
1933
- const { shouldCompact, appendCompactionPrompt } = await import("./compactor-X2KZ3XFU.js");
1938
+ const { shouldCompact, appendCompactionPrompt } = await import("./compactor-ZBNKANHV.js");
1934
1939
  if (shouldCompact(
1935
1940
  contextState2.currentTokens,
1936
1941
  contextState2.maxTokens,
@@ -2300,7 +2305,7 @@ async function describeImageFromDataUrl(dataUrl, visionModel, options) {
2300
2305
  // src/server/context/image-processor.ts
2301
2306
  async function loadVisionModelFromGlobalConfig() {
2302
2307
  try {
2303
- const { loadGlobalConfig: loadGlobalConfig2, resolveVisionFallback } = await import("./config-TW5FHQEM.js");
2308
+ const { loadGlobalConfig: loadGlobalConfig2, resolveVisionFallback } = await import("./config-EAB3V4QK.js");
2304
2309
  const runtimeConfig = getRuntimeConfig();
2305
2310
  const mode = runtimeConfig.mode ?? "production";
2306
2311
  const globalConfig = await loadGlobalConfig2(mode);
@@ -2918,7 +2923,7 @@ var callSubAgentTool = {
2918
2923
  };
2919
2924
  }
2920
2925
  try {
2921
- const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-HTUTYMKI.js");
2926
+ const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-2B363F7L.js");
2922
2927
  const toolRegistry = getToolRegistryForAgent2(agentDef);
2923
2928
  const turnMetrics = new TurnMetrics();
2924
2929
  const result = await executeSubAgent({
@@ -3330,7 +3335,7 @@ var DevServerManager = class {
3330
3335
  }
3331
3336
  /**
3332
3337
  * Load dev server config from workdir.
3333
- * If not found and the path looks like a workspace (contains /workspaces/),
3338
+ * If not found and the path looks like a workspace (contains a /workspaces/ segment),
3334
3339
  * falls back to the parent project root.
3335
3340
  */
3336
3341
  async loadConfig(workdir) {
@@ -3352,7 +3357,7 @@ var DevServerManager = class {
3352
3357
  };
3353
3358
  const config = await tryLoad(workdir);
3354
3359
  if (config) return config;
3355
- const wsIdx = workdir.indexOf("/workspaces/");
3360
+ const wsIdx = workdir.search(/[\\/]workspaces[\\/]/);
3356
3361
  if (wsIdx !== -1) {
3357
3362
  const projectRoot = workdir.slice(0, wsIdx);
3358
3363
  if (projectRoot !== workdir) {
@@ -3940,7 +3945,7 @@ var mcpConfigTool = createTool(
3940
3945
  mcpNotifyChanged?.(sessionId);
3941
3946
  }
3942
3947
  async function rebuildTools() {
3943
- const { setMcpTools: setMcpTools2 } = await import("./tools-HTUTYMKI.js");
3948
+ const { setMcpTools: setMcpTools2 } = await import("./tools-2B363F7L.js");
3944
3949
  const mcpTools = createMcpTools(mcpManagerForTools);
3945
3950
  setMcpTools2(mcpTools);
3946
3951
  }
@@ -4232,8 +4237,6 @@ If the requested branch does not exist, it will be created. By default it is bas
4232
4237
  default branch of the project (origin/HEAD). You can specify sourceBranch to base the new
4233
4238
  branch on a different existing branch.
4234
4239
 
4235
- Actions that change the workspace (switch, delete) require explicit user approval via a confirmation dialog.
4236
-
4237
4240
  Setup commands (e.g. npm install) are configured via .openfox/workspace.json.
4238
4241
 
4239
4242
  Actions:
@@ -4635,4 +4638,4 @@ export {
4635
4638
  getToolRegistryForAgent,
4636
4639
  createToolRegistry
4637
4640
  };
4638
- //# sourceMappingURL=chunk-RAKPI4OE.js.map
4641
+ //# sourceMappingURL=chunk-5VYSKVZT.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getEventStore
3
- } from "./chunk-NB2D6I64.js";
3
+ } from "./chunk-CP44U7BT.js";
4
4
  import {
5
5
  createChatPathConfirmationMessage
6
- } from "./chunk-SYJMUIRC.js";
6
+ } from "./chunk-4NMGX5F2.js";
7
7
  import {
8
8
  getPlatformShell
9
- } from "./chunk-N4RTAGFY.js";
9
+ } from "./chunk-BNFGDTEU.js";
10
10
 
11
11
  // src/server/tools/path-security.ts
12
12
  import { realpath } from "fs/promises";
@@ -535,4 +535,4 @@ export {
535
535
  getConfirmationSessionId,
536
536
  getPendingConfirmationsBySession
537
537
  };
538
- //# sourceMappingURL=chunk-FFPCVN5M.js.map
538
+ //# sourceMappingURL=chunk-6UPBZ2ZR.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  resolveDefaultAgentId
3
- } from "./chunk-JNHKKUGJ.js";
3
+ } from "./chunk-BYSUSSSC.js";
4
4
  import {
5
5
  getDatabase
6
- } from "./chunk-LCQ5AN6Y.js";
6
+ } from "./chunk-PWXBIUEY.js";
7
7
 
8
8
  // src/server/db/sessions.ts
9
9
  function getProjectDangerLevel(projectId) {
@@ -232,6 +232,7 @@ function listSessions() {
232
232
  s.mode,
233
233
  s.workflow_phase,
234
234
  s.is_running,
235
+ s.is_favorite,
235
236
  s.created_at,
236
237
  s.updated_at,
237
238
  s.title,
@@ -239,7 +240,7 @@ function listSessions() {
239
240
  s.provider_model,
240
241
  s.message_count
241
242
  FROM sessions s
242
- ORDER BY s.updated_at DESC
243
+ ORDER BY s.is_favorite DESC, s.updated_at DESC
243
244
  `
244
245
  ).all();
245
246
  return rows.map(mapSessionSummaryRow);
@@ -264,6 +265,7 @@ function listSessionsPaged(projectId, limit, offset) {
264
265
  s.mode,
265
266
  s.workflow_phase,
266
267
  s.is_running,
268
+ s.is_favorite,
267
269
  s.created_at,
268
270
  s.updated_at,
269
271
  s.title,
@@ -272,7 +274,7 @@ function listSessionsPaged(projectId, limit, offset) {
272
274
  s.message_count
273
275
  FROM sessions s
274
276
  ${where}
275
- ORDER BY s.updated_at DESC
277
+ ORDER BY s.is_favorite DESC, s.updated_at DESC
276
278
  LIMIT ? OFFSET ?
277
279
  `
278
280
  ).all(...projectId ? [projectId] : [], limit + 1, offset);
@@ -293,6 +295,7 @@ function listHomeSessions(sessionsPerProject = 5) {
293
295
  s.mode,
294
296
  s.workflow_phase,
295
297
  s.is_running,
298
+ s.is_favorite,
296
299
  s.created_at,
297
300
  s.updated_at,
298
301
  s.title,
@@ -351,9 +354,14 @@ function mapSessionSummaryRow(row) {
351
354
  ...row.title ? { title: row.title } : {},
352
355
  criteriaCount: 0,
353
356
  criteriaCompleted: 0,
354
- messageCount: row.message_count
357
+ messageCount: row.message_count,
358
+ isFavorite: Boolean(row.is_favorite)
355
359
  };
356
360
  }
361
+ function toggleFavorite(id, isFavorite) {
362
+ const db = getDatabase();
363
+ db.prepare(`UPDATE sessions SET is_favorite = ? WHERE id = ?`).run(isFavorite ? 1 : 0, id);
364
+ }
357
365
  function createWorkflowExecution(id, sessionId, workflowId, workflowName, workflowColor, params) {
358
366
  const db = getDatabase();
359
367
  const now = Date.now();
@@ -405,9 +413,10 @@ export {
405
413
  updateSessionWorkdir,
406
414
  updateSessionBranch,
407
415
  deleteSession,
416
+ toggleFavorite,
408
417
  createWorkflowExecution,
409
418
  updateWorkflowExecutionStatus,
410
419
  getActiveWorkflowExecution,
411
420
  clearWorkflowExecution
412
421
  };
413
- //# sourceMappingURL=chunk-C5NQF2K4.js.map
422
+ //# sourceMappingURL=chunk-AZFZE36I.js.map
@@ -0,0 +1,7 @@
1
+ // src/constants.ts
2
+ var VERSION = "2.0.113";
3
+
4
+ export {
5
+ VERSION
6
+ };
7
+ //# sourceMappingURL=chunk-B2PHPBFU.js.map
@@ -26,4 +26,4 @@ export {
26
26
  isClientMessage,
27
27
  isServerMessage
28
28
  };
29
- //# sourceMappingURL=chunk-P45RJGOT.js.map
29
+ //# sourceMappingURL=chunk-BKCW3JLL.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SETTINGS_KEYS,
3
3
  getSetting
4
- } from "./chunk-RT2A2RRL.js";
4
+ } from "./chunk-WWTYWLDM.js";
5
5
 
6
6
  // src/server/utils/platform.ts
7
7
  import os from "os";
@@ -63,4 +63,4 @@ export {
63
63
  isWindowsPath,
64
64
  isAbsolutePath
65
65
  };
66
- //# sourceMappingURL=chunk-N4RTAGFY.js.map
66
+ //# sourceMappingURL=chunk-BNFGDTEU.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  SETTINGS_KEYS,
3
3
  getSetting
4
- } from "./chunk-RT2A2RRL.js";
4
+ } from "./chunk-WWTYWLDM.js";
5
5
  import {
6
6
  logger
7
7
  } from "./chunk-K44MW7JJ.js";
@@ -455,4 +455,4 @@ export {
455
455
  getOverrideAgentIds,
456
456
  resolveDefaultAgentId
457
457
  };
458
- //# sourceMappingURL=chunk-JNHKKUGJ.js.map
458
+ //# sourceMappingURL=chunk-BYSUSSSC.js.map
@@ -6,16 +6,16 @@ import {
6
6
  foldSessionState,
7
7
  spreadOptionalMessageFields,
8
8
  trimSnapshotStreamingOutput
9
- } from "./chunk-QGXLZZBS.js";
9
+ } from "./chunk-YB6WYVNY.js";
10
10
  import {
11
11
  updateSessionMessageCount
12
- } from "./chunk-C5NQF2K4.js";
12
+ } from "./chunk-AZFZE36I.js";
13
13
  import {
14
14
  getRuntimeConfig
15
- } from "./chunk-JNHKKUGJ.js";
15
+ } from "./chunk-BYSUSSSC.js";
16
16
  import {
17
17
  SETTINGS_KEYS
18
- } from "./chunk-RT2A2RRL.js";
18
+ } from "./chunk-WWTYWLDM.js";
19
19
  import {
20
20
  logger
21
21
  } from "./chunk-K44MW7JJ.js";
@@ -1465,4 +1465,4 @@ export {
1465
1465
  truncateSessionMessages,
1466
1466
  getRecentUserPromptsForSession
1467
1467
  };
1468
- //# sourceMappingURL=chunk-NB2D6I64.js.map
1468
+ //# sourceMappingURL=chunk-CP44U7BT.js.map
@@ -11,11 +11,11 @@ import {
11
11
  } from "./chunk-I72ACQ6R.js";
12
12
  import {
13
13
  getPlatformShell
14
- } from "./chunk-N4RTAGFY.js";
14
+ } from "./chunk-BNFGDTEU.js";
15
15
  import {
16
16
  SETTINGS_KEYS,
17
17
  getSetting
18
- } from "./chunk-RT2A2RRL.js";
18
+ } from "./chunk-WWTYWLDM.js";
19
19
 
20
20
  // src/server/utils/shell.ts
21
21
  import { spawn } from "child_process";
@@ -102,7 +102,14 @@ function startProcessCommand(processId, sessionId, command, cwd) {
102
102
  updateStatus(processId, sessionId, "running");
103
103
  emitProcessEvent(processId, {
104
104
  type: "backgroundProcess.started",
105
- payload: { processId, name: proc.name, pid: child.pid ?? null, status: "running" },
105
+ payload: {
106
+ processId,
107
+ name: proc.name,
108
+ command: proc.command,
109
+ cwd: proc.cwd,
110
+ pid: child.pid ?? null,
111
+ status: "running"
112
+ },
106
113
  sessionId
107
114
  });
108
115
  const stdoutDecoder = createUtf8StreamDecoder();
@@ -207,4 +214,4 @@ export {
207
214
  getSessionProcesses2 as getSessionProcesses,
208
215
  getProcessLogs
209
216
  };
210
- //# sourceMappingURL=chunk-SVJFMZ2Q.js.map
217
+ //# sourceMappingURL=chunk-EC5T5A6O.js.map
@@ -3,10 +3,10 @@ import {
3
3
  } from "./chunk-JR54MDZI.js";
4
4
  import {
5
5
  COMPACTION_PROMPT
6
- } from "./chunk-XWNCKIPO.js";
6
+ } from "./chunk-HKD4IMOE.js";
7
7
  import {
8
8
  getCurrentWindowMessageOptions
9
- } from "./chunk-NB2D6I64.js";
9
+ } from "./chunk-CP44U7BT.js";
10
10
 
11
11
  // src/server/context/compactor.ts
12
12
  function appendCompactionPrompt(sessionId, append) {
@@ -36,4 +36,4 @@ export {
36
36
  COMPACTION_MAX_RATIO,
37
37
  shouldCompact
38
38
  };
39
- //# sourceMappingURL=chunk-RKMP74BB.js.map
39
+ //# sourceMappingURL=chunk-EMI3YYLP.js.map