@dyyz1993/pi-coding-agent 0.69.11 → 0.69.13

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 (77) hide show
  1. package/dist/core/agent-session.d.ts +4 -0
  2. package/dist/core/agent-session.d.ts.map +1 -1
  3. package/dist/core/agent-session.js +14 -11
  4. package/dist/core/agent-session.js.map +1 -1
  5. package/dist/core/extensions/index.d.ts +1 -1
  6. package/dist/core/extensions/index.d.ts.map +1 -1
  7. package/dist/core/extensions/index.js.map +1 -1
  8. package/dist/core/extensions/runner.d.ts +5 -4
  9. package/dist/core/extensions/runner.d.ts.map +1 -1
  10. package/dist/core/extensions/runner.js +73 -25
  11. package/dist/core/extensions/runner.js.map +1 -1
  12. package/dist/core/extensions/server-channel.d.ts +27 -0
  13. package/dist/core/extensions/server-channel.d.ts.map +1 -0
  14. package/dist/core/extensions/server-channel.js +40 -0
  15. package/dist/core/extensions/server-channel.js.map +1 -0
  16. package/dist/core/extensions/types.d.ts +19 -29
  17. package/dist/core/extensions/types.d.ts.map +1 -1
  18. package/dist/core/extensions/types.js.map +1 -1
  19. package/dist/core/file-store/internal-git.d.ts +31 -0
  20. package/dist/core/file-store/internal-git.d.ts.map +1 -0
  21. package/dist/core/file-store/internal-git.js +176 -0
  22. package/dist/core/file-store/internal-git.js.map +1 -0
  23. package/dist/core/session-manager.d.ts +1 -0
  24. package/dist/core/session-manager.d.ts.map +1 -1
  25. package/dist/core/session-manager.js +7 -2
  26. package/dist/core/session-manager.js.map +1 -1
  27. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  28. package/dist/modes/interactive/interactive-mode.js +1 -0
  29. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  30. package/dist/modes/rpc/rpc-client.d.ts +25 -1
  31. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  32. package/dist/modes/rpc/rpc-client.js +26 -3
  33. package/dist/modes/rpc/rpc-client.js.map +1 -1
  34. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  35. package/dist/modes/rpc/rpc-mode.js +33 -2
  36. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  37. package/dist/modes/rpc/rpc-types.d.ts +22 -0
  38. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  39. package/dist/modes/rpc/rpc-types.js.map +1 -1
  40. package/dist/rules-engine/cache.d.ts +4 -0
  41. package/dist/rules-engine/cache.d.ts.map +1 -0
  42. package/dist/rules-engine/cache.js +32 -0
  43. package/dist/rules-engine/cache.js.map +1 -0
  44. package/dist/rules-engine/config.d.ts +8 -0
  45. package/dist/rules-engine/config.d.ts.map +1 -0
  46. package/dist/rules-engine/config.js +56 -0
  47. package/dist/rules-engine/config.js.map +1 -0
  48. package/dist/rules-engine/index.d.ts +10 -0
  49. package/dist/rules-engine/index.d.ts.map +1 -0
  50. package/dist/rules-engine/index.js +404 -0
  51. package/dist/rules-engine/index.js.map +1 -0
  52. package/dist/rules-engine/injector.d.ts +5 -0
  53. package/dist/rules-engine/injector.d.ts.map +1 -0
  54. package/dist/rules-engine/injector.js +57 -0
  55. package/dist/rules-engine/injector.js.map +1 -0
  56. package/dist/rules-engine/loader.d.ts +8 -0
  57. package/dist/rules-engine/loader.d.ts.map +1 -0
  58. package/dist/rules-engine/loader.js +190 -0
  59. package/dist/rules-engine/loader.js.map +1 -0
  60. package/dist/rules-engine/matcher.d.ts +3 -0
  61. package/dist/rules-engine/matcher.d.ts.map +1 -0
  62. package/dist/rules-engine/matcher.js +48 -0
  63. package/dist/rules-engine/matcher.js.map +1 -0
  64. package/dist/rules-engine/types.d.ts +150 -0
  65. package/dist/rules-engine/types.d.ts.map +1 -0
  66. package/dist/rules-engine/types.js +2 -0
  67. package/dist/rules-engine/types.js.map +1 -0
  68. package/docs/extensions.md +56 -56
  69. package/docs/file-rollback-design.md +287 -0
  70. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  71. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  72. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  73. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  74. package/examples/extensions/file-snapshot.ts +407 -0
  75. package/examples/extensions/with-deps/package-lock.json +2 -2
  76. package/examples/extensions/with-deps/package.json +1 -1
  77. package/package.json +4 -4
@@ -292,24 +292,21 @@ export class AgentSession {
292
292
  }
293
293
  }
294
294
  }
295
- // Emit to extensions first
296
- await this._emitExtensionEvent(event);
297
- // Notify all listeners
298
- this._emit(event);
299
- // Handle session persistence
295
+ // Handle session persistence BEFORE emitting for message_end,
296
+ // so we can inject the entry ID into the event for RPC clients.
300
297
  if (event.type === "message_end") {
301
- // Check if this is a custom message from extensions
298
+ let entryId;
302
299
  if (event.message.role === "custom") {
303
- // Persist as CustomMessageEntry
304
- this.sessionManager.appendCustomMessageEntry(event.message.customType, event.message.content, event.message.display, event.message.details);
300
+ entryId = this.sessionManager.appendCustomMessageEntry(event.message.customType, event.message.content, event.message.display, event.message.details);
305
301
  }
306
302
  else if (event.message.role === "user" ||
307
303
  event.message.role === "assistant" ||
308
304
  event.message.role === "toolResult") {
309
- // Regular LLM message - persist as SessionMessageEntry
310
- this.sessionManager.appendMessage(event.message);
305
+ entryId = this.sessionManager.appendMessage(event.message);
306
+ }
307
+ if (entryId) {
308
+ event.entryId = entryId;
311
309
  }
312
- // Other message types (bashExecution, compactionSummary, branchSummary) are persisted elsewhere
313
310
  // Track assistant message for auto-compaction (checked on agent_end)
314
311
  if (event.message.role === "assistant") {
315
312
  this._lastAssistantMessage = event.message;
@@ -329,6 +326,10 @@ export class AgentSession {
329
326
  }
330
327
  }
331
328
  }
329
+ // Emit to extensions first
330
+ await this._emitExtensionEvent(event);
331
+ // Notify all listeners
332
+ this._emit(event);
332
333
  // Check auto-retry and auto-compaction after agent completes
333
334
  if (event.type === "agent_end" && this._lastAssistantMessage) {
334
335
  const msg = this._lastAssistantMessage;
@@ -418,6 +419,7 @@ export class AgentSession {
418
419
  const extensionEvent = {
419
420
  type: "message_end",
420
421
  message: event.message,
422
+ entryId: event.entryId,
421
423
  };
422
424
  await this._extensionRunner.emit(extensionEvent);
423
425
  }
@@ -1739,6 +1741,7 @@ export class AgentSession {
1739
1741
  if (oldName === trimmed)
1740
1742
  return;
1741
1743
  this.sessionManager.appendSessionInfo(name);
1744
+ this._emit({ type: "session_rename", oldName, newName: trimmed });
1742
1745
  runner.emit({ type: "session_rename", oldName, newName: trimmed }).catch((err) => {
1743
1746
  runner.emitError({
1744
1747
  extensionPath: "<runtime>",