@code-yeongyu/senpi 2026.5.15 → 2026.5.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 (170) hide show
  1. package/CHANGELOG.md +1113 -1177
  2. package/README.md +1 -2
  3. package/dist/core/agent-session.d.ts +9 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +114 -8
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/dynamic-prompt/verification.d.ts +31 -0
  8. package/dist/core/dynamic-prompt/verification.d.ts.map +1 -1
  9. package/dist/core/dynamic-prompt/verification.js +41 -0
  10. package/dist/core/dynamic-prompt/verification.js.map +1 -1
  11. package/dist/core/extensions/builtin/compaction/context-reduction.d.ts +97 -0
  12. package/dist/core/extensions/builtin/compaction/context-reduction.d.ts.map +1 -0
  13. package/dist/core/extensions/builtin/compaction/context-reduction.js +420 -0
  14. package/dist/core/extensions/builtin/compaction/context-reduction.js.map +1 -0
  15. package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
  16. package/dist/core/extensions/builtin/compaction/index.js +168 -31
  17. package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
  18. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +197 -0
  19. package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -0
  20. package/dist/core/extensions/builtin/compaction/openai-remote.js +690 -0
  21. package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -0
  22. package/dist/core/extensions/builtin/compaction/prompts.d.ts +3 -3
  23. package/dist/core/extensions/builtin/compaction/prompts.d.ts.map +1 -1
  24. package/dist/core/extensions/builtin/compaction/prompts.js +0 -22
  25. package/dist/core/extensions/builtin/compaction/prompts.js.map +1 -1
  26. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts +4 -0
  27. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.d.ts.map +1 -0
  28. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js +48 -0
  29. package/dist/core/extensions/builtin/compaction/repair-tool-pairs.js.map +1 -0
  30. package/dist/core/extensions/builtin/compaction/speculative.d.ts +3 -1
  31. package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
  32. package/dist/core/extensions/builtin/compaction/speculative.js +80 -33
  33. package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
  34. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts +8 -0
  35. package/dist/core/extensions/builtin/compaction/todo-bridge.d.ts.map +1 -1
  36. package/dist/core/extensions/builtin/compaction/todo-bridge.js +12 -6
  37. package/dist/core/extensions/builtin/compaction/todo-bridge.js.map +1 -1
  38. package/dist/core/extensions/builtin/diff.d.ts.map +1 -1
  39. package/dist/core/extensions/builtin/diff.js +1 -1
  40. package/dist/core/extensions/builtin/diff.js.map +1 -1
  41. package/dist/core/extensions/builtin/index.d.ts.map +1 -1
  42. package/dist/core/extensions/builtin/index.js +0 -2
  43. package/dist/core/extensions/builtin/index.js.map +1 -1
  44. package/dist/core/extensions/builtin/openai-web-search/index.d.ts +6 -2
  45. package/dist/core/extensions/builtin/openai-web-search/index.d.ts.map +1 -1
  46. package/dist/core/extensions/builtin/openai-web-search/index.js +82 -10
  47. package/dist/core/extensions/builtin/openai-web-search/index.js.map +1 -1
  48. package/dist/core/extensions/builtin/permission-system/prompt.d.ts.map +1 -1
  49. package/dist/core/extensions/builtin/permission-system/prompt.js +0 -5
  50. package/dist/core/extensions/builtin/permission-system/prompt.js.map +1 -1
  51. package/dist/core/extensions/builtin/system-messages.d.ts +1 -1
  52. package/dist/core/extensions/builtin/system-messages.d.ts.map +1 -1
  53. package/dist/core/extensions/builtin/system-messages.js.map +1 -1
  54. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts +1 -1
  55. package/dist/core/extensions/builtin/tool-pair-guard/index.d.ts.map +1 -1
  56. package/dist/core/extensions/builtin/tool-pair-guard/index.js +8 -4
  57. package/dist/core/extensions/builtin/tool-pair-guard/index.js.map +1 -1
  58. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.d.ts +3 -0
  59. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.d.ts.map +1 -0
  60. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.js +89 -0
  61. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-chat-completions-payload.js.map +1 -0
  62. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.d.ts +3 -0
  63. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.d.ts.map +1 -0
  64. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.js +122 -0
  65. package/dist/core/extensions/builtin/tool-pair-guard/sanitize-openai-responses-payload.js.map +1 -0
  66. package/dist/core/extensions/loader.d.ts.map +1 -1
  67. package/dist/core/extensions/loader.js +2 -0
  68. package/dist/core/extensions/loader.js.map +1 -1
  69. package/dist/core/extensions/runner.d.ts +3 -0
  70. package/dist/core/extensions/runner.d.ts.map +1 -1
  71. package/dist/core/extensions/runner.js +18 -0
  72. package/dist/core/extensions/runner.js.map +1 -1
  73. package/dist/core/extensions/types.d.ts +22 -0
  74. package/dist/core/extensions/types.d.ts.map +1 -1
  75. package/dist/core/extensions/types.js.map +1 -1
  76. package/dist/core/messages.d.ts +3 -3
  77. package/dist/core/messages.d.ts.map +1 -1
  78. package/dist/core/messages.js +5 -10
  79. package/dist/core/messages.js.map +1 -1
  80. package/dist/core/model-registry.d.ts.map +1 -1
  81. package/dist/core/model-registry.js +2 -0
  82. package/dist/core/model-registry.js.map +1 -1
  83. package/dist/core/sdk.d.ts +1 -1
  84. package/dist/core/sdk.d.ts.map +1 -1
  85. package/dist/core/sdk.js +7 -22
  86. package/dist/core/sdk.js.map +1 -1
  87. package/dist/core/session-manager.d.ts.map +1 -1
  88. package/dist/core/session-manager.js +1 -1
  89. package/dist/core/session-manager.js.map +1 -1
  90. package/dist/core/settings-manager.d.ts +0 -5
  91. package/dist/core/settings-manager.d.ts.map +1 -1
  92. package/dist/core/settings-manager.js.map +1 -1
  93. package/dist/core/thinking-levels.d.ts +6 -0
  94. package/dist/core/thinking-levels.d.ts.map +1 -0
  95. package/dist/core/thinking-levels.js +36 -0
  96. package/dist/core/thinking-levels.js.map +1 -0
  97. package/dist/core/tools/bash.d.ts.map +1 -1
  98. package/dist/core/tools/bash.js +15 -1
  99. package/dist/core/tools/bash.js.map +1 -1
  100. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  101. package/dist/modes/interactive/components/compaction-summary-message.js +20 -2
  102. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  103. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  104. package/dist/modes/interactive/components/keybinding-hints.js +3 -1
  105. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  106. package/dist/modes/interactive/interactive-mode.d.ts +8 -0
  107. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  108. package/dist/modes/interactive/interactive-mode.js +137 -49
  109. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  110. package/dist/modes/interactive/working-status.d.ts +15 -0
  111. package/dist/modes/interactive/working-status.d.ts.map +1 -0
  112. package/dist/modes/interactive/working-status.js +60 -0
  113. package/dist/modes/interactive/working-status.js.map +1 -0
  114. package/dist/utils/clipboard-image.d.ts.map +1 -1
  115. package/dist/utils/clipboard-image.js +1 -1
  116. package/dist/utils/clipboard-image.js.map +1 -1
  117. package/docs/extensions.md +0 -1
  118. package/docs/index.md +0 -1
  119. package/docs/models.md +9 -0
  120. package/docs/sdk.md +0 -1
  121. package/docs/settings.md +1 -29
  122. package/docs/termux.md +2 -2
  123. package/docs/usage.md +1 -1
  124. package/examples/README.md +1 -1
  125. package/examples/extensions/README.md +0 -1
  126. package/examples/extensions/overlay-qa-tests.ts +1 -1
  127. package/package.json +4 -4
  128. package/dist/core/extensions/builtin/background-task/cancel-tool.d.ts +0 -10
  129. package/dist/core/extensions/builtin/background-task/cancel-tool.d.ts.map +0 -1
  130. package/dist/core/extensions/builtin/background-task/cancel-tool.js +0 -109
  131. package/dist/core/extensions/builtin/background-task/cancel-tool.js.map +0 -1
  132. package/dist/core/extensions/builtin/background-task/index.d.ts +0 -3
  133. package/dist/core/extensions/builtin/background-task/index.d.ts.map +0 -1
  134. package/dist/core/extensions/builtin/background-task/index.js +0 -207
  135. package/dist/core/extensions/builtin/background-task/index.js.map +0 -1
  136. package/dist/core/extensions/builtin/background-task/manager.d.ts +0 -17
  137. package/dist/core/extensions/builtin/background-task/manager.d.ts.map +0 -1
  138. package/dist/core/extensions/builtin/background-task/manager.js +0 -114
  139. package/dist/core/extensions/builtin/background-task/manager.js.map +0 -1
  140. package/dist/core/extensions/builtin/background-task/notification.d.ts +0 -22
  141. package/dist/core/extensions/builtin/background-task/notification.d.ts.map +0 -1
  142. package/dist/core/extensions/builtin/background-task/notification.js +0 -105
  143. package/dist/core/extensions/builtin/background-task/notification.js.map +0 -1
  144. package/dist/core/extensions/builtin/background-task/output-tool.d.ts +0 -11
  145. package/dist/core/extensions/builtin/background-task/output-tool.d.ts.map +0 -1
  146. package/dist/core/extensions/builtin/background-task/output-tool.js +0 -127
  147. package/dist/core/extensions/builtin/background-task/output-tool.js.map +0 -1
  148. package/dist/core/extensions/builtin/background-task/spawner.d.ts +0 -8
  149. package/dist/core/extensions/builtin/background-task/spawner.d.ts.map +0 -1
  150. package/dist/core/extensions/builtin/background-task/spawner.js +0 -207
  151. package/dist/core/extensions/builtin/background-task/spawner.js.map +0 -1
  152. package/dist/core/extensions/builtin/background-task/task-tool.d.ts +0 -20
  153. package/dist/core/extensions/builtin/background-task/task-tool.d.ts.map +0 -1
  154. package/dist/core/extensions/builtin/background-task/task-tool.js +0 -302
  155. package/dist/core/extensions/builtin/background-task/task-tool.js.map +0 -1
  156. package/dist/core/extensions/builtin/background-task/types.d.ts +0 -72
  157. package/dist/core/extensions/builtin/background-task/types.d.ts.map +0 -1
  158. package/dist/core/extensions/builtin/background-task/types.js +0 -32
  159. package/dist/core/extensions/builtin/background-task/types.js.map +0 -1
  160. package/docs/agents.md +0 -348
  161. package/examples/extensions/subagent/README.md +0 -172
  162. package/examples/extensions/subagent/agents/planner.md +0 -37
  163. package/examples/extensions/subagent/agents/reviewer.md +0 -35
  164. package/examples/extensions/subagent/agents/scout.md +0 -50
  165. package/examples/extensions/subagent/agents/worker.md +0 -24
  166. package/examples/extensions/subagent/agents.ts +0 -126
  167. package/examples/extensions/subagent/index.ts +0 -987
  168. package/examples/extensions/subagent/prompts/implement-and-review.md +0 -10
  169. package/examples/extensions/subagent/prompts/implement.md +0 -10
  170. package/examples/extensions/subagent/prompts/scout-and-plan.md +0 -9
@@ -1,126 +0,0 @@
1
- /**
2
- * Agent discovery and configuration
3
- */
4
-
5
- import * as fs from "node:fs";
6
- import * as path from "node:path";
7
- import { getAgentDir, parseFrontmatter } from "@code-yeongyu/senpi";
8
-
9
- export type AgentScope = "user" | "project" | "both";
10
-
11
- export interface AgentConfig {
12
- name: string;
13
- description: string;
14
- tools?: string[];
15
- model?: string;
16
- systemPrompt: string;
17
- source: "user" | "project";
18
- filePath: string;
19
- }
20
-
21
- export interface AgentDiscoveryResult {
22
- agents: AgentConfig[];
23
- projectAgentsDir: string | null;
24
- }
25
-
26
- function loadAgentsFromDir(dir: string, source: "user" | "project"): AgentConfig[] {
27
- const agents: AgentConfig[] = [];
28
-
29
- if (!fs.existsSync(dir)) {
30
- return agents;
31
- }
32
-
33
- let entries: fs.Dirent[];
34
- try {
35
- entries = fs.readdirSync(dir, { withFileTypes: true });
36
- } catch {
37
- return agents;
38
- }
39
-
40
- for (const entry of entries) {
41
- if (!entry.name.endsWith(".md")) continue;
42
- if (!entry.isFile() && !entry.isSymbolicLink()) continue;
43
-
44
- const filePath = path.join(dir, entry.name);
45
- let content: string;
46
- try {
47
- content = fs.readFileSync(filePath, "utf-8");
48
- } catch {
49
- continue;
50
- }
51
-
52
- const { frontmatter, body } = parseFrontmatter<Record<string, string>>(content);
53
-
54
- if (!frontmatter.name || !frontmatter.description) {
55
- continue;
56
- }
57
-
58
- const tools = frontmatter.tools
59
- ?.split(",")
60
- .map((t: string) => t.trim())
61
- .filter(Boolean);
62
-
63
- agents.push({
64
- name: frontmatter.name,
65
- description: frontmatter.description,
66
- tools: tools && tools.length > 0 ? tools : undefined,
67
- model: frontmatter.model,
68
- systemPrompt: body,
69
- source,
70
- filePath,
71
- });
72
- }
73
-
74
- return agents;
75
- }
76
-
77
- function isDirectory(p: string): boolean {
78
- try {
79
- return fs.statSync(p).isDirectory();
80
- } catch {
81
- return false;
82
- }
83
- }
84
-
85
- function findNearestProjectAgentsDir(cwd: string): string | null {
86
- let currentDir = cwd;
87
- while (true) {
88
- const candidate = path.join(currentDir, ".pi", "agents");
89
- if (isDirectory(candidate)) return candidate;
90
-
91
- const parentDir = path.dirname(currentDir);
92
- if (parentDir === currentDir) return null;
93
- currentDir = parentDir;
94
- }
95
- }
96
-
97
- export function discoverAgents(cwd: string, scope: AgentScope): AgentDiscoveryResult {
98
- const userDir = path.join(getAgentDir(), "agents");
99
- const projectAgentsDir = findNearestProjectAgentsDir(cwd);
100
-
101
- const userAgents = scope === "project" ? [] : loadAgentsFromDir(userDir, "user");
102
- const projectAgents = scope === "user" || !projectAgentsDir ? [] : loadAgentsFromDir(projectAgentsDir, "project");
103
-
104
- const agentMap = new Map<string, AgentConfig>();
105
-
106
- if (scope === "both") {
107
- for (const agent of userAgents) agentMap.set(agent.name, agent);
108
- for (const agent of projectAgents) agentMap.set(agent.name, agent);
109
- } else if (scope === "user") {
110
- for (const agent of userAgents) agentMap.set(agent.name, agent);
111
- } else {
112
- for (const agent of projectAgents) agentMap.set(agent.name, agent);
113
- }
114
-
115
- return { agents: Array.from(agentMap.values()), projectAgentsDir };
116
- }
117
-
118
- export function formatAgentList(agents: AgentConfig[], maxItems: number): { text: string; remaining: number } {
119
- if (agents.length === 0) return { text: "none", remaining: 0 };
120
- const listed = agents.slice(0, maxItems);
121
- const remaining = agents.length - listed.length;
122
- return {
123
- text: listed.map((a) => `${a.name} (${a.source}): ${a.description}`).join("; "),
124
- remaining,
125
- };
126
- }