@markusylisiurunen/tau 0.3.34 → 0.3.36

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 (81) hide show
  1. package/README.md +14 -4
  2. package/dist/core/agent/agent_runtime.js +6 -5
  3. package/dist/core/agent/agent_runtime.js.map +1 -1
  4. package/dist/core/cli.js +7 -0
  5. package/dist/core/cli.js.map +1 -1
  6. package/dist/core/commands/registry.js +24 -2
  7. package/dist/core/commands/registry.js.map +1 -1
  8. package/dist/core/debug.js +16 -30
  9. package/dist/core/debug.js.map +1 -1
  10. package/dist/core/runtime/chat_runtime.js +13 -2
  11. package/dist/core/runtime/chat_runtime.js.map +1 -1
  12. package/dist/core/runtime/runtime_bootstrap.js +68 -25
  13. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  14. package/dist/core/runtime/steering.js +2 -1
  15. package/dist/core/runtime/steering.js.map +1 -1
  16. package/dist/core/session/compaction.js +1 -1
  17. package/dist/core/session/compaction.js.map +1 -1
  18. package/dist/core/session/goal.js +54 -0
  19. package/dist/core/session/goal.js.map +1 -0
  20. package/dist/core/subagents/agent_supervisor.js +4 -1
  21. package/dist/core/subagents/agent_supervisor.js.map +1 -1
  22. package/dist/core/telegram/adapter.js +319 -67
  23. package/dist/core/telegram/adapter.js.map +1 -1
  24. package/dist/core/telegram/config.js +1 -1
  25. package/dist/core/telegram/runtime.js +20 -1
  26. package/dist/core/telegram/runtime.js.map +1 -1
  27. package/dist/core/telegram/session_manager.js +12 -0
  28. package/dist/core/telegram/session_manager.js.map +1 -1
  29. package/dist/core/tools/catalog.js +14 -1
  30. package/dist/core/tools/catalog.js.map +1 -1
  31. package/dist/core/tools/goal.js +77 -0
  32. package/dist/core/tools/goal.js.map +1 -0
  33. package/dist/core/tools/tool_names.js +4 -0
  34. package/dist/core/tools/tool_names.js.map +1 -1
  35. package/dist/core/tools/view_image.js +8 -5
  36. package/dist/core/tools/view_image.js.map +1 -1
  37. package/dist/core/utils/context.js +0 -1
  38. package/dist/core/utils/context.js.map +1 -1
  39. package/dist/core/utils/context_builder.js +2 -3
  40. package/dist/core/utils/context_builder.js.map +1 -1
  41. package/dist/core/utils/user_metadata.js +14 -0
  42. package/dist/core/utils/user_metadata.js.map +1 -1
  43. package/dist/core/version.js +1 -1
  44. package/dist/host/client_tool_broker.js +4 -0
  45. package/dist/host/client_tool_broker.js.map +1 -1
  46. package/dist/host/local_session_host.js +391 -45
  47. package/dist/host/local_session_host.js.map +1 -1
  48. package/dist/host/session_host.js +2 -0
  49. package/dist/host/session_host.js.map +1 -1
  50. package/dist/host/session_protocol_handler.js +253 -236
  51. package/dist/host/session_protocol_handler.js.map +1 -1
  52. package/dist/main.js +86 -31
  53. package/dist/main.js.map +1 -1
  54. package/dist/protocol/index.d.ts +1 -1
  55. package/dist/protocol/index.js.map +1 -1
  56. package/dist/protocol/session_protocol.d.ts +28 -3
  57. package/dist/protocol/session_protocol.js +53 -1
  58. package/dist/protocol/session_protocol.js.map +1 -1
  59. package/dist/sdk/client.js +7 -108
  60. package/dist/sdk/client.js.map +1 -1
  61. package/dist/sdk/index.d.ts +1 -1
  62. package/dist/sdk/index.js.map +1 -1
  63. package/dist/sdk/local_client.d.ts +3 -0
  64. package/dist/sdk/local_client.js +106 -0
  65. package/dist/sdk/local_client.js.map +1 -0
  66. package/dist/sdk/session.js +20 -0
  67. package/dist/sdk/session.js.map +1 -1
  68. package/dist/sdk/types.d.ts +7 -1
  69. package/dist/store/session_snapshot_migrations.js +10 -1
  70. package/dist/store/session_snapshot_migrations.js.map +1 -1
  71. package/dist/tui/chat_view.js +1 -0
  72. package/dist/tui/chat_view.js.map +1 -1
  73. package/dist/tui/session_chat_app.js +53 -3
  74. package/dist/tui/session_chat_app.js.map +1 -1
  75. package/dist/tui/session_chat_controller.js +47 -3
  76. package/dist/tui/session_chat_controller.js.map +1 -1
  77. package/dist/tui/ui/footer.js +7 -3
  78. package/dist/tui/ui/footer.js.map +1 -1
  79. package/package.json +1 -1
  80. package/dist/core/utils/agents_files.js +0 -282
  81. package/dist/core/utils/agents_files.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { createTextToolOutcome, executeTool, } from "../core/tools/registry.js";
3
+ import { TOOL_NAME_CREATE_GOAL, TOOL_NAME_GET_GOAL, TOOL_NAME_UPDATE_GOAL, } from "../core/tools/tool_names.js";
3
4
  import { formatTokenEstimate } from "../core/utils/token.js";
4
5
  import { buildHeadTailPreviewLines } from "../core/utils/tool_preview.js";
5
6
  import { formatBytes } from "../core/utils/truncate.js";
@@ -21,6 +22,9 @@ const HOST_TOOL_NAMES = new Set([
21
22
  "interrupt_agent",
22
23
  "web",
23
24
  "nook",
25
+ TOOL_NAME_GET_GOAL,
26
+ TOOL_NAME_CREATE_GOAL,
27
+ TOOL_NAME_UPDATE_GOAL,
24
28
  ]);
25
29
  export class ClientToolBroker {
26
30
  clients = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"client_tool_broker.js","sourceRoot":"","sources":["../../src/host/client_tool_broker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client_tool_broker.js","sourceRoot":"","sources":["../../src/host/client_tool_broker.ts"],"names":[],"mappings":"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"}
@@ -2,16 +2,18 @@ import { randomUUID } from "node:crypto";
2
2
  import { isDeepStrictEqual } from "node:util";
3
3
  import { resolvePromptTemplateWithBackend } from "../core/config/index.js";
4
4
  import { ChatRuntime } from "../core/runtime/chat_runtime.js";
5
+ import { formatSteeringUserMessage } from "../core/runtime/steering.js";
6
+ import { buildGoalContinuationText, prependGoalPolicy } from "../core/session/goal.js";
5
7
  import { SUBAGENT_ACTIVITY_FACET_KIND } from "../core/subagents/types.js";
6
8
  import { appendUsageLogEntry, getUsageCostTotal, getUsageTotals, } from "../core/usage/logs.js";
7
9
  import { filterProjectPathAutocompleteEntries, loadProjectPathAutocompleteEntriesWithBackend, } from "../core/utils/project_files.js";
8
- import { hasAutoCompactionContinuationMetadata, isTauUserMessageHidden, } from "../core/utils/user_metadata.js";
10
+ import { hasAutoCompactionContinuationMetadata, hasGoalTurnMetadata, isTauUserMessageHidden, } from "../core/utils/user_metadata.js";
9
11
  import { applySessionProtocolDelta, createSessionProtocolDeltaMessage, createSessionProtocolEphemeralMessage, } from "../protocol/session_protocol.js";
10
12
  import { LEGACY_SESSION_CONTEXT_EPOCH } from "../store/session_snapshot_migrations.js";
11
13
  import { ClientToolBroker } from "./client_tool_broker.js";
12
14
  import { createExecutionEnvironmentSubagentRuntimeResolver } from "./execution_runtime.js";
13
15
  import { HostedEphemeralAgentSession } from "./hosted_ephemeral_agent_session.js";
14
- import { SessionExecBusyError, } from "./session_host.js";
16
+ import { SessionExecBusyError, SessionRetryUnavailableError, } from "./session_host.js";
15
17
  const PATH_AUTOCOMPLETE_CACHE_TTL_MS = 5_000;
16
18
  export class LocalSessionHost {
17
19
  sessions = new Set();
@@ -124,6 +126,11 @@ export class LocalSessionHost {
124
126
  environment: this.sessionOptions.environment,
125
127
  eventSink: async (event) => await hostedSession.enqueueRuntimeEvent(event),
126
128
  subagentEventSink: async (event) => await hostedSession.recordSubagentEvent(event),
129
+ goalManager: {
130
+ getGoal: () => hostedSession.getGoal(),
131
+ createGoal: async (objective) => await hostedSession.createGoal(objective),
132
+ updateGoal: async (update) => await hostedSession.updateGoal(update),
133
+ },
127
134
  initialPromptComposition: committedSnapshot
128
135
  ? promptCompositionFromSnapshot(committedSnapshot)
129
136
  : undefined,
@@ -347,9 +354,12 @@ class LocalHostedSessionHandle {
347
354
  activeWorkPromises = new Set();
348
355
  activeExecAbortControllers = new Map();
349
356
  activeTurnPromise;
357
+ activeLogicalTurn;
350
358
  disposePromise;
351
359
  disposing = false;
352
360
  costTotal = 0;
361
+ goal;
362
+ pendingGoalCommit;
353
363
  forceNextSnapshotRevision;
354
364
  disposed = false;
355
365
  constructor(runtime, promptBootstrap, catalog, bootstrap, includeAgentContext, executionEnvironment, store, committedSnapshot, forceNextSnapshotRevision, recordUsage, removeFromHost = () => { }) {
@@ -370,12 +380,17 @@ class LocalHostedSessionHandle {
370
380
  this.persistedSnapshot = committedSnapshot
371
381
  ? cloneSessionProtocolSnapshot(committedSnapshot)
372
382
  : undefined;
383
+ this.goal = structuredClone(committedSnapshot?.goal ?? null);
373
384
  this.forceNextSnapshotRevision = forceNextSnapshotRevision;
374
385
  this.restoreProtocolState(committedSnapshot);
375
386
  }
376
387
  get isTurnRunning() {
377
388
  return this.runtime.isTurnRunning;
378
389
  }
390
+ get canAcceptSteering() {
391
+ return (this.runtime.isTurnRunning ||
392
+ Boolean(this.activeLogicalTurn && this.goal?.status === "active"));
393
+ }
379
394
  get sessionId() {
380
395
  return this.session.sessionId;
381
396
  }
@@ -397,6 +412,105 @@ class LocalHostedSessionHandle {
397
412
  this.ephemeralListeners.delete(handler);
398
413
  };
399
414
  }
415
+ getGoal() {
416
+ return structuredClone(this.goal);
417
+ }
418
+ async createGoal(objective) {
419
+ const goal = this.buildNewGoal(objective);
420
+ await this.setGoal(goal);
421
+ return structuredClone(goal);
422
+ }
423
+ async updateGoal(update) {
424
+ this.assertActive();
425
+ const current = this.goal;
426
+ if (!current) {
427
+ throw new Error("no goal exists");
428
+ }
429
+ if (update.objective !== undefined && update.status === "complete") {
430
+ throw new Error("goal objective cannot be updated while completing the goal");
431
+ }
432
+ if (update.status === "complete") {
433
+ await this.setGoal(null);
434
+ return null;
435
+ }
436
+ const objective = update.objective?.trim() ?? current.objective;
437
+ if (!objective) {
438
+ throw new Error("goal objective must not be empty");
439
+ }
440
+ const goal = {
441
+ objective,
442
+ status: update.status ?? current.status,
443
+ };
444
+ await this.setGoal(goal);
445
+ return structuredClone(goal);
446
+ }
447
+ async startGoal(objective) {
448
+ const goal = this.buildNewGoal(objective);
449
+ return await this.runLogicalTurn(async (logicalTurn) => {
450
+ this.goal = goal;
451
+ this.pendingGoalCommit = goal;
452
+ try {
453
+ const { userHistoryEntryId } = await this.record({
454
+ text: prependGoalPolicy(goal.objective, goal),
455
+ });
456
+ if (logicalTurn.cancellationRequested) {
457
+ return {
458
+ userHistoryEntryId,
459
+ turn: await this.cancelLogicalTurn(userHistoryEntryId),
460
+ };
461
+ }
462
+ return {
463
+ userHistoryEntryId,
464
+ turn: await this.runTurnNow(logicalTurn, userHistoryEntryId),
465
+ };
466
+ }
467
+ catch (error) {
468
+ if (this.pendingGoalCommit === goal) {
469
+ this.goal = null;
470
+ this.pendingGoalCommit = undefined;
471
+ }
472
+ else {
473
+ await this.blockActiveGoal().catch(() => undefined);
474
+ }
475
+ throw error;
476
+ }
477
+ });
478
+ }
479
+ async resumeGoal() {
480
+ this.assertActive();
481
+ if (this.goal?.status !== "blocked") {
482
+ throw new Error(this.goal ? "goal is already active" : "no goal exists");
483
+ }
484
+ const goal = { ...this.goal, status: "active" };
485
+ return await this.runLogicalTurn(async (logicalTurn) => {
486
+ await this.setGoal(goal);
487
+ try {
488
+ if (logicalTurn.cancellationRequested) {
489
+ await this.blockActiveGoal();
490
+ return { turn: abortedTurnOutcome() };
491
+ }
492
+ const { userHistoryEntryId } = await this.record({
493
+ text: buildGoalContinuationText(goal),
494
+ });
495
+ if (logicalTurn.cancellationRequested) {
496
+ return { turn: await this.cancelLogicalTurn(userHistoryEntryId) };
497
+ }
498
+ return { turn: await this.runTurnNow(logicalTurn, userHistoryEntryId) };
499
+ }
500
+ catch (error) {
501
+ await this.blockActiveGoal().catch(() => undefined);
502
+ throw error;
503
+ }
504
+ });
505
+ }
506
+ async clearGoal() {
507
+ this.assertActive();
508
+ if (!this.goal) {
509
+ throw new Error("no goal exists");
510
+ }
511
+ await this.setGoal(null);
512
+ return await this.snapshot();
513
+ }
400
514
  async record(options) {
401
515
  this.assertActive();
402
516
  const userHistoryEntryId = await this.session.commitUserText(options.text, options.historyEntryId ? { historyEntryId: options.historyEntryId } : undefined);
@@ -406,51 +520,118 @@ class LocalHostedSessionHandle {
406
520
  };
407
521
  }
408
522
  async runTurn() {
523
+ return await this.runLogicalTurn((logicalTurn) => this.runTurnNow(logicalTurn));
524
+ }
525
+ async retryTurn() {
526
+ const userMessage = this.session.rawHistoryEntries.findLast((entry) => entry.message.role === "user");
527
+ if (userMessage && hasGoalTurnMetadata(userMessage.message)) {
528
+ throw new SessionRetryUnavailableError("goal-controlled turns cannot be retried; resume a blocked goal or start a new goal");
529
+ }
530
+ return await this.runTurn();
531
+ }
532
+ async runLogicalTurn(execute) {
409
533
  this.assertActive();
410
- const run = this.runTurnNow();
534
+ if (this.activeLogicalTurn) {
535
+ throw new Error("session turn is already active");
536
+ }
537
+ const logicalTurn = {
538
+ cancellationRequested: false,
539
+ pendingSteering: [],
540
+ };
541
+ this.activeLogicalTurn = logicalTurn;
542
+ const run = execute(logicalTurn);
411
543
  this.activeTurnPromise = run;
412
544
  try {
413
545
  return await run;
414
546
  }
415
547
  finally {
416
548
  if (this.activeTurnPromise === run) {
549
+ this.rejectBufferedLogicalSteering(logicalTurn, new Error("steering was not applied before the logical turn ended"));
417
550
  this.activeTurnPromise = undefined;
551
+ this.activeLogicalTurn = undefined;
552
+ await this.emitSnapshotResetIfChanged("assistant-message");
418
553
  }
419
554
  }
420
555
  }
421
- async runTurnNow() {
422
- const userMessage = this.session.rawHistoryEntries.findLast((entry) => entry.message.role === "user");
423
- if (!userMessage) {
556
+ async runTurnNow(logicalTurn, rootHistoryEntryId) {
557
+ const rootUserMessage = rootHistoryEntryId
558
+ ? this.session.rawHistoryEntries.find((entry) => entry.id === rootHistoryEntryId && entry.message.role === "user")
559
+ : this.session.rawHistoryEntries.findLast((entry) => entry.message.role === "user");
560
+ if (!rootUserMessage) {
424
561
  throw new Error("cannot run a turn without a user message");
425
562
  }
426
- let lastAssistantMessage;
427
- try {
428
- const result = await this.runtime.runTurn();
429
- lastAssistantMessage = result.finalMessage;
430
- if (result.aborted && this.draftAssistantMessage) {
431
- await this.interruptDraftAssistantMessage();
563
+ let goalRootHistoryEntryId = this.goal?.status === "active" ? rootUserMessage.id : undefined;
564
+ while (true) {
565
+ if (logicalTurn.cancellationRequested) {
566
+ return await this.cancelLogicalTurn(rootUserMessage.id);
432
567
  }
433
- const outcome = turnOutcomeFromResult(result, lastAssistantMessage);
434
- this.turnOutcomes.set(userMessage.id, outcome);
435
- await this.emitSnapshotResetIfChanged("assistant-message");
436
- return outcome;
437
- }
438
- catch (error) {
568
+ const committedSteering = [];
439
569
  try {
440
- await this.cleanupFailedTurn();
570
+ while (logicalTurn.pendingSteering.length > 0) {
571
+ committedSteering.push(await this.commitBufferedLogicalSteering(logicalTurn));
572
+ }
573
+ if (logicalTurn.cancellationRequested) {
574
+ return await this.cancelLogicalTurn(rootUserMessage.id, committedSteering);
575
+ }
576
+ const userMessage = this.session.rawHistoryEntries.findLast((entry) => entry.message.role === "user");
577
+ if (!userMessage) {
578
+ throw new Error("cannot run a turn without a user message");
579
+ }
580
+ const result = await this.runtime.runTurn();
581
+ const terminalResult = result.terminalResult;
582
+ if (terminalResult.aborted && this.draftAssistantMessage) {
583
+ await this.interruptDraftAssistantMessage();
584
+ }
585
+ const initialOutcome = turnOutcomeFromResult(result, result.finalMessage);
586
+ const terminalOutcome = turnOutcomeFromResult(terminalResult, terminalResult.finalMessage);
587
+ this.turnOutcomes.set(userMessage.id, initialOutcome);
588
+ for (const steering of committedSteering) {
589
+ this.turnOutcomes.set(steering.historyEntryId, initialOutcome);
590
+ }
591
+ if (this.goal?.status === "active") {
592
+ goalRootHistoryEntryId ??= rootUserMessage.id;
593
+ }
594
+ if (goalRootHistoryEntryId) {
595
+ this.turnOutcomes.set(goalRootHistoryEntryId, terminalOutcome);
596
+ }
597
+ if (terminalOutcome.status !== "completed") {
598
+ await this.blockActiveGoal();
599
+ }
600
+ await this.emitSnapshotResetIfChanged("assistant-message");
601
+ this.resolveCommittedLogicalSteering(committedSteering, initialOutcome);
602
+ if (logicalTurn.cancellationRequested) {
603
+ return await this.cancelLogicalTurn(rootUserMessage.id);
604
+ }
605
+ if (terminalOutcome.status !== "completed" || this.goal?.status !== "active") {
606
+ return goalRootHistoryEntryId ? terminalOutcome : initialOutcome;
607
+ }
608
+ if (logicalTurn.pendingSteering.length > 0) {
609
+ continue;
610
+ }
611
+ await this.session.commitUserText(buildGoalContinuationText(this.goal));
441
612
  }
442
- catch {
443
- // Preserve the original turn failure for the protocol response.
613
+ catch (error) {
614
+ this.rejectCommittedLogicalSteering(committedSteering, error);
615
+ await this.cleanupFailedTurn().catch(() => undefined);
616
+ await this.blockActiveGoal().catch(() => undefined);
617
+ throw error;
444
618
  }
445
- throw error;
446
619
  }
447
620
  }
448
621
  interruptTurn() {
449
622
  this.assertActive();
450
- return this.runtime.interruptTurn();
623
+ const logicalTurn = this.activeLogicalTurn;
624
+ if (logicalTurn) {
625
+ logicalTurn.cancellationRequested = true;
626
+ }
627
+ return this.runtime.interruptTurn() || Boolean(logicalTurn);
451
628
  }
452
629
  interruptActiveWork() {
453
- let interrupted = this.runtime.interruptTurn();
630
+ const logicalTurn = this.activeLogicalTurn;
631
+ if (logicalTurn) {
632
+ logicalTurn.cancellationRequested = true;
633
+ }
634
+ let interrupted = this.runtime.interruptTurn() || Boolean(logicalTurn);
454
635
  for (const abortController of this.activeWorkAbortControllers) {
455
636
  if (!abortController.signal.aborted) {
456
637
  abortController.abort();
@@ -476,30 +657,43 @@ class LocalHostedSessionHandle {
476
657
  }
477
658
  steer(text) {
478
659
  this.assertActive();
479
- if (!this.activeTurnPromise) {
660
+ if (this.runtime.isTurnRunning) {
661
+ const submission = this.runtime.steer(text);
662
+ return {
663
+ id: submission.id,
664
+ applied: submission.applied.then((association) => ({
665
+ userHistoryEntryId: association.historyEntryId,
666
+ })),
667
+ result: submission.result.then(async (association) => {
668
+ const turn = turnOutcomeFromResult(association.result, association.result.finalMessage);
669
+ await this.commitSteeringTurnOutcome(association.historyEntryId, turn);
670
+ return {
671
+ userHistoryEntryId: association.historyEntryId,
672
+ turn,
673
+ };
674
+ }),
675
+ };
676
+ }
677
+ const logicalTurn = this.activeLogicalTurn;
678
+ if (!logicalTurn || this.goal?.status !== "active") {
480
679
  throw new Error("cannot steer without an active turn");
481
680
  }
482
- const submission = this.runtime.steer(text);
483
- return {
484
- id: submission.id,
485
- applied: submission.applied.then(async (association) => {
486
- await this.commitSnapshot();
487
- return { userHistoryEntryId: association.historyEntryId };
488
- }),
489
- result: submission.result.then(async (association) => {
490
- const turn = turnOutcomeFromResult(association.result, association.result.finalMessage);
491
- this.turnOutcomes.set(association.historyEntryId, turn);
492
- await this.emitSnapshotResetIfChanged("assistant-message");
493
- return {
494
- userHistoryEntryId: association.historyEntryId,
495
- turn,
496
- };
497
- }),
498
- };
681
+ return this.bufferLogicalSteering(logicalTurn, text);
499
682
  }
500
683
  cancelSteering() {
501
684
  this.assertActive();
502
- return this.runtime.cancelSteering();
685
+ const cancelled = this.runtime.cancelSteering();
686
+ const logicalTurn = this.activeLogicalTurn;
687
+ if (!logicalTurn) {
688
+ return cancelled;
689
+ }
690
+ const buffered = logicalTurn.pendingSteering.splice(0);
691
+ const error = new Error("steering submission was cancelled");
692
+ for (const submission of buffered) {
693
+ submission.rejectApplied(error);
694
+ submission.rejectResult(error);
695
+ }
696
+ return [...cancelled, ...buffered.map(({ id, text }) => ({ id, text }))];
503
697
  }
504
698
  async exec(options) {
505
699
  return await this.runExec(options.execId, options.signal, async (signal) => {
@@ -875,6 +1069,120 @@ class LocalHostedSessionHandle {
875
1069
  throw new AggregateError(errors, "failed to dispose hosted session");
876
1070
  }
877
1071
  }
1072
+ buildNewGoal(objective) {
1073
+ this.assertActive();
1074
+ if (this.goal) {
1075
+ throw new Error("a goal already exists; clear it before creating another");
1076
+ }
1077
+ const normalized = objective.trim();
1078
+ if (!normalized) {
1079
+ throw new Error("goal objective must not be empty");
1080
+ }
1081
+ return { objective: normalized, status: "active" };
1082
+ }
1083
+ async setGoal(goal) {
1084
+ const previousGoal = structuredClone(this.goal);
1085
+ this.goal = structuredClone(goal);
1086
+ try {
1087
+ await this.emitPatch("goal", [{ type: "goal.set", goal: structuredClone(goal) }]);
1088
+ }
1089
+ catch (error) {
1090
+ this.goal = previousGoal;
1091
+ throw error;
1092
+ }
1093
+ }
1094
+ async blockActiveGoal() {
1095
+ if (this.goal?.status === "active") {
1096
+ await this.setGoal({ ...this.goal, status: "blocked" });
1097
+ }
1098
+ }
1099
+ bufferLogicalSteering(logicalTurn, text) {
1100
+ const normalized = text.trim();
1101
+ if (!normalized) {
1102
+ throw new Error("steering input must not be empty");
1103
+ }
1104
+ let resolveApplied;
1105
+ let rejectApplied;
1106
+ const applied = new Promise((resolve, reject) => {
1107
+ resolveApplied = resolve;
1108
+ rejectApplied = reject;
1109
+ });
1110
+ let resolveResult;
1111
+ let rejectResult;
1112
+ const result = new Promise((resolve, reject) => {
1113
+ resolveResult = resolve;
1114
+ rejectResult = reject;
1115
+ });
1116
+ const submission = {
1117
+ id: `logical-steering-${randomUUID()}`,
1118
+ text: normalized,
1119
+ applied,
1120
+ result,
1121
+ resolveApplied,
1122
+ resolveResult,
1123
+ rejectApplied,
1124
+ rejectResult,
1125
+ };
1126
+ logicalTurn.pendingSteering.push(submission);
1127
+ return { id: submission.id, applied, result };
1128
+ }
1129
+ async commitBufferedLogicalSteering(logicalTurn) {
1130
+ const submissions = logicalTurn.pendingSteering.splice(0);
1131
+ if (submissions.length === 0) {
1132
+ throw new Error("cannot commit empty logical steering");
1133
+ }
1134
+ try {
1135
+ const goal = this.goal;
1136
+ if (goal?.status !== "active") {
1137
+ throw new Error("cannot commit logical steering without an active goal");
1138
+ }
1139
+ const historyEntryId = await this.session.commitUserText(prependGoalPolicy(formatSteeringUserMessage(submissions.map((submission) => submission.text)), goal));
1140
+ for (const submission of submissions) {
1141
+ submission.resolveApplied({ userHistoryEntryId: historyEntryId });
1142
+ }
1143
+ return { historyEntryId, submissions };
1144
+ }
1145
+ catch (error) {
1146
+ const steeringError = error instanceof Error ? error : new Error(String(error));
1147
+ for (const submission of submissions) {
1148
+ submission.rejectApplied(steeringError);
1149
+ submission.rejectResult(steeringError);
1150
+ }
1151
+ throw error;
1152
+ }
1153
+ }
1154
+ resolveCommittedLogicalSteering(committed, turn) {
1155
+ for (const { historyEntryId, submissions } of committed) {
1156
+ for (const submission of submissions) {
1157
+ submission.resolveResult({ userHistoryEntryId: historyEntryId, turn });
1158
+ }
1159
+ }
1160
+ }
1161
+ rejectCommittedLogicalSteering(committed, error) {
1162
+ const steeringError = error instanceof Error ? error : new Error(String(error));
1163
+ for (const { submissions } of committed) {
1164
+ for (const submission of submissions) {
1165
+ submission.rejectResult(steeringError);
1166
+ }
1167
+ }
1168
+ }
1169
+ rejectBufferedLogicalSteering(logicalTurn, error) {
1170
+ for (const submission of logicalTurn.pendingSteering.splice(0)) {
1171
+ submission.rejectApplied(error);
1172
+ submission.rejectResult(error);
1173
+ }
1174
+ }
1175
+ async cancelLogicalTurn(rootHistoryEntryId, committedSteering = []) {
1176
+ const outcome = abortedTurnOutcome();
1177
+ this.turnOutcomes.set(rootHistoryEntryId, outcome);
1178
+ for (const steering of committedSteering) {
1179
+ this.turnOutcomes.set(steering.historyEntryId, outcome);
1180
+ }
1181
+ await this.blockActiveGoal();
1182
+ await this.emitSnapshotResetIfChanged("assistant-message");
1183
+ this.resolveCommittedLogicalSteering(committedSteering, outcome);
1184
+ return outcome;
1185
+ }
878
1186
  async commitSnapshot() {
879
1187
  const write = this.snapshotQueue.catch(() => undefined).then(() => this.writeSnapshot());
880
1188
  this.snapshotQueue = write.catch(() => undefined);
@@ -1024,7 +1332,8 @@ class LocalHostedSessionHandle {
1024
1332
  ? { usageCheckpoint: { ...agentState.usageCheckpoint } }
1025
1333
  : {}),
1026
1334
  },
1027
- lifecycle: this.runtime.isTurnRunning ? "running" : "idle",
1335
+ lifecycle: this.activeTurnPromise || this.runtime.isTurnRunning ? "running" : "idle",
1336
+ goal: structuredClone(this.goal),
1028
1337
  costTotal: this.costTotal,
1029
1338
  settings: {
1030
1339
  personaId: this.runtime.persona.id,
@@ -1178,6 +1487,28 @@ class LocalHostedSessionHandle {
1178
1487
  this.runtimeEventQueue = write.catch(() => undefined);
1179
1488
  return write;
1180
1489
  }
1490
+ async commitSteeringTurnOutcome(historyEntryId, turn) {
1491
+ const write = this.runtimeEventQueue
1492
+ .catch(() => undefined)
1493
+ .then(async () => {
1494
+ this.turnOutcomes.set(historyEntryId, turn);
1495
+ const message = this.committedSnapshot?.messages.find((candidate) => candidate.id === historyEntryId);
1496
+ if (!message) {
1497
+ throw new Error(`missing steering user message '${historyEntryId}'`);
1498
+ }
1499
+ if (isDeepStrictEqual(message.turn, turn)) {
1500
+ return;
1501
+ }
1502
+ await this.emitPatch("assistant-message", [
1503
+ {
1504
+ type: "message.replace",
1505
+ message: { ...structuredClone(message), turn },
1506
+ },
1507
+ ]);
1508
+ });
1509
+ this.runtimeEventQueue = write.catch(() => undefined);
1510
+ await write;
1511
+ }
1181
1512
  removeToolRun(tool, changes) {
1182
1513
  this.tools.delete(tool.id);
1183
1514
  for (const facetId of tool.facetIds) {
@@ -1310,9 +1641,13 @@ class LocalHostedSessionHandle {
1310
1641
  });
1311
1642
  return;
1312
1643
  }
1313
- case "user_message":
1644
+ case "user_message": {
1645
+ const pendingGoal = this.pendingGoalCommit;
1314
1646
  await this.emitPatch("user-message", [
1315
1647
  this.agentStateChange(),
1648
+ ...(pendingGoal
1649
+ ? [{ type: "goal.set", goal: structuredClone(pendingGoal) }]
1650
+ : []),
1316
1651
  {
1317
1652
  type: "message.append",
1318
1653
  message: {
@@ -1324,7 +1659,11 @@ class LocalHostedSessionHandle {
1324
1659
  timelineItem: timelineItemForMessage(event.historyEntryId),
1325
1660
  },
1326
1661
  ], { persist: true });
1662
+ if (pendingGoal && this.pendingGoalCommit === pendingGoal) {
1663
+ this.pendingGoalCommit = undefined;
1664
+ }
1327
1665
  return;
1666
+ }
1328
1667
  case "history_rewound":
1329
1668
  this.reconcileProjections({ removeMissingAgents: true });
1330
1669
  await this.emitSnapshotResetIfChanged("maintenance");
@@ -1718,6 +2057,9 @@ class LocalHostedSessionHandle {
1718
2057
  await this.emitSnapshotResetIfChanged("assistant-message");
1719
2058
  }
1720
2059
  }
2060
+ function abortedTurnOutcome() {
2061
+ return { status: "aborted", stopReason: "aborted" };
2062
+ }
1721
2063
  function turnOutcomeFromResult(result, assistantMessage) {
1722
2064
  if (result.blocked) {
1723
2065
  return { status: "blocked", ...result.blocked };
@@ -1806,6 +2148,10 @@ function normalizeRecoveredSnapshot(snapshot) {
1806
2148
  const legacyAgentState = recovered.agentState.contextEpoch === LEGACY_SESSION_CONTEXT_EPOCH;
1807
2149
  let changed = recovered.lifecycle !== "idle" || legacyAgentState;
1808
2150
  recovered.lifecycle = "idle";
2151
+ if (recovered.goal?.status === "active") {
2152
+ changed = true;
2153
+ recovered.goal.status = "blocked";
2154
+ }
1809
2155
  if (Object.keys(recovered.agents).length > 0) {
1810
2156
  changed = true;
1811
2157
  recovered.agents = {};