openfox 2.0.3 → 2.0.5

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 (33) hide show
  1. package/dist/{ask-5SSOA6SZ.js → ask-4GZ334CO.js} +4 -2
  2. package/dist/{chat-handler-HXCAXFEV.js → chat-handler-RQXMBCKX.js} +9 -9
  3. package/dist/{chunk-7TTEGAO6.js → chunk-3QB2RMX2.js} +13 -7
  4. package/dist/{chunk-BVHFMAVN.js → chunk-5BDVM6YI.js} +1 -1
  5. package/dist/{chunk-3YK3INGL.js → chunk-734M5CG5.js} +5 -5
  6. package/dist/{chunk-MSUES6A3.js → chunk-7EHJPONC.js} +4 -4
  7. package/dist/{chunk-FCFCBOWR.js → chunk-7S6FKODI.js} +56 -28
  8. package/dist/{chunk-ZHK4XSLM.js → chunk-DXV74LCI.js} +68 -36
  9. package/dist/{chunk-BJYPTN5S.js → chunk-EU3WWTFH.js} +35 -8
  10. package/dist/{chunk-ITWVFGFV.js → chunk-LX66KJPL.js} +2 -2
  11. package/dist/{chunk-OP22QEB3.js → chunk-SYG2ENUQ.js} +2 -2
  12. package/dist/{chunk-PK7CBACL.js → chunk-TIKQWNYK.js} +12 -5
  13. package/dist/cli/dev.js +1 -1
  14. package/dist/cli/index.js +1 -1
  15. package/dist/{events-4T6IO56V.js → events-4K52FKPR.js} +3 -3
  16. package/dist/{folding-YOCGTZYH.js → folding-QIBNKYA6.js} +2 -2
  17. package/dist/{orchestrator-KQROHCQ7.js → orchestrator-JPDTRWQE.js} +8 -8
  18. package/dist/package.json +1 -1
  19. package/dist/{processor-YXAPERVZ.js → processor-KRBBTKRS.js} +20 -7
  20. package/dist/{protocol-49SJtN_P.d.ts → protocol-CaLuIetw.d.ts} +13 -3
  21. package/dist/{protocol-CN24IKQN.js → protocol-YYWMFR35.js} +3 -3
  22. package/dist/{serve-WHN52MAF.js → serve-YJIMBTIX.js} +9 -9
  23. package/dist/server/index.d.ts +1 -1
  24. package/dist/server/index.js +8 -8
  25. package/dist/{service-GB7AIOG5.js → service-FJ4TW5L7.js} +14 -9
  26. package/dist/shared/index.d.ts +2 -2
  27. package/dist/shared/index.js +1 -1
  28. package/dist/{tools-ESHH53EB.js → tools-Z6KF35SO.js} +9 -7
  29. package/dist/web/assets/{index-Sdax8ayU.css → index-B6xft9Co.css} +1 -1
  30. package/dist/web/assets/{index-Di3909TT.js → index-Cwshb4LW.js} +43 -43
  31. package/dist/web/index.html +2 -2
  32. package/dist/web/sw.js +1 -1
  33. package/package.json +1 -1
@@ -48,6 +48,16 @@ var askUserTool = {
48
48
  question: {
49
49
  type: "string",
50
50
  description: "The question to ask the user"
51
+ },
52
+ type: {
53
+ type: "string",
54
+ enum: ["text", "confirm", "choice"],
55
+ description: "Type of question (text, confirm, or choice)"
56
+ },
57
+ options: {
58
+ type: "array",
59
+ items: { type: "string" },
60
+ description: "Options for choice-type questions"
51
61
  }
52
62
  },
53
63
  required: ["question"]
@@ -56,7 +66,9 @@ var askUserTool = {
56
66
  },
57
67
  async execute(args, context) {
58
68
  const question = args["question"];
59
- const callId = crypto.randomUUID();
69
+ const type = args["type"] ?? "text";
70
+ const options = args["options"];
71
+ const callId = context.toolCallId ?? crypto.randomUUID();
60
72
  const deferred = createDeferred();
61
73
  void deferred.promise.catch(() => {
62
74
  });
@@ -64,25 +76,30 @@ var askUserTool = {
64
76
  promise: deferred.promise,
65
77
  resolve: deferred.resolve,
66
78
  reject: deferred.reject,
67
- sessionId: context.sessionId
79
+ sessionId: context.sessionId,
80
+ question,
81
+ type,
82
+ options
68
83
  });
69
- throw new AskUserInterrupt(callId, question);
84
+ throw new AskUserInterrupt(callId, question, type, options);
70
85
  }
71
86
  };
72
87
  var AskUserInterrupt = class extends Error {
73
- constructor(callId, question) {
88
+ constructor(callId, question, type = "text", options) {
74
89
  super("Ask user interrupt");
75
90
  this.callId = callId;
76
91
  this.question = question;
92
+ this.type = type;
93
+ this.options = options;
77
94
  this.name = "AskUserInterrupt";
78
95
  }
79
96
  };
80
- function provideAnswer(callId, answer) {
97
+ function provideAnswer(callId, answer, skip) {
81
98
  const pending = pendingQuestions.get(callId);
82
99
  if (!pending) {
83
100
  return false;
84
101
  }
85
- pending.resolve(answer);
102
+ pending.resolve(skip ? "[user skipped]" : answer);
86
103
  pendingQuestions.delete(callId);
87
104
  return true;
88
105
  }
@@ -114,6 +131,15 @@ function awaitAnswer(callId) {
114
131
  const pending = pendingQuestions.get(callId);
115
132
  return pending?.promise ?? null;
116
133
  }
134
+ function getPendingQuestionsForSession(sessionId) {
135
+ const result = [];
136
+ for (const [callId, pending] of pendingQuestions.entries()) {
137
+ if (pending.sessionId === sessionId) {
138
+ result.push({ callId, question: pending.question, type: pending.type, options: pending.options });
139
+ }
140
+ }
141
+ return result;
142
+ }
117
143
 
118
144
  export {
119
145
  EventEmitter,
@@ -123,6 +149,7 @@ export {
123
149
  cancelQuestion,
124
150
  cancelQuestionsForSession,
125
151
  hasPendingQuestion,
126
- awaitAnswer
152
+ awaitAnswer,
153
+ getPendingQuestionsForSession
127
154
  };
128
- //# sourceMappingURL=chunk-BJYPTN5S.js.map
155
+ //# sourceMappingURL=chunk-EU3WWTFH.js.map
@@ -694,7 +694,7 @@ function foldSessionState(events, initialWindowId, maxTokens, initialMessages) {
694
694
  }
695
695
  case "chat.ask_user": {
696
696
  const data = event.data;
697
- pendingUserInput = { callId: data.callId, question: data.question };
697
+ pendingUserInput = { callId: data.callId, question: data.question, type: data.type, options: data.options };
698
698
  break;
699
699
  }
700
700
  case "task.completed": {
@@ -856,4 +856,4 @@ export {
856
856
  getMessagesForWindow,
857
857
  buildContextMessagesFromMessages
858
858
  };
859
- //# sourceMappingURL=chunk-ITWVFGFV.js.map
859
+ //# sourceMappingURL=chunk-LX66KJPL.js.map
@@ -5,7 +5,7 @@ import {
5
5
  foldContextState,
6
6
  foldSessionState,
7
7
  spreadOptionalMessageFields
8
- } from "./chunk-ITWVFGFV.js";
8
+ } from "./chunk-LX66KJPL.js";
9
9
  import {
10
10
  getDatabase
11
11
  } from "./chunk-FBGWG4N6.js";
@@ -1397,4 +1397,4 @@ export {
1397
1397
  truncateSessionMessages,
1398
1398
  getRecentUserPromptsForSession
1399
1399
  };
1400
- //# sourceMappingURL=chunk-OP22QEB3.js.map
1400
+ //# sourceMappingURL=chunk-SYG2ENUQ.js.map
@@ -1,15 +1,18 @@
1
1
  import {
2
2
  getEventStore,
3
3
  updateSessionMetadata
4
- } from "./chunk-OP22QEB3.js";
4
+ } from "./chunk-SYG2ENUQ.js";
5
5
  import {
6
6
  buildMessagesFromStoredEvents,
7
7
  foldPendingConfirmations
8
- } from "./chunk-ITWVFGFV.js";
8
+ } from "./chunk-LX66KJPL.js";
9
9
  import {
10
10
  createContextStateMessage,
11
11
  createSessionStateMessage
12
- } from "./chunk-7TTEGAO6.js";
12
+ } from "./chunk-3QB2RMX2.js";
13
+ import {
14
+ getPendingQuestionsForSession
15
+ } from "./chunk-EU3WWTFH.js";
13
16
  import {
14
17
  logger
15
18
  } from "./chunk-K44MW7JJ.js";
@@ -135,7 +138,11 @@ function applyGeneratedSessionName(sessionId, name, deps) {
135
138
  const events = deps.eventStore.getEvents(sessionId);
136
139
  const messages = buildMessagesFromStoredEvents(events);
137
140
  const pendingConfirmations = foldPendingConfirmations(events);
138
- deps.broadcastForSession(sessionId, createSessionStateMessage(updatedSession, messages, pendingConfirmations));
141
+ const pendingQuestions = getPendingQuestionsForSession(sessionId);
142
+ deps.broadcastForSession(
143
+ sessionId,
144
+ createSessionStateMessage(updatedSession, messages, pendingConfirmations, pendingQuestions)
145
+ );
139
146
  }
140
147
  }
141
148
 
@@ -147,4 +154,4 @@ export {
147
154
  needsNameGenerationCheck,
148
155
  applyGeneratedSessionName
149
156
  };
150
- //# sourceMappingURL=chunk-PK7CBACL.js.map
157
+ //# sourceMappingURL=chunk-TIKQWNYK.js.map
package/dist/cli/dev.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-3YK3INGL.js";
4
+ } from "../chunk-734M5CG5.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runCli
4
- } from "../chunk-3YK3INGL.js";
4
+ } from "../chunk-734M5CG5.js";
5
5
  import {
6
6
  logger
7
7
  } from "../chunk-K44MW7JJ.js";
@@ -38,7 +38,7 @@ import {
38
38
  isStoredEvent,
39
39
  isTurnEvent,
40
40
  truncateSessionMessages
41
- } from "./chunk-OP22QEB3.js";
41
+ } from "./chunk-SYG2ENUQ.js";
42
42
  import {
43
43
  buildContextMessagesFromEventHistory,
44
44
  buildContextMessagesFromMessages,
@@ -55,7 +55,7 @@ import {
55
55
  foldTodos,
56
56
  foldTurnEventsToSnapshotMessages,
57
57
  getMessagesForWindow
58
- } from "./chunk-ITWVFGFV.js";
58
+ } from "./chunk-LX66KJPL.js";
59
59
  import "./chunk-FBGWG4N6.js";
60
60
  import "./chunk-K44MW7JJ.js";
61
61
  export {
@@ -114,4 +114,4 @@ export {
114
114
  isTurnEvent,
115
115
  truncateSessionMessages
116
116
  };
117
- //# sourceMappingURL=events-4T6IO56V.js.map
117
+ //# sourceMappingURL=events-4K52FKPR.js.map
@@ -23,7 +23,7 @@ import {
23
23
  handleToolResult,
24
24
  spreadOptionalMessageFields,
25
25
  stripOrphanedToolCalls
26
- } from "./chunk-ITWVFGFV.js";
26
+ } from "./chunk-LX66KJPL.js";
27
27
  export {
28
28
  buildContextMessagesFromEventHistory,
29
29
  buildContextMessagesFromMessages,
@@ -50,4 +50,4 @@ export {
50
50
  spreadOptionalMessageFields,
51
51
  stripOrphanedToolCalls
52
52
  };
53
- //# sourceMappingURL=folding-YOCGTZYH.js.map
53
+ //# sourceMappingURL=folding-QIBNKYA6.js.map
@@ -2,7 +2,7 @@ import {
2
2
  injectWorkflowKickoffIfNeeded,
3
3
  runAgentTurn,
4
4
  runChatTurn
5
- } from "./chunk-MSUES6A3.js";
5
+ } from "./chunk-7EHJPONC.js";
6
6
  import {
7
7
  TurnMetrics,
8
8
  createChatDoneEvent,
@@ -10,18 +10,18 @@ import {
10
10
  createMessageStartEvent,
11
11
  createToolCallEvent,
12
12
  createToolResultEvent
13
- } from "./chunk-FCFCBOWR.js";
13
+ } from "./chunk-7S6FKODI.js";
14
14
  import "./chunk-DL6ZILAF.js";
15
15
  import "./chunk-PBGOZMVY.js";
16
16
  import "./chunk-VRGRAQDG.js";
17
17
  import "./chunk-XAMAYRDA.js";
18
- import "./chunk-OP22QEB3.js";
19
- import "./chunk-ITWVFGFV.js";
20
- import "./chunk-7TTEGAO6.js";
21
- import "./chunk-BJYPTN5S.js";
18
+ import "./chunk-SYG2ENUQ.js";
19
+ import "./chunk-LX66KJPL.js";
20
+ import "./chunk-3QB2RMX2.js";
21
+ import "./chunk-EU3WWTFH.js";
22
22
  import "./chunk-RFNEDBVO.js";
23
23
  import "./chunk-FBGWG4N6.js";
24
- import "./chunk-BVHFMAVN.js";
24
+ import "./chunk-5BDVM6YI.js";
25
25
  import "./chunk-CQGTEGKL.js";
26
26
  import "./chunk-Z4SWOUWC.js";
27
27
  import "./chunk-K44MW7JJ.js";
@@ -36,4 +36,4 @@ export {
36
36
  runAgentTurn,
37
37
  runChatTurn
38
38
  };
39
- //# sourceMappingURL=orchestrator-KQROHCQ7.js.map
39
+ //# sourceMappingURL=orchestrator-JPDTRWQE.js.map
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openfox",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Local-LLM-first agentic coding assistant",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,17 +5,26 @@ import {
5
5
  generateSessionName,
6
6
  getSessionMessageCount,
7
7
  needsNameGenerationCheck
8
- } from "./chunk-PK7CBACL.js";
8
+ } from "./chunk-TIKQWNYK.js";
9
+ import "./chunk-7S6FKODI.js";
10
+ import "./chunk-DL6ZILAF.js";
11
+ import "./chunk-PBGOZMVY.js";
12
+ import "./chunk-VRGRAQDG.js";
13
+ import "./chunk-XAMAYRDA.js";
9
14
  import {
10
15
  getEventStore
11
- } from "./chunk-OP22QEB3.js";
12
- import "./chunk-ITWVFGFV.js";
16
+ } from "./chunk-SYG2ENUQ.js";
17
+ import "./chunk-LX66KJPL.js";
13
18
  import {
14
19
  createChatMessageMessage,
15
20
  createSessionRunningMessage
16
- } from "./chunk-7TTEGAO6.js";
21
+ } from "./chunk-3QB2RMX2.js";
22
+ import "./chunk-EU3WWTFH.js";
23
+ import "./chunk-RFNEDBVO.js";
17
24
  import "./chunk-FBGWG4N6.js";
18
- import "./chunk-BVHFMAVN.js";
25
+ import "./chunk-5BDVM6YI.js";
26
+ import "./chunk-CQGTEGKL.js";
27
+ import "./chunk-Z4SWOUWC.js";
19
28
  import {
20
29
  logger
21
30
  } from "./chunk-K44MW7JJ.js";
@@ -181,7 +190,7 @@ var QueueProcessor = class {
181
190
  backend: provider?.backend ?? llmClient.getBackend(),
182
191
  model: llmClient.getModel()
183
192
  };
184
- const { runChatTurn } = await import("./orchestrator-KQROHCQ7.js");
193
+ const { runChatTurn } = await import("./orchestrator-JPDTRWQE.js");
185
194
  const runChatTurnParams = buildRunChatTurnParams({
186
195
  sessionManager,
187
196
  sessionId,
@@ -209,6 +218,10 @@ var QueueProcessor = class {
209
218
  finalizeTurnCompletion(sessionId, sessionManager, broadcastForSession);
210
219
  return;
211
220
  }
221
+ const currentSession = sessionManager.getSession(sessionId);
222
+ if (currentSession?.isRunning) {
223
+ sessionManager.setRunning(sessionId, false);
224
+ }
212
225
  this.startTurn(sessionId);
213
226
  } catch (error) {
214
227
  logger.error("Error in turn completion cleanup", {
@@ -225,4 +238,4 @@ var QueueProcessor = class {
225
238
  export {
226
239
  QueueProcessor
227
240
  };
228
- //# sourceMappingURL=processor-YXAPERVZ.js.map
241
+ //# sourceMappingURL=processor-KRBBTKRS.js.map
@@ -226,7 +226,7 @@ interface Message {
226
226
  segments?: MessageSegment[];
227
227
  stats?: MessageStats;
228
228
  partial?: boolean;
229
- completeReason?: 'complete' | 'stopped' | 'error' | 'waiting_for_user' | 'truncated';
229
+ completeReason?: 'complete' | 'stopped' | 'error' | 'waiting_for_user' | 'truncated' | 'step_done';
230
230
  isSystemGenerated?: boolean;
231
231
  isStreaming?: boolean;
232
232
  messageKind?: 'correction' | 'auto-prompt' | 'context-reset' | 'task-completed' | 'workflow-started' | 'command';
@@ -513,6 +513,7 @@ interface SessionLoadPayload {
513
513
  interface AskAnswerPayload {
514
514
  callId: string;
515
515
  answer: string;
516
+ skip?: boolean;
516
517
  }
517
518
  interface QueuedMessage {
518
519
  queueId: string;
@@ -539,10 +540,17 @@ interface ProjectListPayload {
539
540
  interface ProjectDeletedPayload {
540
541
  projectId: string;
541
542
  }
543
+ interface PendingQuestionPayload {
544
+ callId: string;
545
+ question: string;
546
+ type: 'text' | 'confirm' | 'choice';
547
+ options: string[] | undefined;
548
+ }
542
549
  interface SessionStatePayload {
543
550
  session: Session;
544
551
  messages: Message[];
545
552
  pendingConfirmations: PendingPathConfirmationPayload[];
553
+ pendingQuestions?: PendingQuestionPayload[];
546
554
  gitStatus?: GitStatusPayload;
547
555
  }
548
556
  interface PendingPathConfirmationPayload {
@@ -624,7 +632,7 @@ interface ChatMessageUpdatedPayload {
624
632
  }
625
633
  interface ChatDonePayload {
626
634
  messageId: string;
627
- reason: 'complete' | 'stopped' | 'error' | 'waiting_for_user' | 'truncated';
635
+ reason: 'complete' | 'stopped' | 'error' | 'waiting_for_user' | 'truncated' | 'step_done';
628
636
  agentType?: 'sub-agent';
629
637
  stats?: {
630
638
  model: string;
@@ -657,6 +665,8 @@ interface PathConfirmPayload {
657
665
  interface ChatAskUserPayload {
658
666
  callId: string;
659
667
  question: string;
668
+ type: 'text' | 'confirm' | 'choice' | undefined;
669
+ options: string[] | undefined;
660
670
  }
661
671
  interface ModeChangedPayload {
662
672
  mode: SessionMode;
@@ -862,4 +872,4 @@ interface QueueCancelledEvent {
862
872
  }
863
873
  type QueueEvent = QueueAddedEvent | QueueDrainedEvent | QueueCancelledEvent;
864
874
 
865
- export { type GitStatusPayload as $, type AgentEvent as A, type BackgroundProcess as B, type CallStatsDataPoint as C, type Config as D, type ContextCompactionEvent as E, type ContextState as F, type ContextStatePayload as G, type ContextWindow as H, type CriteriaUpdatedPayload as I, type Criterion as J, type CriterionAttempt as K, type CriterionStatus as L, type Message as M, type CriterionValidation as N, type DangerLevel as O, type DevServerOutputPayload as P, type DevServerStatePayload as Q, type Diagnostic as R, type SessionStats as S, type EditContextEdit as T, type EditContextLine as U, type EditContextRegion as V, type ElementData as W, type ErrorPayload as X, type ExecutionState as Y, type FileReadEntry as Z, type GitDiffFile as _, type AskAnswerPayload as a, type InjectedFile as a0, type LLMCallStats as a1, type LlmBackend as a2, type LogLine as a3, type LspDiagnosticsPayload as a4, type MessageRole as a5, type MessageSegment as a6, type MessageStats as a7, type MetadataEntry as a8, type MetadataUpdatedPayload as a9, type SessionListPayload as aA, type SessionLoadPayload as aB, type SessionMetadata as aC, type SessionMode as aD, type SessionNameGeneratedPayload as aE, type SessionPhase as aF, type SessionRunningPayload as aG, type SessionStatePayload as aH, type SessionSummary as aI, type StatsDataPoint as aJ, type StatsIdentity as aK, type TaskCompletedPayload as aL, type Todo as aM, type ToolCall as aN, type ToolMode as aO, type ToolName as aP, type ToolResult as aQ, type ValidationResult as aR, createClientMessage as aS, createServerMessage as aT, isClientMessage as aU, isServerMessage as aV, type ModeChangedPayload as aa, type ModelConfig as ab, type ModelSessionStats as ac, type PathConfirmPayload as ad, type PathConfirmationReason as ae, type PendingPathConfirmationPayload as af, type PhaseChangedPayload as ag, type PreparingToolCall as ah, type Project as ai, type ProjectDeletedPayload as aj, type ProjectListPayload as ak, type ProjectStatePayload as al, type Provider as am, type ProviderBackend as an, type ProviderChangedPayload as ao, type QueueAddedEvent as ap, type QueueCancelledEvent as aq, type QueueDrainedEvent as ar, type QueueEvent as as, type QueueEventType as at, type QueueStatePayload as au, type QueuedMessage as av, type RecentUserPrompt as aw, type ServerMessage as ax, type ServerMessageType as ay, type Session as az, type AskUserEvent as b, type Attachment as c, type BackgroundProcessExitedPayload as d, type BackgroundProcessOutputPayload as e, type BackgroundProcessRemovedPayload as f, type BackgroundProcessStartedPayload as g, type BackgroundProcessStatus as h, type ChatAskUserPayload as i, type ChatDeltaPayload as j, type ChatDonePayload as k, type ChatErrorPayload as l, type ChatFormatRetryPayload as m, type ChatMessagePayload as n, type ChatMessageUpdatedPayload as o, type ChatPathConfirmationPayload as p, type ChatProgressPayload as q, type ChatThinkingPayload as r, type ChatTodoPayload as s, type ChatToolCallPayload as t, type ChatToolOutputPayload as u, type ChatToolPreparingPayload as v, type ChatToolResultPayload as w, type ChatVisionFallbackPayload as x, type ClientMessage as y, type ClientMessageType as z };
875
+ export { type GitStatusPayload as $, type AgentEvent as A, type BackgroundProcess as B, type CallStatsDataPoint as C, type Config as D, type ContextCompactionEvent as E, type ContextState as F, type ContextStatePayload as G, type ContextWindow as H, type CriteriaUpdatedPayload as I, type Criterion as J, type CriterionAttempt as K, type CriterionStatus as L, type Message as M, type CriterionValidation as N, type DangerLevel as O, type DevServerOutputPayload as P, type DevServerStatePayload as Q, type Diagnostic as R, type SessionStats as S, type EditContextEdit as T, type EditContextLine as U, type EditContextRegion as V, type ElementData as W, type ErrorPayload as X, type ExecutionState as Y, type FileReadEntry as Z, type GitDiffFile as _, type AskAnswerPayload as a, type InjectedFile as a0, type LLMCallStats as a1, type LlmBackend as a2, type LogLine as a3, type LspDiagnosticsPayload as a4, type MessageRole as a5, type MessageSegment as a6, type MessageStats as a7, type MetadataEntry as a8, type MetadataUpdatedPayload as a9, type Session as aA, type SessionListPayload as aB, type SessionLoadPayload as aC, type SessionMetadata as aD, type SessionMode as aE, type SessionNameGeneratedPayload as aF, type SessionPhase as aG, type SessionRunningPayload as aH, type SessionStatePayload as aI, type SessionSummary as aJ, type StatsDataPoint as aK, type StatsIdentity as aL, type TaskCompletedPayload as aM, type Todo as aN, type ToolCall as aO, type ToolMode as aP, type ToolName as aQ, type ToolResult as aR, type ValidationResult as aS, createClientMessage as aT, createServerMessage as aU, isClientMessage as aV, isServerMessage as aW, type ModeChangedPayload as aa, type ModelConfig as ab, type ModelSessionStats as ac, type PathConfirmPayload as ad, type PathConfirmationReason as ae, type PendingPathConfirmationPayload as af, type PendingQuestionPayload as ag, type PhaseChangedPayload as ah, type PreparingToolCall as ai, type Project as aj, type ProjectDeletedPayload as ak, type ProjectListPayload as al, type ProjectStatePayload as am, type Provider as an, type ProviderBackend as ao, type ProviderChangedPayload as ap, type QueueAddedEvent as aq, type QueueCancelledEvent as ar, type QueueDrainedEvent as as, type QueueEvent as at, type QueueEventType as au, type QueueStatePayload as av, type QueuedMessage as aw, type RecentUserPrompt as ax, type ServerMessage as ay, type ServerMessageType as az, type AskUserEvent as b, type Attachment as c, type BackgroundProcessExitedPayload as d, type BackgroundProcessOutputPayload as e, type BackgroundProcessRemovedPayload as f, type BackgroundProcessStartedPayload as g, type BackgroundProcessStatus as h, type ChatAskUserPayload as i, type ChatDeltaPayload as j, type ChatDonePayload as k, type ChatErrorPayload as l, type ChatFormatRetryPayload as m, type ChatMessagePayload as n, type ChatMessageUpdatedPayload as o, type ChatPathConfirmationPayload as p, type ChatProgressPayload as q, type ChatThinkingPayload as r, type ChatTodoPayload as s, type ChatToolCallPayload as t, type ChatToolOutputPayload as u, type ChatToolPreparingPayload as v, type ChatToolResultPayload as w, type ChatVisionFallbackPayload as x, type ClientMessage as y, type ClientMessageType as z };
@@ -35,8 +35,8 @@ import {
35
35
  parseClientMessage,
36
36
  serializeServerMessage,
37
37
  storedEventToServerMessage
38
- } from "./chunk-7TTEGAO6.js";
39
- import "./chunk-BVHFMAVN.js";
38
+ } from "./chunk-3QB2RMX2.js";
39
+ import "./chunk-5BDVM6YI.js";
40
40
  export {
41
41
  createChatAskUserMessage,
42
42
  createChatDeltaMessage,
@@ -75,4 +75,4 @@ export {
75
75
  serializeServerMessage,
76
76
  storedEventToServerMessage
77
77
  };
78
- //# sourceMappingURL=protocol-CN24IKQN.js.map
78
+ //# sourceMappingURL=protocol-YYWMFR35.js.map
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  VERSION,
3
3
  createServer
4
- } from "./chunk-ZHK4XSLM.js";
4
+ } from "./chunk-DXV74LCI.js";
5
5
  import "./chunk-NZCKCJH5.js";
6
- import "./chunk-MSUES6A3.js";
7
- import "./chunk-FCFCBOWR.js";
6
+ import "./chunk-7EHJPONC.js";
7
+ import "./chunk-7S6FKODI.js";
8
8
  import "./chunk-DL6ZILAF.js";
9
9
  import "./chunk-PBGOZMVY.js";
10
10
  import "./chunk-VRGRAQDG.js";
11
11
  import "./chunk-XAMAYRDA.js";
12
12
  import {
13
13
  loadConfig
14
- } from "./chunk-OP22QEB3.js";
15
- import "./chunk-ITWVFGFV.js";
16
- import "./chunk-7TTEGAO6.js";
17
- import "./chunk-BJYPTN5S.js";
14
+ } from "./chunk-SYG2ENUQ.js";
15
+ import "./chunk-LX66KJPL.js";
16
+ import "./chunk-3QB2RMX2.js";
17
+ import "./chunk-EU3WWTFH.js";
18
18
  import "./chunk-RFNEDBVO.js";
19
19
  import "./chunk-FBGWG4N6.js";
20
20
  import "./chunk-VUQCQXXJ.js";
21
- import "./chunk-BVHFMAVN.js";
21
+ import "./chunk-5BDVM6YI.js";
22
22
  import {
23
23
  getActiveProvider,
24
24
  getDefaultModel,
@@ -188,4 +188,4 @@ async function runServe(options) {
188
188
  export {
189
189
  runServe
190
190
  };
191
- //# sourceMappingURL=serve-WHN52MAF.js.map
191
+ //# sourceMappingURL=serve-YJIMBTIX.js.map
@@ -1,4 +1,4 @@
1
- import { aN as ToolCall, c as Attachment, R as Diagnostic, am as Provider, ab as ModelConfig, az as Session, aI as SessionSummary, ai as Project, aD as SessionMode, aF as SessionPhase, M as Message, J as Criterion, L as CriterionStatus, a8 as MetadataEntry, av as QueuedMessage, F as ContextState, O as DangerLevel$1, ax as ServerMessage, aK as StatsIdentity, aQ as ToolResult, D as Config } from '../protocol-49SJtN_P.js';
1
+ import { aO as ToolCall, c as Attachment, R as Diagnostic, an as Provider, ab as ModelConfig, aA as Session, aJ as SessionSummary, aj as Project, aE as SessionMode, aG as SessionPhase, M as Message, J as Criterion, L as CriterionStatus, a8 as MetadataEntry, aw as QueuedMessage, F as ContextState, O as DangerLevel$1, ay as ServerMessage, aL as StatsIdentity, aR as ToolResult, D as Config } from '../protocol-CaLuIetw.js';
2
2
  import { Server } from 'node:http';
3
3
 
4
4
  interface LLMMessage {
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  createServer,
3
3
  createServerHandle
4
- } from "../chunk-ZHK4XSLM.js";
4
+ } from "../chunk-DXV74LCI.js";
5
5
  import "../chunk-NZCKCJH5.js";
6
- import "../chunk-MSUES6A3.js";
7
- import "../chunk-FCFCBOWR.js";
6
+ import "../chunk-7EHJPONC.js";
7
+ import "../chunk-7S6FKODI.js";
8
8
  import "../chunk-DL6ZILAF.js";
9
9
  import "../chunk-PBGOZMVY.js";
10
10
  import "../chunk-VRGRAQDG.js";
11
11
  import "../chunk-XAMAYRDA.js";
12
- import "../chunk-OP22QEB3.js";
13
- import "../chunk-ITWVFGFV.js";
14
- import "../chunk-7TTEGAO6.js";
15
- import "../chunk-BJYPTN5S.js";
12
+ import "../chunk-SYG2ENUQ.js";
13
+ import "../chunk-LX66KJPL.js";
14
+ import "../chunk-3QB2RMX2.js";
15
+ import "../chunk-EU3WWTFH.js";
16
16
  import "../chunk-RFNEDBVO.js";
17
17
  import "../chunk-FBGWG4N6.js";
18
18
  import "../chunk-VUQCQXXJ.js";
19
- import "../chunk-BVHFMAVN.js";
19
+ import "../chunk-5BDVM6YI.js";
20
20
  import "../chunk-CQGTEGKL.js";
21
21
  import "../chunk-A52FXWJX.js";
22
22
  import "../chunk-Z4SWOUWC.js";
@@ -122,7 +122,7 @@ WantedBy=graphical-session.target
122
122
  await writeFile(servicePath, serviceContent, "utf-8");
123
123
  console.log(`Created: ${servicePath}`);
124
124
  }
125
- async function runServiceCommand(_mode, subcommand) {
125
+ async function runServiceCommand(_mode, subcommand, ...args) {
126
126
  if (!subcommand) {
127
127
  printServiceHelp();
128
128
  return;
@@ -144,7 +144,7 @@ async function runServiceCommand(_mode, subcommand) {
144
144
  await serviceStatus();
145
145
  break;
146
146
  case "logs":
147
- await serviceLogs();
147
+ await serviceLogs(args);
148
148
  break;
149
149
  case "uninstall":
150
150
  await serviceUninstall();
@@ -168,7 +168,7 @@ Commands:
168
168
  stop Stop the service (if installed)
169
169
  restart Restart the service (if installed)
170
170
  status Show service status
171
- logs Show recent service logs
171
+ logs [-f] Show recent service logs (use -f or --follow to tail)
172
172
  uninstall Disable and remove the service files
173
173
  `);
174
174
  }
@@ -243,16 +243,21 @@ async function serviceStatus() {
243
243
  systemctl(["is-active", SERVICE_NAME], false);
244
244
  systemctl(["is-enabled", SERVICE_NAME], false);
245
245
  }
246
- async function serviceLogs() {
246
+ async function serviceLogs(args) {
247
247
  const installed = await pathExists(SERVICE_PATH);
248
248
  if (!installed) {
249
249
  console.log("Service not installed.");
250
250
  return;
251
251
  }
252
- const result = spawnSync("journalctl", ["--user", "-u", SERVICE_NAME, "-n", "50", "--no-pager"], {
253
- encoding: "utf-8"
254
- });
255
- console.log(result.stdout || result.stderr || "No logs");
252
+ const follow = args.includes("-f") || args.includes("--follow");
253
+ if (follow) {
254
+ spawn("journalctl", ["--user", "-u", SERVICE_NAME, "-f", "--no-pager"], { stdio: "inherit" });
255
+ } else {
256
+ const result = spawnSync("journalctl", ["--user", "-u", SERVICE_NAME, "-n", "50", "--no-pager"], {
257
+ encoding: "utf-8"
258
+ });
259
+ console.log(result.stdout || result.stderr || "No logs");
260
+ }
256
261
  }
257
262
  async function serviceUninstall() {
258
263
  console.log("Uninstalling OpenFox service...\n");
@@ -282,4 +287,4 @@ async function serviceUninstall() {
282
287
  export {
283
288
  runServiceCommand
284
289
  };
285
- //# sourceMappingURL=service-GB7AIOG5.js.map
290
+ //# sourceMappingURL=service-FJ4TW5L7.js.map
@@ -1,5 +1,5 @@
1
- import { M as Message, S as SessionStats } from '../protocol-49SJtN_P.js';
2
- export { A as AgentEvent, a as AskAnswerPayload, b as AskUserEvent, c as Attachment, B as BackgroundProcess, d as BackgroundProcessExitedPayload, e as BackgroundProcessOutputPayload, f as BackgroundProcessRemovedPayload, g as BackgroundProcessStartedPayload, h as BackgroundProcessStatus, C as CallStatsDataPoint, i as ChatAskUserPayload, j as ChatDeltaPayload, k as ChatDonePayload, l as ChatErrorPayload, m as ChatFormatRetryPayload, n as ChatMessagePayload, o as ChatMessageUpdatedPayload, p as ChatPathConfirmationPayload, q as ChatProgressPayload, r as ChatThinkingPayload, s as ChatTodoPayload, t as ChatToolCallPayload, u as ChatToolOutputPayload, v as ChatToolPreparingPayload, w as ChatToolResultPayload, x as ChatVisionFallbackPayload, y as ClientMessage, z as ClientMessageType, D as Config, E as ContextCompactionEvent, F as ContextState, G as ContextStatePayload, H as ContextWindow, I as CriteriaUpdatedPayload, J as Criterion, K as CriterionAttempt, L as CriterionStatus, N as CriterionValidation, O as DangerLevel, P as DevServerOutputPayload, Q as DevServerStatePayload, R as Diagnostic, T as EditContextEdit, U as EditContextLine, V as EditContextRegion, W as ElementData, X as ErrorPayload, Y as ExecutionState, Z as FileReadEntry, _ as GitDiffFile, $ as GitStatusPayload, a0 as InjectedFile, a1 as LLMCallStats, a2 as LlmBackend, a3 as LogLine, a4 as LspDiagnosticsPayload, a5 as MessageRole, a6 as MessageSegment, a7 as MessageStats, a8 as MetadataEntry, a9 as MetadataUpdatedPayload, aa as ModeChangedPayload, ab as ModelConfig, ac as ModelSessionStats, ad as PathConfirmPayload, ae as PathConfirmationReason, af as PendingPathConfirmationPayload, ag as PhaseChangedPayload, ah as PreparingToolCall, ai as Project, aj as ProjectDeletedPayload, ak as ProjectListPayload, al as ProjectStatePayload, am as Provider, an as ProviderBackend, ao as ProviderChangedPayload, ap as QueueAddedEvent, aq as QueueCancelledEvent, ar as QueueDrainedEvent, as as QueueEvent, at as QueueEventType, au as QueueStatePayload, av as QueuedMessage, aw as RecentUserPrompt, ax as ServerMessage, ay as ServerMessageType, az as Session, aA as SessionListPayload, aB as SessionLoadPayload, aC as SessionMetadata, aD as SessionMode, aE as SessionNameGeneratedPayload, aF as SessionPhase, aG as SessionRunningPayload, aH as SessionStatePayload, aI as SessionSummary, aJ as StatsDataPoint, aK as StatsIdentity, aL as TaskCompletedPayload, aM as Todo, aN as ToolCall, aO as ToolMode, aP as ToolName, aQ as ToolResult, aR as ValidationResult, aS as createClientMessage, aT as createServerMessage, aU as isClientMessage, aV as isServerMessage } from '../protocol-49SJtN_P.js';
1
+ import { M as Message, S as SessionStats } from '../protocol-CaLuIetw.js';
2
+ export { A as AgentEvent, a as AskAnswerPayload, b as AskUserEvent, c as Attachment, B as BackgroundProcess, d as BackgroundProcessExitedPayload, e as BackgroundProcessOutputPayload, f as BackgroundProcessRemovedPayload, g as BackgroundProcessStartedPayload, h as BackgroundProcessStatus, C as CallStatsDataPoint, i as ChatAskUserPayload, j as ChatDeltaPayload, k as ChatDonePayload, l as ChatErrorPayload, m as ChatFormatRetryPayload, n as ChatMessagePayload, o as ChatMessageUpdatedPayload, p as ChatPathConfirmationPayload, q as ChatProgressPayload, r as ChatThinkingPayload, s as ChatTodoPayload, t as ChatToolCallPayload, u as ChatToolOutputPayload, v as ChatToolPreparingPayload, w as ChatToolResultPayload, x as ChatVisionFallbackPayload, y as ClientMessage, z as ClientMessageType, D as Config, E as ContextCompactionEvent, F as ContextState, G as ContextStatePayload, H as ContextWindow, I as CriteriaUpdatedPayload, J as Criterion, K as CriterionAttempt, L as CriterionStatus, N as CriterionValidation, O as DangerLevel, P as DevServerOutputPayload, Q as DevServerStatePayload, R as Diagnostic, T as EditContextEdit, U as EditContextLine, V as EditContextRegion, W as ElementData, X as ErrorPayload, Y as ExecutionState, Z as FileReadEntry, _ as GitDiffFile, $ as GitStatusPayload, a0 as InjectedFile, a1 as LLMCallStats, a2 as LlmBackend, a3 as LogLine, a4 as LspDiagnosticsPayload, a5 as MessageRole, a6 as MessageSegment, a7 as MessageStats, a8 as MetadataEntry, a9 as MetadataUpdatedPayload, aa as ModeChangedPayload, ab as ModelConfig, ac as ModelSessionStats, ad as PathConfirmPayload, ae as PathConfirmationReason, af as PendingPathConfirmationPayload, ag as PendingQuestionPayload, ah as PhaseChangedPayload, ai as PreparingToolCall, aj as Project, ak as ProjectDeletedPayload, al as ProjectListPayload, am as ProjectStatePayload, an as Provider, ao as ProviderBackend, ap as ProviderChangedPayload, aq as QueueAddedEvent, ar as QueueCancelledEvent, as as QueueDrainedEvent, at as QueueEvent, au as QueueEventType, av as QueueStatePayload, aw as QueuedMessage, ax as RecentUserPrompt, ay as ServerMessage, az as ServerMessageType, aA as Session, aB as SessionListPayload, aC as SessionLoadPayload, aD as SessionMetadata, aE as SessionMode, aF as SessionNameGeneratedPayload, aG as SessionPhase, aH as SessionRunningPayload, aI as SessionStatePayload, aJ as SessionSummary, aK as StatsDataPoint, aL as StatsIdentity, aM as TaskCompletedPayload, aN as Todo, aO as ToolCall, aP as ToolMode, aQ as ToolName, aR as ToolResult, aS as ValidationResult, aT as createClientMessage, aU as createServerMessage, aV as isClientMessage, aW as isServerMessage } from '../protocol-CaLuIetw.js';
3
3
 
4
4
  /**
5
5
  * Session stats computation - aggregates response-level MessageStats from
@@ -6,7 +6,7 @@ import {
6
6
  createServerMessage,
7
7
  isClientMessage,
8
8
  isServerMessage
9
- } from "../chunk-BVHFMAVN.js";
9
+ } from "../chunk-5BDVM6YI.js";
10
10
  export {
11
11
  computeSessionStats,
12
12
  createClientMessage,
@@ -11,22 +11,23 @@ import {
11
11
  requestPathAccess,
12
12
  stepDoneTool,
13
13
  validateToolAction
14
- } from "./chunk-FCFCBOWR.js";
14
+ } from "./chunk-7S6FKODI.js";
15
15
  import "./chunk-DL6ZILAF.js";
16
16
  import "./chunk-PBGOZMVY.js";
17
17
  import "./chunk-VRGRAQDG.js";
18
18
  import "./chunk-XAMAYRDA.js";
19
- import "./chunk-OP22QEB3.js";
20
- import "./chunk-ITWVFGFV.js";
21
- import "./chunk-7TTEGAO6.js";
19
+ import "./chunk-SYG2ENUQ.js";
20
+ import "./chunk-LX66KJPL.js";
21
+ import "./chunk-3QB2RMX2.js";
22
22
  import {
23
23
  AskUserInterrupt,
24
24
  cancelQuestionsForSession,
25
+ getPendingQuestionsForSession,
25
26
  provideAnswer
26
- } from "./chunk-BJYPTN5S.js";
27
+ } from "./chunk-EU3WWTFH.js";
27
28
  import "./chunk-RFNEDBVO.js";
28
29
  import "./chunk-FBGWG4N6.js";
29
- import "./chunk-BVHFMAVN.js";
30
+ import "./chunk-5BDVM6YI.js";
30
31
  import "./chunk-CQGTEGKL.js";
31
32
  import "./chunk-Z4SWOUWC.js";
32
33
  import "./chunk-K44MW7JJ.js";
@@ -37,6 +38,7 @@ export {
37
38
  cancelQuestionsForSession,
38
39
  createRegistryFromTools,
39
40
  createToolRegistry,
41
+ getPendingQuestionsForSession,
40
42
  getToolPermissions,
41
43
  getToolRegistryForAgent,
42
44
  getToolRegistryForSubAgent,
@@ -47,4 +49,4 @@ export {
47
49
  stepDoneTool,
48
50
  validateToolAction
49
51
  };
50
- //# sourceMappingURL=tools-ESHH53EB.js.map
52
+ //# sourceMappingURL=tools-Z6KF35SO.js.map