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,302 @@
1
+ /**
2
+ * GeminiDriver — ProviderDriver for the Gemini CLI agent.
3
+ *
4
+ * Adapted from t3code's driver pattern. Owns config schema,
5
+ * binary probe, model discovery (bundle parsing), session/turn
6
+ * adapter, and managed snapshot refresh.
7
+ *
8
+ * Reuses existing modules:
9
+ * - cli-provider/agents/gemini.ts — discovery (parseGeminiCliVisibleModels)
10
+ * - cli-provider/runner.ts — process spawning (runCliAgent)
11
+ * - cli-provider/sessions.ts — session marker management
12
+ * - shared/build-system-prompt.ts — system prompt injection
13
+ *
14
+ * @module providers/gemini-driver
15
+ */
16
+
17
+ import type {
18
+ ConfigSchema,
19
+ DiscoveredModel,
20
+ ProviderAdapterShape,
21
+ ProviderDriver,
22
+ ProviderDriverCreateInput,
23
+ ProviderInstance,
24
+ ProviderProbeResult,
25
+ SessionHandle,
26
+ SessionStartOptions,
27
+ TurnOptions,
28
+ TurnResult,
29
+ } from "../shared/provider-driver.js";
30
+ import { makeManagedSnapshot, buildInitialSnapshot } from "../shared/managed-refresh.js";
31
+ import { resolveBinary } from "../cli-provider/shared/discover-cache.js";
32
+ import { discoverCliModelsDetailed } from "../cli-provider/discover.js";
33
+ import { runCliAgent } from "../cli-provider/runner.js";
34
+ import {
35
+ loadCliSessionId,
36
+ saveCliSessionId,
37
+ clearCliSessionId,
38
+ applySystemPromptToCliPrompt,
39
+ shouldRetryWithoutResume,
40
+ createProvisionalPiSessionId,
41
+ type CliSessionKey,
42
+ } from "../cli-provider/sessions.js";
43
+ import { buildExternalSystemPrompt } from "../shared/build-system-prompt.js";
44
+ import { fileLog } from "../shared/file-logger.js";
45
+
46
+ const LOG_DOMAIN = "gemini-driver";
47
+ const DRIVER_KIND = "gemini-cli";
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // Config
51
+ // ---------------------------------------------------------------------------
52
+
53
+ export interface GeminiCliConfig {
54
+ readonly binary: string;
55
+ readonly enabled: boolean;
56
+ }
57
+
58
+ const geminiConfigSchema: ConfigSchema<GeminiCliConfig> = {
59
+ parse: (raw: unknown): GeminiCliConfig => {
60
+ if (!raw || typeof raw !== "object") {
61
+ return { binary: "gemini", enabled: true };
62
+ }
63
+ const obj = raw as Record<string, unknown>;
64
+ return {
65
+ binary: typeof obj.binary === "string" ? obj.binary : "gemini",
66
+ enabled: typeof obj.enabled === "boolean" ? obj.enabled : true,
67
+ };
68
+ },
69
+ };
70
+
71
+ // ---------------------------------------------------------------------------
72
+ // Adapter
73
+ // ---------------------------------------------------------------------------
74
+
75
+ function createGeminiAdapter(
76
+ config: GeminiCliConfig,
77
+ cwd: string,
78
+ instanceId: string,
79
+ ): ProviderAdapterShape & {
80
+ bindPiSessionId: (sid: string) => void;
81
+ handleSessionStart: (reason: string, sid: string | null) => void;
82
+ } {
83
+ let piSessionId = createProvisionalPiSessionId();
84
+ const systemPromptSent = new Set<string>();
85
+ const storedSystemPrompts = new Map<string, string>();
86
+
87
+ function sessionKeyFor(model: string): CliSessionKey {
88
+ return { cwd, agent: "gemini", model, piSessionId };
89
+ }
90
+
91
+ return {
92
+ bindPiSessionId: (sid: string) => {
93
+ if (sid) piSessionId = sid;
94
+ },
95
+
96
+ handleSessionStart: (reason: string, _sid: string | null) => {
97
+ if (reason === "new" || reason === "resume") {
98
+ systemPromptSent.clear();
99
+ storedSystemPrompts.clear();
100
+ }
101
+ },
102
+
103
+ startSession: async (opts: SessionStartOptions): Promise<SessionHandle> => {
104
+ const model = opts.model || "default";
105
+ if (opts.systemPrompt) storedSystemPrompts.set(model, opts.systemPrompt);
106
+ const key = sessionKeyFor(model);
107
+ const existingId = loadCliSessionId(key);
108
+ return {
109
+ sessionId: existingId || `gemini-${instanceId}-${model}`,
110
+ model,
111
+ };
112
+ },
113
+
114
+ sendTurn: async (
115
+ handle: SessionHandle,
116
+ prompt: string,
117
+ opts?: TurnOptions,
118
+ ): Promise<TurnResult> => {
119
+ const key = sessionKeyFor(handle.model);
120
+ const sessionId = loadCliSessionId(key);
121
+ const handleKey = handle.model || "default";
122
+ const needsSystemPrompt = !systemPromptSent.has(handleKey);
123
+
124
+ let systemPrompt: string | undefined;
125
+ if (needsSystemPrompt) {
126
+ systemPrompt =
127
+ storedSystemPrompts.get(handleKey) ||
128
+ buildExternalSystemPrompt({ systemPrompt: undefined }, cwd);
129
+ }
130
+
131
+ let finalPrompt = prompt;
132
+ if (needsSystemPrompt && systemPrompt) {
133
+ finalPrompt = applySystemPromptToCliPrompt(prompt, systemPrompt);
134
+ }
135
+
136
+ const onEvent = opts?.onEvent
137
+ ? (ev: { kind: string; text?: string; sessionId?: string }) => {
138
+ if (ev.kind === "session" && ev.sessionId) {
139
+ saveCliSessionId(key, ev.sessionId);
140
+ opts.onEvent!({ kind: "session", sessionId: ev.sessionId });
141
+ } else if (ev.kind === "thinking_delta" && ev.text) {
142
+ opts.onEvent!({ kind: "thinking_delta", text: ev.text });
143
+ } else if (ev.kind === "text_delta" && ev.text) {
144
+ opts.onEvent!({ kind: "text_delta", text: ev.text });
145
+ }
146
+ }
147
+ : undefined;
148
+
149
+ const runOnce = (sid: string | null, p: string) =>
150
+ runCliAgent({
151
+ agent: "gemini",
152
+ model: handle.model === "default" ? "default" : handle.model,
153
+ cwd,
154
+ prompt: p,
155
+ sessionId: sid,
156
+ signal: opts?.signal,
157
+ binary: config.binary,
158
+ onEvent,
159
+ });
160
+
161
+ try {
162
+ const result = await runOnce(sessionId, finalPrompt);
163
+ if (result.sessionId) {
164
+ saveCliSessionId(key, result.sessionId);
165
+ }
166
+ if (needsSystemPrompt) {
167
+ systemPromptSent.add(handleKey);
168
+ }
169
+ return {
170
+ text: result.text,
171
+ thinking: result.thinking,
172
+ sessionId: result.sessionId,
173
+ stopReason: "stop",
174
+ usage: result.usage,
175
+ };
176
+ } catch (err) {
177
+ const message = err instanceof Error ? err.message : String(err);
178
+ if (sessionId && shouldRetryWithoutResume(message)) {
179
+ fileLog(LOG_DOMAIN, "warn", LOG_DOMAIN,
180
+ `resume failed, clearing session and retrying: ${message.slice(0, 200)}`);
181
+ clearCliSessionId(key);
182
+ const retryPrompt = needsSystemPrompt && systemPrompt
183
+ ? applySystemPromptToCliPrompt(prompt, systemPrompt)
184
+ : prompt;
185
+ const result = await runOnce(null, retryPrompt);
186
+ if (result.sessionId) {
187
+ saveCliSessionId(key, result.sessionId);
188
+ }
189
+ if (needsSystemPrompt) {
190
+ systemPromptSent.add(handleKey);
191
+ }
192
+ return {
193
+ text: result.text,
194
+ thinking: result.thinking,
195
+ sessionId: result.sessionId,
196
+ stopReason: "stop",
197
+ usage: result.usage,
198
+ };
199
+ }
200
+ throw err;
201
+ }
202
+ },
203
+
204
+ stopSession: async (handle: SessionHandle): Promise<void> => {
205
+ const key = sessionKeyFor(handle.model);
206
+ clearCliSessionId(key);
207
+ const handleKey = handle.model || "default";
208
+ systemPromptSent.delete(handleKey);
209
+ storedSystemPrompts.delete(handleKey);
210
+ },
211
+
212
+ stopAll: async (): Promise<void> => {
213
+ systemPromptSent.clear();
214
+ storedSystemPrompts.clear();
215
+ },
216
+
217
+ hasSession: (_sessionId: string): boolean => {
218
+ return false;
219
+ },
220
+ };
221
+ }
222
+
223
+ // ---------------------------------------------------------------------------
224
+ // Driver
225
+ // ---------------------------------------------------------------------------
226
+
227
+ export const GeminiDriver: ProviderDriver<GeminiCliConfig> = {
228
+ driverKind: DRIVER_KIND,
229
+ metadata: {
230
+ displayName: "Gemini CLI",
231
+ supportsMultipleInstances: false,
232
+ },
233
+ configSchema: geminiConfigSchema,
234
+ defaultConfig: () => ({ binary: "gemini", enabled: true }),
235
+
236
+ probe: async (config: GeminiCliConfig): Promise<ProviderProbeResult> => {
237
+ const binary = resolveBinary(config.binary);
238
+ if (!binary) {
239
+ return {
240
+ available: false,
241
+ reason: `Binary '${config.binary}' not found on PATH`,
242
+ };
243
+ }
244
+ return { available: true };
245
+ },
246
+
247
+ create: async (
248
+ input: ProviderDriverCreateInput<GeminiCliConfig>,
249
+ ): Promise<ProviderInstance> => {
250
+ const { instanceId, config, cwd } = input;
251
+
252
+ let discoveredModels: DiscoveredModel[] = [];
253
+ try {
254
+ const detailed = await discoverCliModelsDetailed("gemini");
255
+ discoveredModels = detailed.map((m) => ({ id: m.id, name: m.name }));
256
+ } catch (err) {
257
+ fileLog(LOG_DOMAIN, "warn", LOG_DOMAIN,
258
+ `model discovery failed: ${err instanceof Error ? err.message : String(err)}`);
259
+ }
260
+
261
+ const managed = makeManagedSnapshot({
262
+ skipInitialRefresh: true,
263
+ initialSnapshot: () =>
264
+ buildInitialSnapshot(true, discoveredModels),
265
+ checkProvider: async () => {
266
+ const binary = resolveBinary(config.binary);
267
+ if (!binary) {
268
+ return buildInitialSnapshot(false, [], undefined, `Binary '${config.binary}' not found`);
269
+ }
270
+ try {
271
+ const next = await discoverCliModelsDetailed("gemini");
272
+ const models = next.map((m) => ({ id: m.id, name: m.name }));
273
+ return buildInitialSnapshot(true, models);
274
+ } catch {
275
+ return buildInitialSnapshot(true, discoveredModels);
276
+ }
277
+ },
278
+ getSettings: () => config,
279
+ haveSettingsChanged: (prev, next) =>
280
+ prev.binary !== next.binary || prev.enabled !== next.enabled,
281
+ });
282
+
283
+ const adapter = createGeminiAdapter(config, cwd, instanceId);
284
+
285
+ return {
286
+ instanceId,
287
+ driverKind: DRIVER_KIND,
288
+ displayName: input.displayName || "Gemini CLI",
289
+ enabled: input.enabled,
290
+ snapshot: {
291
+ getSnapshot: managed.getSnapshot,
292
+ refresh: managed.refresh,
293
+ dispose: managed.dispose,
294
+ },
295
+ adapter,
296
+ dispose: async () => {
297
+ managed.dispose();
298
+ await adapter.stopAll();
299
+ },
300
+ };
301
+ },
302
+ };