@code-yeongyu/senpi 2026.6.28-4 → 2026.6.30

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 (148) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +2 -1
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +17 -4
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/extensions/builtin/hooks/command-runner.d.ts +25 -0
  7. package/dist/core/extensions/builtin/hooks/command-runner.d.ts.map +1 -0
  8. package/dist/core/extensions/builtin/hooks/command-runner.js +152 -0
  9. package/dist/core/extensions/builtin/hooks/command-runner.js.map +1 -0
  10. package/dist/core/extensions/builtin/hooks/command.d.ts +11 -0
  11. package/dist/core/extensions/builtin/hooks/command.d.ts.map +1 -0
  12. package/dist/core/extensions/builtin/hooks/command.js +180 -0
  13. package/dist/core/extensions/builtin/hooks/command.js.map +1 -0
  14. package/dist/core/extensions/builtin/hooks/config-loader.d.ts +19 -0
  15. package/dist/core/extensions/builtin/hooks/config-loader.d.ts.map +1 -0
  16. package/dist/core/extensions/builtin/hooks/config-loader.js +125 -0
  17. package/dist/core/extensions/builtin/hooks/config-loader.js.map +1 -0
  18. package/dist/core/extensions/builtin/hooks/diagnostics.d.ts +10 -0
  19. package/dist/core/extensions/builtin/hooks/diagnostics.d.ts.map +1 -0
  20. package/dist/core/extensions/builtin/hooks/diagnostics.js +14 -0
  21. package/dist/core/extensions/builtin/hooks/diagnostics.js.map +1 -0
  22. package/dist/core/extensions/builtin/hooks/dispatcher.d.ts +60 -0
  23. package/dist/core/extensions/builtin/hooks/dispatcher.d.ts.map +1 -0
  24. package/dist/core/extensions/builtin/hooks/dispatcher.js +161 -0
  25. package/dist/core/extensions/builtin/hooks/dispatcher.js.map +1 -0
  26. package/dist/core/extensions/builtin/hooks/handler.d.ts +12 -0
  27. package/dist/core/extensions/builtin/hooks/handler.d.ts.map +1 -0
  28. package/dist/core/extensions/builtin/hooks/handler.js +128 -0
  29. package/dist/core/extensions/builtin/hooks/handler.js.map +1 -0
  30. package/dist/core/extensions/builtin/hooks/index.d.ts +6 -0
  31. package/dist/core/extensions/builtin/hooks/index.d.ts.map +1 -0
  32. package/dist/core/extensions/builtin/hooks/index.js +216 -0
  33. package/dist/core/extensions/builtin/hooks/index.js.map +1 -0
  34. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts +29 -0
  35. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.d.ts.map +1 -0
  36. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js +276 -0
  37. package/dist/core/extensions/builtin/hooks/lifecycle-adapter.js.map +1 -0
  38. package/dist/core/extensions/builtin/hooks/matcher.d.ts +7 -0
  39. package/dist/core/extensions/builtin/hooks/matcher.d.ts.map +1 -0
  40. package/dist/core/extensions/builtin/hooks/matcher.js +109 -0
  41. package/dist/core/extensions/builtin/hooks/matcher.js.map +1 -0
  42. package/dist/core/extensions/builtin/hooks/output-bounds.d.ts +29 -0
  43. package/dist/core/extensions/builtin/hooks/output-bounds.d.ts.map +1 -0
  44. package/dist/core/extensions/builtin/hooks/output-bounds.js +47 -0
  45. package/dist/core/extensions/builtin/hooks/output-bounds.js.map +1 -0
  46. package/dist/core/extensions/builtin/hooks/output-parser.d.ts +27 -0
  47. package/dist/core/extensions/builtin/hooks/output-parser.d.ts.map +1 -0
  48. package/dist/core/extensions/builtin/hooks/output-parser.js +168 -0
  49. package/dist/core/extensions/builtin/hooks/output-parser.js.map +1 -0
  50. package/dist/core/extensions/builtin/hooks/plugin-loader.d.ts +11 -0
  51. package/dist/core/extensions/builtin/hooks/plugin-loader.d.ts.map +1 -0
  52. package/dist/core/extensions/builtin/hooks/plugin-loader.js +138 -0
  53. package/dist/core/extensions/builtin/hooks/plugin-loader.js.map +1 -0
  54. package/dist/core/extensions/builtin/hooks/plugin-manifest.d.ts +47 -0
  55. package/dist/core/extensions/builtin/hooks/plugin-manifest.d.ts.map +1 -0
  56. package/dist/core/extensions/builtin/hooks/plugin-manifest.js +86 -0
  57. package/dist/core/extensions/builtin/hooks/plugin-manifest.js.map +1 -0
  58. package/dist/core/extensions/builtin/hooks/prompt-adapter.d.ts +30 -0
  59. package/dist/core/extensions/builtin/hooks/prompt-adapter.d.ts.map +1 -0
  60. package/dist/core/extensions/builtin/hooks/prompt-adapter.js +59 -0
  61. package/dist/core/extensions/builtin/hooks/prompt-adapter.js.map +1 -0
  62. package/dist/core/extensions/builtin/hooks/safety.d.ts +14 -0
  63. package/dist/core/extensions/builtin/hooks/safety.d.ts.map +1 -0
  64. package/dist/core/extensions/builtin/hooks/safety.js +179 -0
  65. package/dist/core/extensions/builtin/hooks/safety.js.map +1 -0
  66. package/dist/core/extensions/builtin/hooks/schema.d.ts +3 -0
  67. package/dist/core/extensions/builtin/hooks/schema.d.ts.map +1 -0
  68. package/dist/core/extensions/builtin/hooks/schema.js +94 -0
  69. package/dist/core/extensions/builtin/hooks/schema.js.map +1 -0
  70. package/dist/core/extensions/builtin/hooks/stop-adapter.d.ts +18 -0
  71. package/dist/core/extensions/builtin/hooks/stop-adapter.d.ts.map +1 -0
  72. package/dist/core/extensions/builtin/hooks/stop-adapter.js +282 -0
  73. package/dist/core/extensions/builtin/hooks/stop-adapter.js.map +1 -0
  74. package/dist/core/extensions/builtin/hooks/tool-adapter.d.ts +11 -0
  75. package/dist/core/extensions/builtin/hooks/tool-adapter.d.ts.map +1 -0
  76. package/dist/core/extensions/builtin/hooks/tool-adapter.js +158 -0
  77. package/dist/core/extensions/builtin/hooks/tool-adapter.js.map +1 -0
  78. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts +24 -0
  79. package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -0
  80. package/dist/core/extensions/builtin/hooks/trust-storage.js +102 -0
  81. package/dist/core/extensions/builtin/hooks/trust-storage.js.map +1 -0
  82. package/dist/core/extensions/builtin/hooks/trust.d.ts +34 -0
  83. package/dist/core/extensions/builtin/hooks/trust.d.ts.map +1 -0
  84. package/dist/core/extensions/builtin/hooks/trust.js +194 -0
  85. package/dist/core/extensions/builtin/hooks/trust.js.map +1 -0
  86. package/dist/core/extensions/builtin/hooks/types.d.ts +134 -0
  87. package/dist/core/extensions/builtin/hooks/types.d.ts.map +1 -0
  88. package/dist/core/extensions/builtin/hooks/types.js +36 -0
  89. package/dist/core/extensions/builtin/hooks/types.js.map +1 -0
  90. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  91. package/dist/core/extensions/builtin/index.js +2 -0
  92. package/dist/core/extensions/builtin/index.js.map +1 -1
  93. package/dist/core/extensions/runner.d.ts +5 -0
  94. package/dist/core/extensions/runner.d.ts.map +1 -1
  95. package/dist/core/extensions/runner.js +20 -1
  96. package/dist/core/extensions/runner.js.map +1 -1
  97. package/dist/core/extensions/types.d.ts +17 -0
  98. package/dist/core/extensions/types.d.ts.map +1 -1
  99. package/dist/core/extensions/types.js.map +1 -1
  100. package/dist/core/package-manager.d.ts +1 -0
  101. package/dist/core/package-manager.d.ts.map +1 -1
  102. package/dist/core/package-manager.js +14 -1
  103. package/dist/core/package-manager.js.map +1 -1
  104. package/dist/core/resource-loader.d.ts +14 -1
  105. package/dist/core/resource-loader.d.ts.map +1 -1
  106. package/dist/core/resource-loader.js +38 -0
  107. package/dist/core/resource-loader.js.map +1 -1
  108. package/dist/core/settings-manager.d.ts +2 -0
  109. package/dist/core/settings-manager.d.ts.map +1 -1
  110. package/dist/core/settings-manager.js.map +1 -1
  111. package/dist/modes/interactive/interactive-mode.js +2 -2
  112. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  113. package/dist/utils/version-check.d.ts +1 -0
  114. package/dist/utils/version-check.d.ts.map +1 -1
  115. package/dist/utils/version-check.js +7 -0
  116. package/dist/utils/version-check.js.map +1 -1
  117. package/docs/extensions.md +450 -0
  118. package/docs/index.md +1 -1
  119. package/docs/packages.md +9 -6
  120. package/examples/extensions/README.md +1 -0
  121. package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
  122. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +17 -24
  123. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  124. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts +17 -0
  125. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  126. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js +17 -0
  127. package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.models.js.map +1 -1
  128. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js +1 -1
  129. package/node_modules/@earendil-works/pi-ai/dist/providers/groq.models.js.map +1 -1
  130. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts +0 -24
  131. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.d.ts.map +1 -1
  132. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js +16 -35
  133. package/node_modules/@earendil-works/pi-ai/dist/providers/openrouter.models.js.map +1 -1
  134. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js +12 -12
  135. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  136. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js +12 -12
  137. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  138. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js +12 -12
  139. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  140. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js +15 -15
  141. package/node_modules/@earendil-works/pi-ai/dist/providers/xiaomi.models.js.map +1 -1
  142. package/node_modules/@earendil-works/pi-ai/package.json +1 -1
  143. package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +1 -1
  144. package/node_modules/@earendil-works/pi-tui/dist/tui.js +3 -0
  145. package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +1 -1
  146. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  147. package/npm-shrinkwrap.json +9 -9
  148. package/package.json +4 -4
@@ -63,12 +63,13 @@ function resourcePrecedenceRank(m) {
63
63
  const scopeBase = m.scope === "project" ? 0 : 2;
64
64
  return scopeBase + (m.source === "local" ? 0 : 1);
65
65
  }
66
- const RESOURCE_TYPES = ["extensions", "skills", "prompts", "themes"];
66
+ const RESOURCE_TYPES = ["extensions", "skills", "prompts", "themes", "hooks"];
67
67
  const FILE_PATTERNS = {
68
68
  extensions: /\.(ts|js)$/,
69
69
  skills: /\.md$/,
70
70
  prompts: /\.md$/,
71
71
  themes: /\.json$/,
72
+ hooks: /\.json$/,
72
73
  };
73
74
  const IGNORE_FILE_NAMES = [".gitignore", ".ignore", ".fdignore"];
74
75
  function toPosixPath(p) {
@@ -1862,24 +1863,28 @@ export class DefaultPackageManager {
1862
1863
  skills: (globalSettings.skills ?? []),
1863
1864
  prompts: (globalSettings.prompts ?? []),
1864
1865
  themes: (globalSettings.themes ?? []),
1866
+ hooks: (globalSettings.hooks ?? []),
1865
1867
  };
1866
1868
  const projectOverrides = {
1867
1869
  extensions: (projectSettings.extensions ?? []),
1868
1870
  skills: (projectSettings.skills ?? []),
1869
1871
  prompts: (projectSettings.prompts ?? []),
1870
1872
  themes: (projectSettings.themes ?? []),
1873
+ hooks: (projectSettings.hooks ?? []),
1871
1874
  };
1872
1875
  const userDirs = {
1873
1876
  extensions: join(globalBaseDir, "extensions"),
1874
1877
  skills: join(globalBaseDir, "skills"),
1875
1878
  prompts: join(globalBaseDir, "prompts"),
1876
1879
  themes: join(globalBaseDir, "themes"),
1880
+ hooks: join(globalBaseDir, "hooks"),
1877
1881
  };
1878
1882
  const projectDirs = {
1879
1883
  extensions: join(projectBaseDir, "extensions"),
1880
1884
  skills: join(projectBaseDir, "skills"),
1881
1885
  prompts: join(projectBaseDir, "prompts"),
1882
1886
  themes: join(projectBaseDir, "themes"),
1887
+ hooks: join(projectBaseDir, "hooks"),
1883
1888
  };
1884
1889
  const legacyProjectBaseDir = join(this.cwd, ".pi");
1885
1890
  const legacyProjectDirs = {
@@ -1887,6 +1892,7 @@ export class DefaultPackageManager {
1887
1892
  skills: join(legacyProjectBaseDir, "skills"),
1888
1893
  prompts: join(legacyProjectBaseDir, "prompts"),
1889
1894
  themes: join(legacyProjectBaseDir, "themes"),
1895
+ hooks: join(legacyProjectBaseDir, "hooks"),
1890
1896
  };
1891
1897
  const userAgentsSkillsDir = join(getHomeDir(), ".agents", "skills");
1892
1898
  const projectTrusted = this.settingsManager.isProjectTrusted();
@@ -1918,6 +1924,7 @@ export class DefaultPackageManager {
1918
1924
  if (projectTrusted) {
1919
1925
  addResources("prompts", collectAutoPromptEntries(projectDirs.prompts), projectMetadata, projectOverrides.prompts, projectBaseDir);
1920
1926
  addResources("themes", collectAutoThemeEntries(projectDirs.themes), projectMetadata, projectOverrides.themes, projectBaseDir);
1927
+ addResources("hooks", collectFiles(projectDirs.hooks, FILE_PATTERNS.hooks), projectMetadata, projectOverrides.hooks, projectBaseDir);
1921
1928
  }
1922
1929
  if (resolve(legacyProjectBaseDir) !== resolve(projectBaseDir)) {
1923
1930
  const legacyProjectMetadata = {
@@ -1928,6 +1935,7 @@ export class DefaultPackageManager {
1928
1935
  addResources("skills", collectAutoSkillEntries(legacyProjectDirs.skills, "pi"), legacyProjectMetadata, projectOverrides.skills, legacyProjectBaseDir);
1929
1936
  addResources("prompts", collectAutoPromptEntries(legacyProjectDirs.prompts), legacyProjectMetadata, projectOverrides.prompts, legacyProjectBaseDir);
1930
1937
  addResources("themes", collectAutoThemeEntries(legacyProjectDirs.themes), legacyProjectMetadata, projectOverrides.themes, legacyProjectBaseDir);
1938
+ addResources("hooks", collectFiles(legacyProjectDirs.hooks, FILE_PATTERNS.hooks), legacyProjectMetadata, projectOverrides.hooks, legacyProjectBaseDir);
1931
1939
  }
1932
1940
  // User extensions from ~/.pi/agent/
1933
1941
  addResources("extensions", collectAutoExtensionEntries(userDirs.extensions), userMetadata, userOverrides.extensions, globalBaseDir);
@@ -1942,6 +1950,7 @@ export class DefaultPackageManager {
1942
1950
  addResources("skills", collectAutoSkillEntries(userAgentsSkillsDir, "agents"), userAgentsMetadata, userOverrides.skills, userAgentsBaseDir);
1943
1951
  addResources("prompts", collectAutoPromptEntries(userDirs.prompts), userMetadata, userOverrides.prompts, globalBaseDir);
1944
1952
  addResources("themes", collectAutoThemeEntries(userDirs.themes), userMetadata, userOverrides.themes, globalBaseDir);
1953
+ addResources("hooks", collectFiles(userDirs.hooks, FILE_PATTERNS.hooks), userMetadata, userOverrides.hooks, globalBaseDir);
1945
1954
  }
1946
1955
  collectFilesFromPaths(paths, resourceType) {
1947
1956
  const files = [];
@@ -1973,6 +1982,8 @@ export class DefaultPackageManager {
1973
1982
  return accumulator.prompts;
1974
1983
  case "themes":
1975
1984
  return accumulator.themes;
1985
+ case "hooks":
1986
+ return accumulator.hooks;
1976
1987
  default:
1977
1988
  throw new Error(`Unknown resource type: ${resourceType}`);
1978
1989
  }
@@ -1990,6 +2001,7 @@ export class DefaultPackageManager {
1990
2001
  skills: new Map(),
1991
2002
  prompts: new Map(),
1992
2003
  themes: new Map(),
2004
+ hooks: new Map(),
1993
2005
  };
1994
2006
  }
1995
2007
  toResolvedPaths(accumulator) {
@@ -2014,6 +2026,7 @@ export class DefaultPackageManager {
2014
2026
  skills: mapToResolved(accumulator.skills),
2015
2027
  prompts: mapToResolved(accumulator.prompts),
2016
2028
  themes: mapToResolved(accumulator.themes),
2029
+ hooks: mapToResolved(accumulator.hooks),
2017
2030
  };
2018
2031
  }
2019
2032
  spawnCommand(command, args, options) {