@selesai/code 0.4.0 → 0.5.1

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 (60) hide show
  1. package/dist/core/agent-session-auto-handoff.test.d.ts +2 -0
  2. package/dist/core/agent-session-auto-handoff.test.d.ts.map +1 -0
  3. package/dist/core/agent-session-auto-handoff.test.js +161 -0
  4. package/dist/core/agent-session-auto-handoff.test.js.map +1 -0
  5. package/dist/core/agent-session.d.ts +4 -0
  6. package/dist/core/agent-session.d.ts.map +1 -1
  7. package/dist/core/agent-session.js +43 -0
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/core/settings-manager-auto-handoff.test.d.ts +2 -0
  10. package/dist/core/settings-manager-auto-handoff.test.d.ts.map +1 -0
  11. package/dist/core/settings-manager-auto-handoff.test.js +29 -0
  12. package/dist/core/settings-manager-auto-handoff.test.js.map +1 -0
  13. package/dist/core/settings-manager.d.ts +9 -0
  14. package/dist/core/settings-manager.d.ts.map +1 -1
  15. package/dist/core/settings-manager.js +22 -0
  16. package/dist/core/settings-manager.js.map +1 -1
  17. package/dist/extensions/context-compaction-reminder.ts +1 -1
  18. package/dist/extensions/pi-powerline-footer/index.ts +43 -2
  19. package/dist/extensions/pi-powerline-footer/session-usage.ts +44 -0
  20. package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +47 -0
  21. package/dist/extensions/pi-subagents/README.md +1 -1
  22. package/dist/extensions/pi-subagents/agents/architect.md +150 -22
  23. package/dist/extensions/pi-subagents/agents/builder.md +1 -1
  24. package/dist/extensions/pi-subagents/agents/commentator.md +2 -2
  25. package/dist/extensions/pi-subagents/agents/explorer.md +2 -3
  26. package/dist/extensions/pi-subagents/agents/recapper.md +2 -2
  27. package/dist/extensions/pi-subagents/agents/researcher.md +2 -2
  28. package/dist/extensions/pi-subagents/src/agents/agents.ts +46 -0
  29. package/dist/extensions/pi-subagents/src/extension/index.ts +2 -1
  30. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +2 -0
  31. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +24 -0
  32. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +25 -1
  33. package/dist/extensions/workflow/adapter.ts +34 -174
  34. package/dist/extensions/workflow/modes/prototype.ts +12 -14
  35. package/dist/extensions/workflow/modes/quick.ts +12 -14
  36. package/dist/extensions/workflow/modes/task.ts +8 -5
  37. package/dist/extensions/workflow/state-machine.ts +3 -0
  38. package/dist/extensions/workflow/task-validators.ts +69 -0
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  43. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  44. package/dist/modes/interactive/components/settings-selector.js +20 -0
  45. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  46. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  47. package/dist/modes/interactive/interactive-mode.js +8 -0
  48. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  49. package/dist/modes/rpc/rpc-client.d.ts +8 -0
  50. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  51. package/dist/modes/rpc/rpc-client.js +12 -0
  52. package/dist/modes/rpc/rpc-client.js.map +1 -1
  53. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  54. package/dist/modes/rpc/rpc-mode.js +14 -0
  55. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  56. package/dist/modes/rpc/rpc-types.d.ts +20 -0
  57. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  58. package/dist/modes/rpc/rpc-types.js.map +1 -1
  59. package/docs/workflows.md +9 -4
  60. package/package.json +1 -1
@@ -291,11 +291,48 @@ export class AgentSession {
291
291
  try {
292
292
  await this._extensionRunner.emit({ type: "agent_settled" });
293
293
  this._emit({ type: "agent_settled" });
294
+ await this._checkAutoHandoff();
294
295
  }
295
296
  finally {
296
297
  this._resolveIdleWaitIfIdle();
297
298
  }
298
299
  }
300
+ _autoHandoffTriggered = false;
301
+ async _checkAutoHandoff() {
302
+ if (!this.settingsManager.getAutoHandoffEnabled())
303
+ return;
304
+ const usage = this.getContextUsage();
305
+ if (!usage || usage.tokens === null)
306
+ return;
307
+ const threshold = this.settingsManager.getAutoHandoffThresholdTokens();
308
+ if (usage.tokens < threshold) {
309
+ this._autoHandoffTriggered = false;
310
+ return;
311
+ }
312
+ if (this._autoHandoffTriggered)
313
+ return;
314
+ this._autoHandoffTriggered = true;
315
+ // handoff-new requires interactive mode (uses editor/dialog UI).
316
+ // ponytail: _extensionMode is set to "tui" by InteractiveMode.bindCurrentSessionExtensions()
317
+ // before the first prompt runs, so by the time _emitAgentSettled() calls this the mode is
318
+ // reliable. Default "print" only applies before extensions are bound.
319
+ if (this._extensionMode !== "tui")
320
+ return;
321
+ const command = this._extensionRunner.getCommand("handoff-new");
322
+ if (!command)
323
+ return;
324
+ const ctx = this._extensionRunner.createCommandContext();
325
+ try {
326
+ await command.handler("", ctx);
327
+ }
328
+ catch (err) {
329
+ this._extensionRunner.emitError({
330
+ extensionPath: "command:handoff-new",
331
+ event: "auto-handoff",
332
+ error: err instanceof Error ? err.message : String(err),
333
+ });
334
+ }
335
+ }
299
336
  // Track last assistant message for auto-compaction check
300
337
  _lastAssistantMessage = undefined;
301
338
  /** Internal handler for agent events - shared by subscribe and reconnect */
@@ -1724,6 +1761,12 @@ export class AgentSession {
1724
1761
  get autoCompactionEnabled() {
1725
1762
  return this.settingsManager.getCompactionEnabled();
1726
1763
  }
1764
+ get autoHandoffEnabled() {
1765
+ return this.settingsManager.getAutoHandoffEnabled();
1766
+ }
1767
+ get autoHandoffThresholdTokens() {
1768
+ return this.settingsManager.getAutoHandoffThresholdTokens();
1769
+ }
1727
1770
  async bindExtensions(bindings) {
1728
1771
  if (bindings.uiContext !== undefined) {
1729
1772
  this._extensionUIContext = bindings.uiContext;