@ponythewhite/base-context 1.0.14 → 1.0.16

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 (90) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/base-context-runtime/pyproject.toml +1 -1
  3. package/dist/base-context-runtime/src/rlm/bash.py +19 -0
  4. package/dist/base-context-runtime/src/rlm/job_watch.py +156 -0
  5. package/dist/base-context-runtime/src/rlm/repl.md +28 -6
  6. package/dist/base-context-runtime/src/rlm/repl.py +6 -1
  7. package/dist/base-context-runtime/test/test_bash.py +4 -4
  8. package/dist/base-context-runtime/test/test_job_watch.py +67 -0
  9. package/dist/base-context-runtime/uv.lock +1 -1
  10. package/dist/build-info.json +1 -1
  11. package/dist/bundle/{bundled-modules-UODO7ZR7.js → bundled-modules-2DMTK7VK.js} +2 -2
  12. package/dist/bundle/{chunk-SX7CAXWU.js → chunk-MSH6QRP5.js} +1730 -867
  13. package/dist/bundle/{chunk-NLRWERWA.js → chunk-T2OK7SRV.js} +53 -21
  14. package/dist/bundle/{cli-main-6GXXIMQQ.js → cli-main-WL2L5IEQ.js} +2 -2
  15. package/dist/bundle/cli.js +1 -1
  16. package/dist/bundle/{main-HF64B4HM.js → main-XPIEIEQJ.js} +2 -2
  17. package/dist/core/agent-session.d.ts +2 -0
  18. package/dist/core/agent-session.d.ts.map +1 -1
  19. package/dist/core/agent-session.js +191 -33
  20. package/dist/core/agent-session.js.map +1 -1
  21. package/dist/core/compaction/compaction.d.ts +1 -1
  22. package/dist/core/compaction/compaction.d.ts.map +1 -1
  23. package/dist/core/compaction/compaction.js +11 -9
  24. package/dist/core/compaction/compaction.js.map +1 -1
  25. package/dist/core/history-index-worker.d.ts.map +1 -1
  26. package/dist/core/history-index-worker.js +22 -1
  27. package/dist/core/history-index-worker.js.map +1 -1
  28. package/dist/core/history-index.d.ts +2 -0
  29. package/dist/core/history-index.d.ts.map +1 -1
  30. package/dist/core/history-index.js.map +1 -1
  31. package/dist/core/inference-coordinator.d.ts.map +1 -1
  32. package/dist/core/inference-coordinator.js +13 -2
  33. package/dist/core/inference-coordinator.js.map +1 -1
  34. package/dist/core/job-watch.d.ts +120 -0
  35. package/dist/core/job-watch.d.ts.map +1 -0
  36. package/dist/core/job-watch.js +648 -0
  37. package/dist/core/job-watch.js.map +1 -0
  38. package/dist/core/kernel/repl-manager.d.ts +5 -1
  39. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  40. package/dist/core/kernel/repl-manager.js +57 -0
  41. package/dist/core/kernel/repl-manager.js.map +1 -1
  42. package/dist/core/kernel/shared.d.ts +12 -0
  43. package/dist/core/kernel/shared.d.ts.map +1 -1
  44. package/dist/core/kernel/shared.js.map +1 -1
  45. package/dist/core/prompts/rlm.d.ts.map +1 -1
  46. package/dist/core/prompts/rlm.js +49 -39
  47. package/dist/core/prompts/rlm.js.map +1 -1
  48. package/dist/core/session-manager.d.ts +10 -0
  49. package/dist/core/session-manager.d.ts.map +1 -1
  50. package/dist/core/session-manager.js +66 -1
  51. package/dist/core/session-manager.js.map +1 -1
  52. package/dist/core/tools/prime-context.d.ts.map +1 -1
  53. package/dist/core/tools/prime-context.js +1 -1
  54. package/dist/core/tools/prime-context.js.map +1 -1
  55. package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
  56. package/dist/modes/daemon/daemon-mode.js +17 -17
  57. package/dist/modes/daemon/daemon-mode.js.map +1 -1
  58. package/dist/modes/daemon/daemon-worker-client.d.ts +1 -0
  59. package/dist/modes/daemon/daemon-worker-client.d.ts.map +1 -1
  60. package/dist/modes/daemon/daemon-worker-client.js +8 -0
  61. package/dist/modes/daemon/daemon-worker-client.js.map +1 -1
  62. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  63. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  64. package/dist/modes/interactive/interactive-mode.js +31 -5
  65. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  66. package/dist/skills/agent-message/SKILL.md +8 -2
  67. package/dist/skills/bounded-inspect/SKILL.md +78 -0
  68. package/dist/skills/bounded-inspect/pyproject.toml +16 -0
  69. package/dist/skills/bounded-inspect/src/bounded_inspect/__init__.py +313 -0
  70. package/dist/skills/bounded-inspect/src/bounded_inspect/__main__.py +3 -0
  71. package/dist/skills/job-watch/SKILL.md +43 -0
  72. package/dist/skills/job-watch/pyproject.toml +13 -0
  73. package/dist/skills/job-watch/src/job_watch/__init__.py +61 -0
  74. package/dist/skills/rlm-heartbeat/SKILL.md +10 -6
  75. package/dist/utils/file-lines.d.ts.map +1 -1
  76. package/dist/utils/file-lines.js +6 -2
  77. package/dist/utils/file-lines.js.map +1 -1
  78. package/docs/rlm-runtime.md +4 -1
  79. package/docs/skills.md +18 -26
  80. package/docs/upstream-1.0.15.md +83 -0
  81. package/package.json +4 -4
  82. package/skills/agent-message/SKILL.md +8 -2
  83. package/skills/bounded-inspect/SKILL.md +78 -0
  84. package/skills/bounded-inspect/pyproject.toml +16 -0
  85. package/skills/bounded-inspect/src/bounded_inspect/__init__.py +313 -0
  86. package/skills/bounded-inspect/src/bounded_inspect/__main__.py +3 -0
  87. package/skills/job-watch/SKILL.md +43 -0
  88. package/skills/job-watch/pyproject.toml +13 -0
  89. package/skills/job-watch/src/job_watch/__init__.py +61 -0
  90. package/skills/rlm-heartbeat/SKILL.md +10 -6
@@ -1846,13 +1846,16 @@ export class InteractiveMode {
1846
1846
  }
1847
1847
  async refreshConnectionCatalog() {
1848
1848
  this.invalidateConnectionModelRefresh();
1849
+ const read = this.captureConnectionStateRead();
1849
1850
  const [state, commands, modelCatalog, resources] = await Promise.all([
1850
1851
  this.agentConnection.getState(),
1851
1852
  this.agentConnection.getCommands().catch(() => []),
1852
1853
  this.agentConnection.getModelCatalog(),
1853
1854
  this.agentConnection.getResourceSnapshot(),
1854
1855
  ]);
1855
- this.applyConnectionStateSnapshot(state);
1856
+ if (!this.isConnectionStateReadCurrent(read))
1857
+ return;
1858
+ this.applyConnectionStateSnapshot(state, read);
1856
1859
  this.connectionCommands = commands;
1857
1860
  this.applyConnectionModelCatalog(modelCatalog);
1858
1861
  this.connectionModelsFetchedAt = Date.now();
@@ -1889,7 +1892,23 @@ export class InteractiveMode {
1889
1892
  getScopedHeartbeats() {
1890
1893
  return scopeHeartbeatsToSession(this.heartbeatCatalog, this.connectionState, this.subagentSnapshots.values());
1891
1894
  }
1892
- applyConnectionStateSnapshot(state) {
1895
+ captureConnectionStateRead() {
1896
+ return {
1897
+ connection: this.agentConnection,
1898
+ generation: this.sessionEventGeneration,
1899
+ goal: this.connectionState?.goal,
1900
+ };
1901
+ }
1902
+ isConnectionStateReadCurrent(read) {
1903
+ return read.connection === this.agentConnection && read.generation === this.sessionEventGeneration;
1904
+ }
1905
+ applyConnectionStateSnapshot(state, read) {
1906
+ const current = this.connectionState;
1907
+ // A pending read must not replace a goal observation applied after that read began.
1908
+ // Authoritative replacement/resync snapshots apply without a read capture.
1909
+ if (read && current?.sessionId === state.sessionId && current.goal !== read.goal) {
1910
+ state = { ...state, goal: current.goal };
1911
+ }
1893
1912
  this.bindPromptStashSession(state.sessionId);
1894
1913
  this.connectionState = state;
1895
1914
  this.scheduleHeartbeatManagerRefresh();
@@ -5098,9 +5117,10 @@ export class InteractiveMode {
5098
5117
  return `Goal paused (${this.formatGoalElapsed(goal.timeUsedSeconds)})`;
5099
5118
  case "budget_limited":
5100
5119
  return `Goal budget limited (${this.formatGoalElapsed(goal.timeUsedSeconds)})`;
5120
+ case "error":
5121
+ return theme.fg("error", "Goal error") + theme.getFgAnsi("muted");
5101
5122
  case "idle":
5102
5123
  case "complete":
5103
- case "error":
5104
5124
  return undefined;
5105
5125
  default: {
5106
5126
  const _exhaustive = goal.status;
@@ -5469,13 +5489,16 @@ export class InteractiveMode {
5469
5489
  this.ui.requestRender();
5470
5490
  }
5471
5491
  async renderInitialMessages() {
5492
+ const read = this.captureConnectionStateRead();
5472
5493
  const snapshot = await this.agentConnection.getInitialSnapshot();
5494
+ if (!this.isConnectionStateReadCurrent(read))
5495
+ return;
5473
5496
  const context = this.getSessionContextFromConnectionSnapshot(snapshot);
5474
5497
  const state = snapshot.state;
5475
5498
  const streamingMessage = snapshot.streamingMessage;
5476
5499
  this.rlmNodeId = snapshot.parent?.childId;
5477
5500
  this.seedSubagentSummary(snapshot.children);
5478
- this.applyConnectionStateSnapshot(state);
5501
+ this.applyConnectionStateSnapshot(state, read);
5479
5502
  this.restoreTurnStartFromMessages(context.messages);
5480
5503
  await this.renderSessionContext(context, {
5481
5504
  updateFooter: true,
@@ -6306,10 +6329,13 @@ export class InteractiveMode {
6306
6329
  return showFullPaneOverlay(this.ui, component, options);
6307
6330
  }
6308
6331
  async showSettingsSelector() {
6332
+ const read = this.captureConnectionStateRead();
6309
6333
  let state;
6310
6334
  try {
6311
6335
  state = await this.agentConnection.getState();
6312
- this.applyConnectionStateSnapshot(state);
6336
+ if (!this.isConnectionStateReadCurrent(read))
6337
+ return;
6338
+ this.applyConnectionStateSnapshot(state, read);
6313
6339
  }
6314
6340
  catch (error) {
6315
6341
  this.showError(error instanceof Error ? error.message : String(error));