neural-loom 0.2.63 → 0.2.65

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 (46) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/fallback-build-manifest.json +3 -3
  7. package/.next/prerender-manifest.json +3 -3
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/server/app/index.html +1 -1
  24. package/.next/server/app/index.rsc +1 -1
  25. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  26. package/.next/server/app/index.segments/_full.segment.rsc +1 -1
  27. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  28. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  29. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  30. package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js +2 -2
  31. package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js.map +1 -1
  32. package/.next/server/chunks/[root-of-the-server]__0tq0maq._.js +1 -1
  33. package/.next/server/chunks/[root-of-the-server]__0tq0maq._.js.map +1 -1
  34. package/.next/server/middleware-build-manifest.js +3 -3
  35. package/.next/server/pages/404.html +1 -1
  36. package/.next/server/pages/500.html +1 -1
  37. package/.next/server/server-reference-manifest.js +1 -1
  38. package/.next/server/server-reference-manifest.json +1 -1
  39. package/.next/trace +1 -1
  40. package/.next/trace-build +1 -1
  41. package/package.json +1 -1
  42. package/src/lib/agents/AgentRunner.ts +18 -15
  43. package/src/lib/agents/SessionManager.ts +2 -0
  44. /package/.next/static/{APb04GYK6UqdlTOS5yzSV → zUCsAnPxQ6s8RKYlEvQVH}/_buildManifest.js +0 -0
  45. /package/.next/static/{APb04GYK6UqdlTOS5yzSV → zUCsAnPxQ6s8RKYlEvQVH}/_clientMiddlewareManifest.js +0 -0
  46. /package/.next/static/{APb04GYK6UqdlTOS5yzSV → zUCsAnPxQ6s8RKYlEvQVH}/_ssgManifest.js +0 -0
@@ -40,9 +40,14 @@ export abstract class AgentRunner {
40
40
  lastSyncedWorkspaceFolders?: string[];
41
41
  tokenUsage: { input: number; output: number; cost: number } = { input: 0, output: 0, cost: 0 };
42
42
  agentState: 'idle' | 'thinking' | 'complete' | 'needs-input' = 'idle';
43
+ protected hasAnalyzedInitialState = false;
43
44
  private stateTimer: NodeJS.Timeout | null = null;
44
45
  private lastLoggedUsage = { input: 0, output: 0, cost: 0 };
45
46
 
47
+ public resetInitialStateAnalysis(): void {
48
+ this.hasAnalyzedInitialState = false;
49
+ }
50
+
46
51
  protected logTokenUsageUpdate(): void {
47
52
  if (
48
53
  this.tokenUsage.input === this.lastLoggedUsage.input &&
@@ -142,7 +147,10 @@ export abstract class AgentRunner {
142
147
  abstract stop(): Promise<void>;
143
148
  abstract sendInput(text: string, isRaw?: boolean): Promise<void>;
144
149
  getStatus(): RunnerStatus {
145
- this.analyzeState();
150
+ if (!this.hasAnalyzedInitialState && this.status === 'running') {
151
+ this.analyzeState();
152
+ this.hasAnalyzedInitialState = true;
153
+ }
146
154
  return {
147
155
  id: this.id,
148
156
  name: this.name,
@@ -212,16 +220,18 @@ export abstract class AgentRunner {
212
220
  }, 800);
213
221
  }
214
222
 
215
- protected analyzeState(): void {
223
+ private analyzeState(): void {
216
224
  if (this.status !== 'running') {
217
225
  this.agentState = 'idle';
218
226
  return;
219
227
  }
220
228
 
221
229
  const tailLines = this.logs.slice(-5).join("");
222
- const cleanTail = tailLines.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "").trim();
230
+ const cleanTail = tailLines.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, "").trim();
223
231
 
224
- // Prompts indicate command execution has returned to the shell (idle/complete)
232
+ const isQuestion =
233
+ /(\[y\/n\]|\(y\/n\)|\?|confirm|allow|should I|would you|press enter|proceed)/i.test(cleanTail);
234
+
225
235
  const isPrompt =
226
236
  cleanTail.endsWith(">") ||
227
237
  cleanTail.endsWith("> ") ||
@@ -229,13 +239,10 @@ export abstract class AgentRunner {
229
239
  cleanTail.endsWith("$") ||
230
240
  cleanTail.endsWith("$ ");
231
241
 
232
- // Restrict questions to end of line or specific y/n patterns to avoid false matches on system tips (e.g. 'to allow')
233
- const isQuestion =
234
- /(\[y\/n\]|\(y\/n\)|\?\s*$|confirm\s*$|allow\s*$|proceed\s*$)/i.test(cleanTail) ||
235
- /press enter/i.test(cleanTail);
236
-
237
- if (isPrompt) {
238
- if (this.agentState === 'thinking' || this.agentState === 'needs-input') {
242
+ if (isQuestion) {
243
+ this.agentState = 'needs-input';
244
+ } else if (isPrompt) {
245
+ if (this.agentState === 'thinking') {
239
246
  this.agentState = 'complete';
240
247
 
241
248
  if (this.stateTimer) clearTimeout(this.stateTimer);
@@ -245,10 +252,6 @@ export abstract class AgentRunner {
245
252
  }
246
253
  }, 5000);
247
254
  }
248
- } else if (isQuestion) {
249
- this.agentState = 'needs-input';
250
- } else {
251
- this.agentState = 'idle';
252
255
  }
253
256
  }
254
257
  }
@@ -107,6 +107,7 @@ export class SessionManager {
107
107
  runner.workspaceRoot = workspaceRoot;
108
108
  runner.scopedDirs = scopedDirs;
109
109
 
110
+ runner.resetInitialStateAnalysis();
110
111
  await runner.start();
111
112
  this.sessions.set(id, runner);
112
113
  SessionPersister.saveSession(runner, true);
@@ -180,6 +181,7 @@ export class SessionManager {
180
181
  public async startSession(id: string, resume?: boolean): Promise<boolean> {
181
182
  const runner = this.sessions.get(id);
182
183
  if (!runner) return false;
184
+ runner.resetInitialStateAnalysis();
183
185
  await runner.start(resume);
184
186
  SessionPersister.saveSession(runner, true);
185
187
  return true;