pi-orchestrator-config 4.1.5

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 (175) hide show
  1. package/README.md +808 -0
  2. package/agents/api-documenter.md +32 -0
  3. package/agents/bash-expert.md +53 -0
  4. package/agents/code-reviewer-docs.md +145 -0
  5. package/agents/code-reviewer-guidelines.md +97 -0
  6. package/agents/code-reviewer-quality.md +142 -0
  7. package/agents/code-reviewer-security.md +107 -0
  8. package/agents/code-reviewer-spec.md +164 -0
  9. package/agents/debugger.md +63 -0
  10. package/agents/docker-expert.md +40 -0
  11. package/agents/docs-fetcher.md +48 -0
  12. package/agents/git-expert.md +63 -0
  13. package/agents/github-expert.md +83 -0
  14. package/agents/go-expert.md +62 -0
  15. package/agents/issue-reviewer-feasibility.md +60 -0
  16. package/agents/issue-reviewer-scope.md +63 -0
  17. package/agents/issue-reviewer-spec.md +77 -0
  18. package/agents/java-expert.md +31 -0
  19. package/agents/jenkins-expert.md +38 -0
  20. package/agents/kubernetes-expert.md +40 -0
  21. package/agents/planner.md +42 -0
  22. package/agents/python-expert.md +61 -0
  23. package/agents/reviewer.md +26 -0
  24. package/agents/scout.md +40 -0
  25. package/agents/security-auditor.md +254 -0
  26. package/agents/technical-documentation-writer.md +37 -0
  27. package/agents/test-automator.md +55 -0
  28. package/agents/test-runner.md +47 -0
  29. package/agents/ts-expert.md +23 -0
  30. package/agents/worker.md +30 -0
  31. package/extensions/acpx-provider/index.ts +104 -0
  32. package/extensions/acpx-provider/load-runtime.ts +99 -0
  33. package/extensions/acpx-provider/runtime-models.ts +40 -0
  34. package/extensions/cli-provider/agents/claude.ts +128 -0
  35. package/extensions/cli-provider/agents/cursor.ts +84 -0
  36. package/extensions/cli-provider/agents/gemini.ts +100 -0
  37. package/extensions/cli-provider/discover.ts +77 -0
  38. package/extensions/cli-provider/index.ts +57 -0
  39. package/extensions/cli-provider/parsers.ts +304 -0
  40. package/extensions/cli-provider/providers.ts +58 -0
  41. package/extensions/cli-provider/runner.ts +225 -0
  42. package/extensions/cli-provider/runtime-models.ts +32 -0
  43. package/extensions/cli-provider/session-reaper.ts +122 -0
  44. package/extensions/cli-provider/sessions.ts +533 -0
  45. package/extensions/cli-provider/shared/discover-cache.ts +235 -0
  46. package/extensions/cli-provider/types.ts +48 -0
  47. package/extensions/coms/coms-net-server.ts +1642 -0
  48. package/extensions/coms/coms-net-wrapper.ts +521 -0
  49. package/extensions/coms/coms-net.ts +1589 -0
  50. package/extensions/coms/coms-p2p.ts +1879 -0
  51. package/extensions/coms/coms-shared.ts +510 -0
  52. package/extensions/coms/coms-wrapper.ts +138 -0
  53. package/extensions/coms/index.ts +20 -0
  54. package/extensions/coms/themeMap.ts +147 -0
  55. package/extensions/image-gen/image-gen.ts +332 -0
  56. package/extensions/image-gen/index.ts +14 -0
  57. package/extensions/orchestrator/agents.ts +134 -0
  58. package/extensions/orchestrator/ask-user.ts +293 -0
  59. package/extensions/orchestrator/async-agents.ts +1037 -0
  60. package/extensions/orchestrator/async-capability.ts +129 -0
  61. package/extensions/orchestrator/async-runner.ts +324 -0
  62. package/extensions/orchestrator/async-status-parse.ts +31 -0
  63. package/extensions/orchestrator/async-status-ui.ts +201 -0
  64. package/extensions/orchestrator/async-wait.ts +36 -0
  65. package/extensions/orchestrator/btw.ts +210 -0
  66. package/extensions/orchestrator/cron-status-format.ts +126 -0
  67. package/extensions/orchestrator/cron-status-ui.ts +132 -0
  68. package/extensions/orchestrator/cron.ts +730 -0
  69. package/extensions/orchestrator/dreaming.ts +355 -0
  70. package/extensions/orchestrator/enforcement-helpers.ts +530 -0
  71. package/extensions/orchestrator/enforcement-rules.ts +329 -0
  72. package/extensions/orchestrator/enforcement.ts +828 -0
  73. package/extensions/orchestrator/extended-autocomplete.ts +593 -0
  74. package/extensions/orchestrator/git-helpers.ts +420 -0
  75. package/extensions/orchestrator/github-autocomplete.ts +250 -0
  76. package/extensions/orchestrator/icons.ts +17 -0
  77. package/extensions/orchestrator/index.ts +100 -0
  78. package/extensions/orchestrator/memory-embeddings.ts +281 -0
  79. package/extensions/orchestrator/memory-promotion.ts +449 -0
  80. package/extensions/orchestrator/memory-provenance.ts +80 -0
  81. package/extensions/orchestrator/memory-query-class.ts +90 -0
  82. package/extensions/orchestrator/memory-scoring.ts +434 -0
  83. package/extensions/orchestrator/memory-tools.ts +883 -0
  84. package/extensions/orchestrator/memory-tree.ts +212 -0
  85. package/extensions/orchestrator/nvim.ts +169 -0
  86. package/extensions/orchestrator/overlay-dashboard-utils.ts +25 -0
  87. package/extensions/orchestrator/overlay-dashboard.ts +512 -0
  88. package/extensions/orchestrator/pi-config-review-state.ts +303 -0
  89. package/extensions/orchestrator/preference-extractor.ts +106 -0
  90. package/extensions/orchestrator/project-settings.ts +468 -0
  91. package/extensions/orchestrator/promotion-queue.ts +311 -0
  92. package/extensions/orchestrator/resolve-agent-model.ts +32 -0
  93. package/extensions/orchestrator/review-ui.ts +204 -0
  94. package/extensions/orchestrator/rule-placeholders.ts +12 -0
  95. package/extensions/orchestrator/rules.ts +481 -0
  96. package/extensions/orchestrator/session-search.ts +243 -0
  97. package/extensions/orchestrator/session-validation.ts +374 -0
  98. package/extensions/orchestrator/situation-report.ts +370 -0
  99. package/extensions/orchestrator/status-bar.ts +31 -0
  100. package/extensions/orchestrator/status-line.ts +192 -0
  101. package/extensions/orchestrator/status.ts +110 -0
  102. package/extensions/orchestrator/subagent-tool.ts +1748 -0
  103. package/extensions/orchestrator/task-lifecycle.ts +88 -0
  104. package/extensions/orchestrator/utils.ts +227 -0
  105. package/extensions/pidash/index.ts +15 -0
  106. package/extensions/pidash/pidash.ts +941 -0
  107. package/extensions/pidiff/index.ts +13 -0
  108. package/extensions/pidiff/pidiff.ts +369 -0
  109. package/extensions/providers/acpx-driver.ts +479 -0
  110. package/extensions/providers/built-in-drivers.ts +52 -0
  111. package/extensions/providers/claude-driver.ts +319 -0
  112. package/extensions/providers/cursor-acpx-driver.ts +398 -0
  113. package/extensions/providers/cursor-cli-driver.ts +484 -0
  114. package/extensions/providers/gemini-driver.ts +302 -0
  115. package/extensions/providers/index.ts +513 -0
  116. package/extensions/shared/build-system-prompt.ts +57 -0
  117. package/extensions/shared/create-runtime-provider.ts +190 -0
  118. package/extensions/shared/daemon-manager.ts +248 -0
  119. package/extensions/shared/file-logger.ts +115 -0
  120. package/extensions/shared/managed-refresh.ts +211 -0
  121. package/extensions/shared/provider-driver.ts +295 -0
  122. package/extensions/shared/provider-errors.ts +305 -0
  123. package/extensions/shared/provider-registry.ts +388 -0
  124. package/extensions/shared/stream-builder.ts +275 -0
  125. package/extensions/shared/types.ts +20 -0
  126. package/extensions/shared/ui/README.md +10 -0
  127. package/extensions/shared/ui/badge.tsx +52 -0
  128. package/extensions/shared/ui/button.tsx +58 -0
  129. package/extensions/shared/ui/collapsible.tsx +21 -0
  130. package/extensions/shared/ui/dropdown-menu.tsx +266 -0
  131. package/extensions/shared/ui/input.tsx +20 -0
  132. package/extensions/shared/ui/popover.tsx +114 -0
  133. package/extensions/shared/ui/resizable.tsx +48 -0
  134. package/extensions/shared/ui/scroll-area.tsx +53 -0
  135. package/extensions/shared/ui/select.tsx +201 -0
  136. package/extensions/shared/ui/separator.tsx +25 -0
  137. package/extensions/shared/ui/tooltip.tsx +64 -0
  138. package/extensions/shared/ws-client.ts +74 -0
  139. package/package.json +59 -0
  140. package/prompts/coderabbit-rate-limit.md +95 -0
  141. package/prompts/create-coms-feature-manager.md +186 -0
  142. package/prompts/create-skill.md +128 -0
  143. package/prompts/domain-model.md +109 -0
  144. package/prompts/external-ai.md +665 -0
  145. package/prompts/implement-and-review.md +25 -0
  146. package/prompts/implement.md +26 -0
  147. package/prompts/issue-review.md +256 -0
  148. package/prompts/pr-review.md +753 -0
  149. package/prompts/query-db.md +154 -0
  150. package/prompts/refine-review.md +208 -0
  151. package/prompts/release.md +235 -0
  152. package/prompts/remember.md +33 -0
  153. package/prompts/review-handler-status.md +27 -0
  154. package/prompts/review-handler.md +677 -0
  155. package/prompts/review-local.md +159 -0
  156. package/prompts/scout-and-plan.md +21 -0
  157. package/rules/00-orchestrator-core.md +42 -0
  158. package/rules/05-issue-first-workflow.md +119 -0
  159. package/rules/10-agent-routing.md +58 -0
  160. package/rules/15-mcp-launchpad.md +46 -0
  161. package/rules/20-code-review-loop.md +234 -0
  162. package/rules/25-documentation-updates.md +15 -0
  163. package/rules/30-prompt-templates.md +19 -0
  164. package/rules/35-memory.md +240 -0
  165. package/rules/40-critical-rules.md +124 -0
  166. package/rules/45-file-preview.md +29 -0
  167. package/rules/50-agent-bug-reporting.md +90 -0
  168. package/rules/55-coms-protocol.md +63 -0
  169. package/rules/60-task-tracking.md +66 -0
  170. package/skills/conflict-resolver/SKILL.md +213 -0
  171. package/skills/skill-creator/SKILL.md +85 -0
  172. package/skills/systematic-debugging/SKILL.md +353 -0
  173. package/skills/test-driven-development/SKILL.md +335 -0
  174. package/skills/update-agents-md/SKILL.md +282 -0
  175. package/templates/coms-feature-manager-prompt.md +313 -0
@@ -0,0 +1,319 @@
1
+ /**
2
+ * ClaudeDriver — ProviderDriver for the Claude Code CLI agent.
3
+ *
4
+ * Adapted from t3code's ClaudeDriver pattern. Owns config schema,
5
+ * binary probe, model discovery (binary catalog scan), session/turn
6
+ * adapter, and managed snapshot refresh.
7
+ *
8
+ * Reuses existing modules:
9
+ * - cli-provider/agents/claude.ts — discovery (scanClaudeBinaryCatalog)
10
+ * - cli-provider/runner.ts — process spawning (runCliAgent)
11
+ * - cli-provider/sessions.ts — session marker management
12
+ * - cli-provider/parsers.ts — output parsing
13
+ * - shared/build-system-prompt.ts — system prompt injection
14
+ *
15
+ * @module providers/claude-driver
16
+ */
17
+
18
+ import type {
19
+ ConfigSchema,
20
+ DiscoveredModel,
21
+ DriverStreamEvent,
22
+ ProviderAdapterShape,
23
+ ProviderDriver,
24
+ ProviderDriverCreateInput,
25
+ ProviderInstance,
26
+ ProviderProbeResult,
27
+ ProviderSnapshotShape,
28
+ SessionHandle,
29
+ SessionStartOptions,
30
+ TurnOptions,
31
+ TurnResult,
32
+ } from "../shared/provider-driver.js";
33
+ import { ProviderDriverError } from "../shared/provider-errors.js";
34
+ import { makeManagedSnapshot, buildInitialSnapshot } from "../shared/managed-refresh.js";
35
+ import { resolveBinary } from "../cli-provider/shared/discover-cache.js";
36
+ import { discoverCliModelsDetailed } from "../cli-provider/discover.js";
37
+ import { runCliAgent } from "../cli-provider/runner.js";
38
+ import {
39
+ loadCliSessionId,
40
+ saveCliSessionId,
41
+ clearCliSessionId,
42
+ applySystemPromptToCliPrompt,
43
+ shouldRetryWithoutResume,
44
+ createProvisionalPiSessionId,
45
+ type CliSessionKey,
46
+ } from "../cli-provider/sessions.js";
47
+ import { buildExternalSystemPrompt } from "../shared/build-system-prompt.js";
48
+ import { fileLog } from "../shared/file-logger.js";
49
+
50
+ const LOG_DOMAIN = "claude-driver";
51
+ const DRIVER_KIND = "claude-cli";
52
+
53
+ // ---------------------------------------------------------------------------
54
+ // Config
55
+ // ---------------------------------------------------------------------------
56
+
57
+ export interface ClaudeCliConfig {
58
+ readonly binary: string;
59
+ readonly enabled: boolean;
60
+ }
61
+
62
+ const claudeConfigSchema: ConfigSchema<ClaudeCliConfig> = {
63
+ parse: (raw: unknown): ClaudeCliConfig => {
64
+ if (!raw || typeof raw !== "object") {
65
+ return { binary: "claude", enabled: true };
66
+ }
67
+ const obj = raw as Record<string, unknown>;
68
+ return {
69
+ binary: typeof obj.binary === "string" ? obj.binary : "claude",
70
+ enabled: typeof obj.enabled === "boolean" ? obj.enabled : true,
71
+ };
72
+ },
73
+ };
74
+
75
+ // ---------------------------------------------------------------------------
76
+ // Adapter (session / turn runtime)
77
+ // ---------------------------------------------------------------------------
78
+
79
+ function createClaudeAdapter(
80
+ config: ClaudeCliConfig,
81
+ cwd: string,
82
+ instanceId: string,
83
+ ): ProviderAdapterShape & {
84
+ bindPiSessionId: (sid: string) => void;
85
+ handleSessionStart: (reason: string, sid: string | null) => void;
86
+ } {
87
+ let piSessionId = createProvisionalPiSessionId();
88
+ const systemPromptSent = new Set<string>();
89
+ const storedSystemPrompts = new Map<string, string>();
90
+
91
+ function sessionKeyFor(model: string): CliSessionKey {
92
+ return { cwd, agent: "claude", model, piSessionId };
93
+ }
94
+
95
+ return {
96
+ bindPiSessionId: (sid: string) => {
97
+ if (sid) piSessionId = sid;
98
+ },
99
+
100
+ handleSessionStart: (reason: string, _sid: string | null) => {
101
+ if (reason === "new" || reason === "resume") {
102
+ systemPromptSent.clear();
103
+ storedSystemPrompts.clear();
104
+ }
105
+ },
106
+
107
+ startSession: async (opts: SessionStartOptions): Promise<SessionHandle> => {
108
+ const model = opts.model || "default";
109
+ if (opts.systemPrompt) storedSystemPrompts.set(model, opts.systemPrompt);
110
+ const key = sessionKeyFor(model);
111
+ const existingId = loadCliSessionId(key);
112
+ return {
113
+ sessionId: existingId || `claude-${instanceId}-${model}`,
114
+ model,
115
+ };
116
+ },
117
+
118
+ sendTurn: async (
119
+ handle: SessionHandle,
120
+ prompt: string,
121
+ opts?: TurnOptions,
122
+ ): Promise<TurnResult> => {
123
+ const key = sessionKeyFor(handle.model);
124
+ const sessionId = loadCliSessionId(key);
125
+ const handleKey = handle.model || "default";
126
+ const needsSystemPrompt = !systemPromptSent.has(handleKey);
127
+
128
+ // Prefer the system prompt stored at startSession over rebuilding
129
+ let systemPrompt: string | undefined;
130
+ if (needsSystemPrompt) {
131
+ systemPrompt =
132
+ storedSystemPrompts.get(handleKey) ||
133
+ buildExternalSystemPrompt({ systemPrompt: undefined }, cwd);
134
+ }
135
+
136
+ // Apply system prompt to the prompt text
137
+ let finalPrompt = prompt;
138
+ if (needsSystemPrompt && systemPrompt) {
139
+ finalPrompt = applySystemPromptToCliPrompt(prompt, systemPrompt);
140
+ }
141
+
142
+ // Build event handler that bridges to DriverStreamEvent
143
+ const onEvent = opts?.onEvent
144
+ ? (ev: { kind: string; text?: string; sessionId?: string }) => {
145
+ if (ev.kind === "session" && ev.sessionId) {
146
+ saveCliSessionId(key, ev.sessionId);
147
+ opts.onEvent!({ kind: "session", sessionId: ev.sessionId });
148
+ } else if (ev.kind === "thinking_delta" && ev.text) {
149
+ opts.onEvent!({ kind: "thinking_delta", text: ev.text });
150
+ } else if (ev.kind === "text_delta" && ev.text) {
151
+ opts.onEvent!({ kind: "text_delta", text: ev.text });
152
+ }
153
+ }
154
+ : undefined;
155
+
156
+ const runOnce = (sid: string | null, p: string) =>
157
+ runCliAgent({
158
+ agent: "claude",
159
+ model: handle.model === "default" ? "default" : handle.model,
160
+ cwd,
161
+ prompt: p,
162
+ sessionId: sid,
163
+ signal: opts?.signal,
164
+ binary: config.binary,
165
+ onEvent,
166
+ });
167
+
168
+ try {
169
+ const result = await runOnce(sessionId, finalPrompt);
170
+
171
+ // Save session id from result
172
+ if (result.sessionId) {
173
+ saveCliSessionId(key, result.sessionId);
174
+ }
175
+
176
+ // Mark system prompt sent on success
177
+ if (needsSystemPrompt) {
178
+ systemPromptSent.add(handleKey);
179
+ }
180
+
181
+ return {
182
+ text: result.text,
183
+ thinking: result.thinking,
184
+ sessionId: result.sessionId,
185
+ stopReason: "stop",
186
+ usage: result.usage,
187
+ };
188
+ } catch (err) {
189
+ const message = err instanceof Error ? err.message : String(err);
190
+ // Resume recovery: if --resume fails, clear marker and retry
191
+ if (sessionId && shouldRetryWithoutResume(message)) {
192
+ fileLog(LOG_DOMAIN, "warn", LOG_DOMAIN,
193
+ `resume failed, clearing session and retrying: ${message.slice(0, 200)}`);
194
+ clearCliSessionId(key);
195
+ const retryPrompt = needsSystemPrompt && systemPrompt
196
+ ? applySystemPromptToCliPrompt(prompt, systemPrompt)
197
+ : prompt;
198
+ const result = await runOnce(null, retryPrompt);
199
+ if (result.sessionId) {
200
+ saveCliSessionId(key, result.sessionId);
201
+ }
202
+ if (needsSystemPrompt) {
203
+ systemPromptSent.add(handleKey);
204
+ }
205
+ return {
206
+ text: result.text,
207
+ thinking: result.thinking,
208
+ sessionId: result.sessionId,
209
+ stopReason: "stop",
210
+ usage: result.usage,
211
+ };
212
+ }
213
+ throw err;
214
+ }
215
+ },
216
+
217
+ stopSession: async (handle: SessionHandle): Promise<void> => {
218
+ const key = sessionKeyFor(handle.model);
219
+ clearCliSessionId(key);
220
+ const handleKey = handle.model || "default";
221
+ systemPromptSent.delete(handleKey);
222
+ storedSystemPrompts.delete(handleKey);
223
+ },
224
+
225
+ stopAll: async (): Promise<void> => {
226
+ systemPromptSent.clear();
227
+ storedSystemPrompts.clear();
228
+ },
229
+
230
+ hasSession: (_sessionId: string): boolean => {
231
+ // Check if any session key maps to this session id
232
+ return false; // CLI sessions are stateless from adapter perspective
233
+ },
234
+ };
235
+ }
236
+
237
+ // ---------------------------------------------------------------------------
238
+ // Driver
239
+ // ---------------------------------------------------------------------------
240
+
241
+ export const ClaudeDriver: ProviderDriver<ClaudeCliConfig> = {
242
+ driverKind: DRIVER_KIND,
243
+ metadata: {
244
+ displayName: "Claude CLI",
245
+ supportsMultipleInstances: false,
246
+ },
247
+ configSchema: claudeConfigSchema,
248
+ defaultConfig: () => ({ binary: "claude", enabled: true }),
249
+
250
+ probe: async (config: ClaudeCliConfig): Promise<ProviderProbeResult> => {
251
+ const binary = resolveBinary(config.binary);
252
+ if (!binary) {
253
+ return {
254
+ available: false,
255
+ reason: `Binary '${config.binary}' not found on PATH`,
256
+ };
257
+ }
258
+ return { available: true };
259
+ },
260
+
261
+ create: async (
262
+ input: ProviderDriverCreateInput<ClaudeCliConfig>,
263
+ ): Promise<ProviderInstance> => {
264
+ const { instanceId, config, cwd } = input;
265
+
266
+ // Discover models
267
+ let discoveredModels: DiscoveredModel[] = [];
268
+ try {
269
+ const detailed = await discoverCliModelsDetailed("claude");
270
+ discoveredModels = detailed.map((m) => ({ id: m.id, name: m.name }));
271
+ } catch (err) {
272
+ fileLog(LOG_DOMAIN, "warn", LOG_DOMAIN,
273
+ `model discovery failed: ${err instanceof Error ? err.message : String(err)}`);
274
+ }
275
+
276
+ // Create managed snapshot with periodic refresh
277
+ const managed = makeManagedSnapshot({
278
+ skipInitialRefresh: true,
279
+ initialSnapshot: () =>
280
+ buildInitialSnapshot(true, discoveredModels),
281
+ checkProvider: async () => {
282
+ const binary = resolveBinary(config.binary);
283
+ if (!binary) {
284
+ return buildInitialSnapshot(false, [], undefined, `Binary '${config.binary}' not found`);
285
+ }
286
+ try {
287
+ const next = await discoverCliModelsDetailed("claude");
288
+ const models = next.map((m) => ({ id: m.id, name: m.name }));
289
+ return buildInitialSnapshot(true, models);
290
+ } catch {
291
+ return buildInitialSnapshot(true, discoveredModels);
292
+ }
293
+ },
294
+ getSettings: () => config,
295
+ haveSettingsChanged: (prev, next) =>
296
+ prev.binary !== next.binary || prev.enabled !== next.enabled,
297
+ });
298
+
299
+ // Create adapter
300
+ const adapter = createClaudeAdapter(config, cwd, instanceId);
301
+
302
+ return {
303
+ instanceId,
304
+ driverKind: DRIVER_KIND,
305
+ displayName: input.displayName || "Claude CLI",
306
+ enabled: input.enabled,
307
+ snapshot: {
308
+ getSnapshot: managed.getSnapshot,
309
+ refresh: managed.refresh,
310
+ dispose: managed.dispose,
311
+ },
312
+ adapter,
313
+ dispose: async () => {
314
+ managed.dispose();
315
+ await adapter.stopAll();
316
+ },
317
+ };
318
+ },
319
+ };