tinker-agent 2.7.0 → 2.8.0

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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,21 @@ All notable user-facing changes to Tinker are documented here. The project follo
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.8.0] - 2026-09-04
9
+
10
+ ### Changed
11
+
12
+ - Refresh built-in tool descriptions so filesystem scope, local command
13
+ execution, waiting, and context swaps are stated more precisely to the model.
14
+ - Remove obsolete implementation roadmaps and reconcile the remaining design
15
+ documents with the behavior already delivered by the runtime.
16
+
17
+ ### Fixed
18
+
19
+ - Re-evaluate context pressure after a completed turn so automatic maintenance
20
+ still runs when closing the turn itself moves the active context above its
21
+ configured pressure threshold.
22
+
8
23
  ## [2.7.0] - 2026-09-04
9
24
 
10
25
  ### Added
@@ -346,7 +361,8 @@ All notable user-facing changes to Tinker are documented here. The project follo
346
361
  - First formal npm release under the `tinker-agent` package name with the `tinker`
347
362
  executable.
348
363
 
349
- [Unreleased]: https://github.com/ishowshao/tinker/compare/v2.7.0...HEAD
364
+ [Unreleased]: https://github.com/ishowshao/tinker/compare/v2.8.0...HEAD
365
+ [2.8.0]: https://github.com/ishowshao/tinker/releases/tag/v2.8.0
350
366
  [2.7.0]: https://github.com/ishowshao/tinker/releases/tag/v2.7.0
351
367
  [2.6.0]: https://github.com/ishowshao/tinker/releases/tag/v2.6.0
352
368
  [2.5.0]: https://github.com/ishowshao/tinker/releases/tag/v2.5.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tinker-agent",
3
- "version": "2.7.0",
3
+ "version": "2.8.0",
4
4
  "description": "A personal coding agent with an interactive TUI and one-shot CLI.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -2499,6 +2499,7 @@ class DefaultRuntimeSession implements RuntimeSession {
2499
2499
  }
2500
2500
  await this.settleClosedTurnSkills();
2501
2501
  if (result.status === "completed") {
2502
+ await this.evaluateClosedTurnContextPressure();
2502
2503
  await this.performAutomaticContextMaintenance();
2503
2504
  }
2504
2505
  return result;
@@ -2522,6 +2523,21 @@ class DefaultRuntimeSession implements RuntimeSession {
2522
2523
  }
2523
2524
  }
2524
2525
 
2526
+ private async evaluateClosedTurnContextPressure(): Promise<void> {
2527
+ const automation = this.requireContextAutomation();
2528
+ if (!automation.automaticSwapOnly) return;
2529
+
2530
+ const snapshot = this.requireContextManager().measureCurrent();
2531
+ await this.append({
2532
+ type: "context.usage.updated",
2533
+ sessionId: this.sessionId,
2534
+ data: { phase: "turn_close", snapshot },
2535
+ });
2536
+ if (snapshot.pressure !== "normal") {
2537
+ this.pendingAutomaticContextMaintenance = true;
2538
+ }
2539
+ }
2540
+
2525
2541
  private async performAutomaticContextMaintenance(): Promise<void> {
2526
2542
  if (!this.pendingAutomaticContextMaintenance) return;
2527
2543
  this.pendingAutomaticContextMaintenance = false;
@@ -46,7 +46,7 @@ export type SessionStartedData = {
46
46
  };
47
47
 
48
48
  export type ContextUsageUpdatedData = {
49
- phase: "initial" | "preflight" | "measured" | "revision";
49
+ phase: "initial" | "preflight" | "measured" | "turn_close" | "revision";
50
50
  snapshot: ContextUsageSnapshot;
51
51
  };
52
52
 
package/src/tools/bash.ts CHANGED
@@ -44,7 +44,7 @@ export function createBashToolExecutor(options: BashToolOptions): ToolExecutor {
44
44
  return defineToolExecutor("bash", {
45
45
  definition: {
46
46
  name: "Bash",
47
- description: "Run a shell command in the local workspace.",
47
+ description: "Run a shell command locally.",
48
48
  parameters: {
49
49
  type: "object",
50
50
  additionalProperties: false,
@@ -53,7 +53,7 @@ export const CONTEXT_SWAP_CANDIDATES_TOOL_DEFINITION: ToolDefinition = Object.fr
53
53
  export const CONTEXT_SWAP_TOOL_DEFINITION: ToolDefinition = Object.freeze({
54
54
  name: "ContextSwap",
55
55
  description:
56
- "Schedule selected ContextSwapCandidates for replacement by compact Recall-backed placeholders. The swap runs after this iteration's tool frame closes and preserves canonical history for RecallGet. Pass only candidate IDs returned by ContextSwapCandidates.",
56
+ "Schedule selected ContextSwapCandidates for replacement by compact Recall-backed placeholders and preserve canonical history for RecallGet. Pass only candidate IDs returned by ContextSwapCandidates.",
57
57
  parameters: {
58
58
  type: "object",
59
59
  additionalProperties: false,
package/src/tools/read.ts CHANGED
@@ -32,7 +32,7 @@ export function createReadToolExecutor(options: ReadToolOptions): ToolExecutor {
32
32
  definition: {
33
33
  name: "Read",
34
34
  description:
35
- "Read a file from the local workspace. Use offset and limit for line ranges.",
35
+ "Read a file from the local filesystem. Use offset and limit for line ranges.",
36
36
  parameters: {
37
37
  type: "object",
38
38
  additionalProperties: false,
package/src/tools/wait.ts CHANGED
@@ -13,9 +13,7 @@ export function createWaitToolExecutor(): ToolExecutor {
13
13
  return defineToolExecutor("wait", {
14
14
  definition: {
15
15
  name: "Wait",
16
- description:
17
- `Wait for a given number of integer seconds before continuing, from ${MIN_WAIT_SECONDS} to ${MAX_WAIT_SECONDS}. ` +
18
- "Use this to pause between polling attempts or to give an external process time to make progress.",
16
+ description: `Wait for a given number of integer seconds before continuing, from ${MIN_WAIT_SECONDS} to ${MAX_WAIT_SECONDS}. `,
19
17
  parameters: {
20
18
  type: "object",
21
19
  additionalProperties: false,