shreni 0.1.0

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 (269) hide show
  1. package/ARCHITECTURE.md +260 -0
  2. package/LICENSE +201 -0
  3. package/README.md +519 -0
  4. package/TRADEMARK.md +97 -0
  5. package/dist/agents/parikshaka.d.ts +11 -0
  6. package/dist/agents/parikshaka.d.ts.map +1 -0
  7. package/dist/agents/parikshaka.js +80 -0
  8. package/dist/agents/parikshaka.js.map +1 -0
  9. package/dist/agents/providers/claude.d.ts +3 -0
  10. package/dist/agents/providers/claude.d.ts.map +1 -0
  11. package/dist/agents/providers/claude.js +100 -0
  12. package/dist/agents/providers/claude.js.map +1 -0
  13. package/dist/agents/providers/codex.d.ts +3 -0
  14. package/dist/agents/providers/codex.d.ts.map +1 -0
  15. package/dist/agents/providers/codex.js +123 -0
  16. package/dist/agents/providers/codex.js.map +1 -0
  17. package/dist/agents/providers/gemini.d.ts +3 -0
  18. package/dist/agents/providers/gemini.d.ts.map +1 -0
  19. package/dist/agents/providers/gemini.js +77 -0
  20. package/dist/agents/providers/gemini.js.map +1 -0
  21. package/dist/agents/providers/index.d.ts +6 -0
  22. package/dist/agents/providers/index.d.ts.map +1 -0
  23. package/dist/agents/providers/index.js +35 -0
  24. package/dist/agents/providers/index.js.map +1 -0
  25. package/dist/agents/providers/registry.d.ts +20 -0
  26. package/dist/agents/providers/registry.d.ts.map +1 -0
  27. package/dist/agents/providers/registry.js +91 -0
  28. package/dist/agents/providers/registry.js.map +1 -0
  29. package/dist/agents/providers/types.d.ts +42 -0
  30. package/dist/agents/providers/types.d.ts.map +1 -0
  31. package/dist/agents/providers/types.js +61 -0
  32. package/dist/agents/providers/types.js.map +1 -0
  33. package/dist/agents/runner.d.ts +6 -0
  34. package/dist/agents/runner.d.ts.map +1 -0
  35. package/dist/agents/runner.js +159 -0
  36. package/dist/agents/runner.js.map +1 -0
  37. package/dist/agents/silpi.d.ts +3 -0
  38. package/dist/agents/silpi.d.ts.map +1 -0
  39. package/dist/agents/silpi.js +101 -0
  40. package/dist/agents/silpi.js.map +1 -0
  41. package/dist/agents/viharapala.d.ts +5 -0
  42. package/dist/agents/viharapala.d.ts.map +1 -0
  43. package/dist/agents/viharapala.js +128 -0
  44. package/dist/agents/viharapala.js.map +1 -0
  45. package/dist/cli/agents.d.ts +14 -0
  46. package/dist/cli/agents.d.ts.map +1 -0
  47. package/dist/cli/agents.js +47 -0
  48. package/dist/cli/agents.js.map +1 -0
  49. package/dist/cli/detect-toolchain.d.ts +10 -0
  50. package/dist/cli/detect-toolchain.d.ts.map +1 -0
  51. package/dist/cli/detect-toolchain.js +77 -0
  52. package/dist/cli/detect-toolchain.js.map +1 -0
  53. package/dist/cli/index.d.ts +3 -0
  54. package/dist/cli/index.d.ts.map +1 -0
  55. package/dist/cli/index.js +342 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/cli/init-kshetra.d.ts +59 -0
  58. package/dist/cli/init-kshetra.d.ts.map +1 -0
  59. package/dist/cli/init-kshetra.js +531 -0
  60. package/dist/cli/init-kshetra.js.map +1 -0
  61. package/dist/cli/list.d.ts +11 -0
  62. package/dist/cli/list.d.ts.map +1 -0
  63. package/dist/cli/list.js +45 -0
  64. package/dist/cli/list.js.map +1 -0
  65. package/dist/cli/logs.d.ts +20 -0
  66. package/dist/cli/logs.d.ts.map +1 -0
  67. package/dist/cli/logs.js +144 -0
  68. package/dist/cli/logs.js.map +1 -0
  69. package/dist/cli/migrate.d.ts +8 -0
  70. package/dist/cli/migrate.d.ts.map +1 -0
  71. package/dist/cli/migrate.js +116 -0
  72. package/dist/cli/migrate.js.map +1 -0
  73. package/dist/cli/pause.d.ts +24 -0
  74. package/dist/cli/pause.d.ts.map +1 -0
  75. package/dist/cli/pause.js +41 -0
  76. package/dist/cli/pause.js.map +1 -0
  77. package/dist/cli/phalaka-autostart.d.ts +11 -0
  78. package/dist/cli/phalaka-autostart.d.ts.map +1 -0
  79. package/dist/cli/phalaka-autostart.js +28 -0
  80. package/dist/cli/phalaka-autostart.js.map +1 -0
  81. package/dist/cli/phalaka-server.d.ts +2 -0
  82. package/dist/cli/phalaka-server.d.ts.map +1 -0
  83. package/dist/cli/phalaka-server.js +20 -0
  84. package/dist/cli/phalaka-server.js.map +1 -0
  85. package/dist/cli/phalaka.d.ts +30 -0
  86. package/dist/cli/phalaka.d.ts.map +1 -0
  87. package/dist/cli/phalaka.js +60 -0
  88. package/dist/cli/phalaka.js.map +1 -0
  89. package/dist/cli/pid.d.ts +9 -0
  90. package/dist/cli/pid.d.ts.map +1 -0
  91. package/dist/cli/pid.js +66 -0
  92. package/dist/cli/pid.js.map +1 -0
  93. package/dist/cli/provider-preflight.d.ts +11 -0
  94. package/dist/cli/provider-preflight.d.ts.map +1 -0
  95. package/dist/cli/provider-preflight.js +70 -0
  96. package/dist/cli/provider-preflight.js.map +1 -0
  97. package/dist/cli/register.d.ts +8 -0
  98. package/dist/cli/register.d.ts.map +1 -0
  99. package/dist/cli/register.js +34 -0
  100. package/dist/cli/register.js.map +1 -0
  101. package/dist/cli/run.d.ts +3 -0
  102. package/dist/cli/run.d.ts.map +1 -0
  103. package/dist/cli/run.js +40 -0
  104. package/dist/cli/run.js.map +1 -0
  105. package/dist/cli/start.d.ts +11 -0
  106. package/dist/cli/start.d.ts.map +1 -0
  107. package/dist/cli/start.js +26 -0
  108. package/dist/cli/start.js.map +1 -0
  109. package/dist/cli/status.d.ts +39 -0
  110. package/dist/cli/status.d.ts.map +1 -0
  111. package/dist/cli/status.js +207 -0
  112. package/dist/cli/status.js.map +1 -0
  113. package/dist/cli/stop.d.ts +13 -0
  114. package/dist/cli/stop.d.ts.map +1 -0
  115. package/dist/cli/stop.js +18 -0
  116. package/dist/cli/stop.js.map +1 -0
  117. package/dist/cli/sync.d.ts +6 -0
  118. package/dist/cli/sync.d.ts.map +1 -0
  119. package/dist/cli/sync.js +31 -0
  120. package/dist/cli/sync.js.map +1 -0
  121. package/dist/cli/tail.d.ts +6 -0
  122. package/dist/cli/tail.d.ts.map +1 -0
  123. package/dist/cli/tail.js +170 -0
  124. package/dist/cli/tail.js.map +1 -0
  125. package/dist/cli/telemetry.d.ts +2 -0
  126. package/dist/cli/telemetry.d.ts.map +1 -0
  127. package/dist/cli/telemetry.js +42 -0
  128. package/dist/cli/telemetry.js.map +1 -0
  129. package/dist/cli/verify-hooks.d.ts +12 -0
  130. package/dist/cli/verify-hooks.d.ts.map +1 -0
  131. package/dist/cli/verify-hooks.js +38 -0
  132. package/dist/cli/verify-hooks.js.map +1 -0
  133. package/dist/cli/worker.d.ts +2 -0
  134. package/dist/cli/worker.d.ts.map +1 -0
  135. package/dist/cli/worker.js +211 -0
  136. package/dist/cli/worker.js.map +1 -0
  137. package/dist/kshetra/config.d.ts +64 -0
  138. package/dist/kshetra/config.d.ts.map +1 -0
  139. package/dist/kshetra/config.js +173 -0
  140. package/dist/kshetra/config.js.map +1 -0
  141. package/dist/kshetra/registry.d.ts +5 -0
  142. package/dist/kshetra/registry.d.ts.map +1 -0
  143. package/dist/kshetra/registry.js +69 -0
  144. package/dist/kshetra/registry.js.map +1 -0
  145. package/dist/kshetra/state.d.ts +57 -0
  146. package/dist/kshetra/state.d.ts.map +1 -0
  147. package/dist/kshetra/state.js +195 -0
  148. package/dist/kshetra/state.js.map +1 -0
  149. package/dist/kshetra/toolchain.d.ts +20 -0
  150. package/dist/kshetra/toolchain.d.ts.map +1 -0
  151. package/dist/kshetra/toolchain.js +146 -0
  152. package/dist/kshetra/toolchain.js.map +1 -0
  153. package/dist/phalaka/api.d.ts +123 -0
  154. package/dist/phalaka/api.d.ts.map +1 -0
  155. package/dist/phalaka/api.js +196 -0
  156. package/dist/phalaka/api.js.map +1 -0
  157. package/dist/phalaka/beads-read.d.ts +49 -0
  158. package/dist/phalaka/beads-read.d.ts.map +1 -0
  159. package/dist/phalaka/beads-read.js +174 -0
  160. package/dist/phalaka/beads-read.js.map +1 -0
  161. package/dist/phalaka/pid.d.ts +6 -0
  162. package/dist/phalaka/pid.d.ts.map +1 -0
  163. package/dist/phalaka/pid.js +48 -0
  164. package/dist/phalaka/pid.js.map +1 -0
  165. package/dist/phalaka/server.d.ts +10 -0
  166. package/dist/phalaka/server.d.ts.map +1 -0
  167. package/dist/phalaka/server.js +30 -0
  168. package/dist/phalaka/server.js.map +1 -0
  169. package/dist/phalaka/token.d.ts +5 -0
  170. package/dist/phalaka/token.d.ts.map +1 -0
  171. package/dist/phalaka/token.js +40 -0
  172. package/dist/phalaka/token.js.map +1 -0
  173. package/dist/phalaka/ui.d.ts +15 -0
  174. package/dist/phalaka/ui.d.ts.map +1 -0
  175. package/dist/phalaka/ui.js +233 -0
  176. package/dist/phalaka/ui.js.map +1 -0
  177. package/dist/sthapathi/activity-log.d.ts +68 -0
  178. package/dist/sthapathi/activity-log.d.ts.map +1 -0
  179. package/dist/sthapathi/activity-log.js +57 -0
  180. package/dist/sthapathi/activity-log.js.map +1 -0
  181. package/dist/sthapathi/beads.d.ts +27 -0
  182. package/dist/sthapathi/beads.d.ts.map +1 -0
  183. package/dist/sthapathi/beads.js +153 -0
  184. package/dist/sthapathi/beads.js.map +1 -0
  185. package/dist/sthapathi/branch.d.ts +5 -0
  186. package/dist/sthapathi/branch.d.ts.map +1 -0
  187. package/dist/sthapathi/branch.js +20 -0
  188. package/dist/sthapathi/branch.js.map +1 -0
  189. package/dist/sthapathi/dispatch.d.ts +14 -0
  190. package/dist/sthapathi/dispatch.d.ts.map +1 -0
  191. package/dist/sthapathi/dispatch.js +326 -0
  192. package/dist/sthapathi/dispatch.js.map +1 -0
  193. package/dist/sthapathi/errors.d.ts +27 -0
  194. package/dist/sthapathi/errors.d.ts.map +1 -0
  195. package/dist/sthapathi/errors.js +174 -0
  196. package/dist/sthapathi/errors.js.map +1 -0
  197. package/dist/sthapathi/gh.d.ts +19 -0
  198. package/dist/sthapathi/gh.d.ts.map +1 -0
  199. package/dist/sthapathi/gh.js +69 -0
  200. package/dist/sthapathi/gh.js.map +1 -0
  201. package/dist/sthapathi/git.d.ts +41 -0
  202. package/dist/sthapathi/git.d.ts.map +1 -0
  203. package/dist/sthapathi/git.js +199 -0
  204. package/dist/sthapathi/git.js.map +1 -0
  205. package/dist/sthapathi/guard.d.ts +24 -0
  206. package/dist/sthapathi/guard.d.ts.map +1 -0
  207. package/dist/sthapathi/guard.js +64 -0
  208. package/dist/sthapathi/guard.js.map +1 -0
  209. package/dist/sthapathi/health.d.ts +23 -0
  210. package/dist/sthapathi/health.d.ts.map +1 -0
  211. package/dist/sthapathi/health.js +142 -0
  212. package/dist/sthapathi/health.js.map +1 -0
  213. package/dist/sthapathi/index.d.ts +21 -0
  214. package/dist/sthapathi/index.d.ts.map +1 -0
  215. package/dist/sthapathi/index.js +88 -0
  216. package/dist/sthapathi/index.js.map +1 -0
  217. package/dist/sthapathi/lifecycle.d.ts +7 -0
  218. package/dist/sthapathi/lifecycle.d.ts.map +1 -0
  219. package/dist/sthapathi/lifecycle.js +43 -0
  220. package/dist/sthapathi/lifecycle.js.map +1 -0
  221. package/dist/sthapathi/lint.d.ts +8 -0
  222. package/dist/sthapathi/lint.d.ts.map +1 -0
  223. package/dist/sthapathi/lint.js +33 -0
  224. package/dist/sthapathi/lint.js.map +1 -0
  225. package/dist/sthapathi/merge.d.ts +18 -0
  226. package/dist/sthapathi/merge.d.ts.map +1 -0
  227. package/dist/sthapathi/merge.js +259 -0
  228. package/dist/sthapathi/merge.js.map +1 -0
  229. package/dist/sthapathi/notifications.d.ts +14 -0
  230. package/dist/sthapathi/notifications.d.ts.map +1 -0
  231. package/dist/sthapathi/notifications.js +57 -0
  232. package/dist/sthapathi/notifications.js.map +1 -0
  233. package/dist/sthapathi/parikshaka-dispatch.d.ts +12 -0
  234. package/dist/sthapathi/parikshaka-dispatch.d.ts.map +1 -0
  235. package/dist/sthapathi/parikshaka-dispatch.js +0 -0
  236. package/dist/sthapathi/parikshaka-dispatch.js.map +1 -0
  237. package/dist/sthapathi/pickup.d.ts +13 -0
  238. package/dist/sthapathi/pickup.d.ts.map +1 -0
  239. package/dist/sthapathi/pickup.js +144 -0
  240. package/dist/sthapathi/pickup.js.map +1 -0
  241. package/dist/sthapathi/recover.d.ts +16 -0
  242. package/dist/sthapathi/recover.d.ts.map +1 -0
  243. package/dist/sthapathi/recover.js +149 -0
  244. package/dist/sthapathi/recover.js.map +1 -0
  245. package/dist/sthapathi/retry.d.ts +11 -0
  246. package/dist/sthapathi/retry.d.ts.map +1 -0
  247. package/dist/sthapathi/retry.js +42 -0
  248. package/dist/sthapathi/retry.js.map +1 -0
  249. package/dist/sthapathi/self-heal.d.ts +19 -0
  250. package/dist/sthapathi/self-heal.d.ts.map +1 -0
  251. package/dist/sthapathi/self-heal.js +46 -0
  252. package/dist/sthapathi/self-heal.js.map +1 -0
  253. package/dist/sthapathi/types.d.ts +56 -0
  254. package/dist/sthapathi/types.d.ts.map +1 -0
  255. package/dist/sthapathi/types.js +4 -0
  256. package/dist/sthapathi/types.js.map +1 -0
  257. package/dist/sthapathi/watchdog.d.ts +27 -0
  258. package/dist/sthapathi/watchdog.d.ts.map +1 -0
  259. package/dist/sthapathi/watchdog.js +145 -0
  260. package/dist/sthapathi/watchdog.js.map +1 -0
  261. package/dist/telemetry/telemetry.d.ts +42 -0
  262. package/dist/telemetry/telemetry.d.ts.map +1 -0
  263. package/dist/telemetry/telemetry.js +189 -0
  264. package/dist/telemetry/telemetry.js.map +1 -0
  265. package/dist/test-setup.d.ts +2 -0
  266. package/dist/test-setup.d.ts.map +1 -0
  267. package/dist/test-setup.js +16 -0
  268. package/dist/test-setup.js.map +1 -0
  269. package/package.json +71 -0
@@ -0,0 +1,42 @@
1
+ export type Provider = 'anthropic' | 'gemini' | 'openai';
2
+ export interface AgentRunnerOpts {
3
+ provider: Provider;
4
+ systemPrompt: string;
5
+ userPrompt: string;
6
+ cwd: string;
7
+ agentName: 'silpi' | 'viharapala' | 'parikshaka';
8
+ kshetraId: string;
9
+ beadId: string;
10
+ model: string;
11
+ jsonSchema: Record<string, unknown>;
12
+ disallowedTools?: string[];
13
+ signal?: AbortSignal;
14
+ }
15
+ export interface AgentRunResult {
16
+ structuredOutput: unknown;
17
+ resultText: string | null;
18
+ toolCallCount: number;
19
+ }
20
+ export interface SpawnSpec {
21
+ bin: string;
22
+ args: string[];
23
+ env?: Record<string, string>;
24
+ stdin?: string;
25
+ }
26
+ export interface AdapterEmit {
27
+ text(text: string): void;
28
+ toolCall(tool: string, detail: string): void;
29
+ }
30
+ export interface StreamParser {
31
+ onLine(line: string): void;
32
+ finalize(exitCode: number | null, stderrTail: string): AgentRunResult;
33
+ }
34
+ export interface ProviderAdapter {
35
+ readonly name: Provider;
36
+ buildSpawn(opts: AgentRunnerOpts): SpawnSpec;
37
+ createParser(opts: AgentRunnerOpts, emit: AdapterEmit): StreamParser;
38
+ }
39
+ export declare function resolveBin(envVar: string, defaultBin: string): string;
40
+ export declare function toolDetail(name: string, input: Record<string, unknown>): string;
41
+ export declare function extractLastJsonObject(text: string): unknown;
42
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/agents/providers/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIpC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAK3B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C;AAKD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAAC;CACvE;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;CACtE;AAID,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGrE;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQ/E;AAKD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA2B3D"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveBin = resolveBin;
4
+ exports.toolDetail = toolDetail;
5
+ exports.extractLastJsonObject = extractLastJsonObject;
6
+ // Shared: let users point an adapter at a specific binary (e.g. a downloaded
7
+ // CLI not on PATH) via an env override, falling back to the PATH name.
8
+ function resolveBin(envVar, defaultBin) {
9
+ const override = process.env[envVar];
10
+ return override && override.trim() ? override.trim() : defaultBin;
11
+ }
12
+ // Shared: trim a tool input down to one salient field for the activity log.
13
+ function toolDetail(name, input) {
14
+ let raw;
15
+ if (name === 'Bash' || name === 'shell' || name === 'run_command')
16
+ raw = String(input['command'] ?? input['cmd'] ?? '');
17
+ else if (name === 'Read' || name === 'Write' || name === 'Edit' || name === 'NotebookEdit')
18
+ raw = String(input['file_path'] ?? input['path'] ?? '');
19
+ else if (name === 'Agent')
20
+ raw = String(input['description'] ?? '');
21
+ else
22
+ raw = String(Object.values(input)[0] ?? '');
23
+ return raw.replace(/\n/g, ' ').slice(0, 120);
24
+ }
25
+ // Shared: extract the last top-level JSON object from free text. Used by
26
+ // providers that have no structured-output flag (the agent emits JSON as its
27
+ // final message and we recover it here).
28
+ function extractLastJsonObject(text) {
29
+ const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/gi);
30
+ const candidates = [];
31
+ if (fenced) {
32
+ for (const f of fenced)
33
+ candidates.push(f.replace(/```(?:json)?/i, '').replace(/```$/, '').trim());
34
+ }
35
+ // Also scan for the last balanced { ... } span.
36
+ let depth = 0;
37
+ let start = -1;
38
+ for (let i = 0; i < text.length; i++) {
39
+ const ch = text[i];
40
+ if (ch === '{') {
41
+ if (depth === 0)
42
+ start = i;
43
+ depth++;
44
+ }
45
+ else if (ch === '}') {
46
+ depth--;
47
+ if (depth === 0 && start >= 0)
48
+ candidates.push(text.slice(start, i + 1));
49
+ }
50
+ }
51
+ for (let i = candidates.length - 1; i >= 0; i--) {
52
+ try {
53
+ return JSON.parse(candidates[i]);
54
+ }
55
+ catch {
56
+ // try the next candidate
57
+ }
58
+ }
59
+ return null;
60
+ }
61
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/providers/types.ts"],"names":[],"mappings":";;AA2DA,gCAGC;AAGD,gCAQC;AAKD,sDA2BC;AAhDD,6EAA6E;AAC7E,uEAAuE;AACvE,SAAgB,UAAU,CAAC,MAAc,EAAE,UAAkB;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AACpE,CAAC;AAED,4EAA4E;AAC5E,SAAgB,UAAU,CAAC,IAAY,EAAE,KAA8B;IACrE,IAAI,GAAW,CAAC;IAChB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,aAAa;QAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;SACnH,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,cAAc;QACxF,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SACrD,IAAI,IAAI,KAAK,OAAO;QAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;;QAC/D,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,yEAAyE;AACzE,6EAA6E;AAC7E,yCAAyC;AACzC,SAAgB,qBAAqB,CAAC,IAAY;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrG,CAAC;IACD,gDAAgD;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,KAAK,KAAK,CAAC;gBAAE,KAAK,GAAG,CAAC,CAAC;YAC3B,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACtB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AgentRunnerOpts, AgentRunResult } from './providers/types.js';
2
+ export type { AgentRunnerOpts, AgentRunResult };
3
+ export type { Provider } from './providers/types.js';
4
+ export declare function runAgent(opts: AgentRunnerOpts): Promise<AgentRunResult>;
5
+ export declare const runClaudeAgent: typeof runAgent;
6
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAe,MAAM,sBAAsB,CAAC;AAEzF,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAChD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA8CrD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA+B7E;AAGD,eAAO,MAAM,cAAc,iBAAW,CAAC"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runClaudeAgent = void 0;
4
+ exports.runAgent = runAgent;
5
+ const child_process_1 = require("child_process");
6
+ const activity_log_js_1 = require("../sthapathi/activity-log.js");
7
+ const errors_js_1 = require("../sthapathi/errors.js");
8
+ const index_js_1 = require("./providers/index.js");
9
+ const TRANSIENT_MARKERS = [
10
+ 'overloaded',
11
+ 'api error: 429',
12
+ 'api error: 500',
13
+ 'api error: 502',
14
+ 'api error: 503',
15
+ 'api error: 504',
16
+ 'api error: 529',
17
+ 'rate limit',
18
+ 'rate_limit',
19
+ 'service unavailable',
20
+ 'internal server error',
21
+ ];
22
+ const MAX_ATTEMPTS = 4;
23
+ // Wait before attempts 2, 3, 4
24
+ const RETRY_BACKOFF_MS = [10_000, 30_000, 60_000];
25
+ function looksTransient(text) {
26
+ const lower = text.toLowerCase();
27
+ return TRANSIENT_MARKERS.some(m => lower.includes(m));
28
+ }
29
+ // Abortable backoff: resolves after ms, or early (still resolves — the caller
30
+ // re-checks signal.aborted and stops retrying) the moment the signal aborts, so
31
+ // a pending 60s transient backoff never delays a self-heal cancellation.
32
+ function sleep(ms, signal) {
33
+ return new Promise(resolve => {
34
+ if (signal?.aborted)
35
+ return resolve();
36
+ const timer = setTimeout(() => {
37
+ signal?.removeEventListener('abort', onAbort);
38
+ resolve();
39
+ }, ms);
40
+ function onAbort() {
41
+ clearTimeout(timer);
42
+ resolve();
43
+ }
44
+ signal?.addEventListener('abort', onAbort, { once: true });
45
+ });
46
+ }
47
+ // Dispatcher: picks the provider adapter, spawns its CLI, streams events to the
48
+ // activity log, and retries on transient errors. Provider-specific command
49
+ // construction and output parsing live in ./providers/*.
50
+ async function runAgent(opts) {
51
+ let lastErr = new Error(`${opts.agentName}: no attempt made`);
52
+ for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
53
+ try {
54
+ return await runAttempt(opts);
55
+ }
56
+ catch (err) {
57
+ lastErr = err;
58
+ // A self-heal abort is terminal — never retry it (the run is being
59
+ // cancelled on purpose so the worker can RECOVER).
60
+ if (lastErr instanceof errors_js_1.AgentAbortedError || opts.signal?.aborted)
61
+ throw lastErr;
62
+ const msg = lastErr.message;
63
+ if (looksTransient(msg) && attempt < MAX_ATTEMPTS) {
64
+ const waitMs = RETRY_BACKOFF_MS[attempt - 1];
65
+ (0, activity_log_js_1.emit)({
66
+ type: 'agent_text',
67
+ kshetra: opts.kshetraId,
68
+ beadId: opts.beadId,
69
+ agent: opts.agentName,
70
+ text: `[transient error — retrying in ${waitMs / 1000}s (attempt ${attempt + 1}/${MAX_ATTEMPTS}): ${msg.slice(0, 200)}]`,
71
+ });
72
+ await sleep(waitMs, opts.signal);
73
+ // The backoff may have been cut short by an abort — re-check before retrying.
74
+ if (opts.signal?.aborted)
75
+ throw new errors_js_1.AgentAbortedError();
76
+ }
77
+ else {
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ throw lastErr;
83
+ }
84
+ // Back-compat alias — earlier code/tests referred to runClaudeAgent.
85
+ exports.runClaudeAgent = runAgent;
86
+ function runAttempt(opts) {
87
+ return new Promise((resolve, reject) => {
88
+ const adapter = (0, index_js_1.getAdapter)(opts.provider);
89
+ const spec = adapter.buildSpawn(opts);
90
+ // Each agent emit also refreshes the worker heartbeat (the watchdog design
91
+ // §3.1): the worker's own interval already keeps liveness fresh, but stamping on
92
+ // emit makes a live-but-chatty agent register promptly for cross-process readers
93
+ // (`shreni status` / Phalaka) between worker ticks.
94
+ const adapterEmit = {
95
+ text(text) {
96
+ if (!text.trim())
97
+ return;
98
+ (0, activity_log_js_1.touchHeartbeat)(opts.kshetraId);
99
+ (0, activity_log_js_1.emit)({ type: 'agent_text', kshetra: opts.kshetraId, beadId: opts.beadId, agent: opts.agentName, text });
100
+ },
101
+ toolCall(tool, detail) {
102
+ (0, activity_log_js_1.touchHeartbeat)(opts.kshetraId);
103
+ (0, activity_log_js_1.emit)({ type: 'agent_tool_call', kshetra: opts.kshetraId, beadId: opts.beadId, agent: opts.agentName, tool, detail });
104
+ },
105
+ };
106
+ const parser = adapter.createParser(opts, adapterEmit);
107
+ // Cancellation for self-heal: SIGKILL the hung provider
108
+ // subprocess the instant the signal aborts, and reject so the loop unwinds.
109
+ // SIGKILL (not TERM) because the hang is, by definition, unresponsive; the
110
+ // work tree is reconciled by recoverKshetra afterward, so nothing is lost to
111
+ // skipping graceful shutdown. If already aborted, don't even spawn.
112
+ if (opts.signal?.aborted)
113
+ return reject(new errors_js_1.AgentAbortedError());
114
+ const proc = (0, child_process_1.spawn)(spec.bin, spec.args, {
115
+ cwd: opts.cwd,
116
+ env: { ...process.env, ...(spec.env ?? {}) },
117
+ stdio: [spec.stdin !== undefined ? 'pipe' : 'ignore', 'pipe', 'pipe'],
118
+ });
119
+ const onAbort = () => {
120
+ proc.kill('SIGKILL');
121
+ reject(new errors_js_1.AgentAbortedError());
122
+ };
123
+ opts.signal?.addEventListener('abort', onAbort, { once: true });
124
+ proc.on('close', () => opts.signal?.removeEventListener('abort', onAbort));
125
+ if (spec.stdin !== undefined && proc.stdin) {
126
+ proc.stdin.write(spec.stdin);
127
+ proc.stdin.end();
128
+ }
129
+ let stdoutBuf = '';
130
+ let stderrBuf = '';
131
+ proc.stdout?.on('data', (chunk) => {
132
+ stdoutBuf += chunk.toString('utf8');
133
+ const lines = stdoutBuf.split('\n');
134
+ stdoutBuf = lines.pop() ?? '';
135
+ for (const line of lines) {
136
+ if (line.trim())
137
+ parser.onLine(line);
138
+ }
139
+ });
140
+ proc.stderr?.on('data', (chunk) => {
141
+ stderrBuf += chunk.toString('utf8');
142
+ });
143
+ proc.on('error', (err) => {
144
+ reject(new Error(`${opts.agentName}: failed to spawn ${spec.bin} CLI — ${err.message}`));
145
+ });
146
+ proc.on('close', (code) => {
147
+ // Flush any trailing partial line.
148
+ if (stdoutBuf.trim())
149
+ parser.onLine(stdoutBuf);
150
+ try {
151
+ resolve(parser.finalize(code, stderrBuf.slice(-1000)));
152
+ }
153
+ catch (err) {
154
+ reject(err);
155
+ }
156
+ });
157
+ });
158
+ }
159
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AgentContext, SilpiOutput, ViharapalaOutput } from '../sthapathi/types.js';
2
+ export declare function runSilpi(context: AgentContext, round: number, feedback?: ViharapalaOutput | null, branch?: string, signal?: AbortSignal): Promise<SilpiOutput>;
3
+ //# sourceMappingURL=silpi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"silpi.d.ts","sourceRoot":"","sources":["../../src/agents/silpi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAiGzF,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,EAClC,MAAM,SAAiD,EACvD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CAsBtB"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runSilpi = runSilpi;
4
+ const errors_js_1 = require("../sthapathi/errors.js");
5
+ const runner_js_1 = require("./runner.js");
6
+ const SILPI_OUTPUT_SCHEMA = {
7
+ type: 'object',
8
+ properties: {
9
+ filesChanged: {
10
+ type: 'array',
11
+ items: {
12
+ type: 'object',
13
+ properties: {
14
+ path: { type: 'string' },
15
+ diff: { type: 'string' },
16
+ },
17
+ required: ['path', 'diff'],
18
+ },
19
+ },
20
+ testFiles: { type: 'array', items: { type: 'string' } },
21
+ summary: { type: 'string' },
22
+ confidenceScore: { type: 'number' },
23
+ questionsForReviewer: { type: 'array', items: { type: 'string' } },
24
+ lintPassed: { type: 'boolean' },
25
+ testsPassed: { type: 'boolean' },
26
+ insights: { type: 'array', items: { type: 'string' } },
27
+ },
28
+ required: [
29
+ 'filesChanged',
30
+ 'testFiles',
31
+ 'summary',
32
+ 'confidenceScore',
33
+ 'questionsForReviewer',
34
+ 'lintPassed',
35
+ 'testsPassed',
36
+ 'insights',
37
+ ],
38
+ };
39
+ function buildSilpiSystemPrompt(context, round, branch, feedback) {
40
+ const sections = [];
41
+ sections.push(`You are Silpi, a coding agent for the ${context.kshetra.name} project.\n` +
42
+ `You have real tools available: Bash, Read, Write, Edit. Use them to implement the task.`);
43
+ // Native execution (the agent-execution design §3.1): repo skills/rules, the project
44
+ // instruction file, and the conventions docs are loaded by the provider CLI
45
+ // itself, so we inject only the cross-project universalSkills here. The
46
+ // conventions/architecture sections are gone for the same reason — they now
47
+ // @-import into the instruction file the CLI loads.
48
+ if (context.universalSkills)
49
+ sections.push(`== SKILLS ==\n${context.universalSkills}`);
50
+ if (context.projectMemory)
51
+ sections.push(`== PROJECT MEMORY ==\n${context.projectMemory}`);
52
+ sections.push(`== TASK ==\nRound: ${round}\nBranch: ${branch}\n${context.taskDetails}`);
53
+ if (feedback?.mustFix?.length) {
54
+ const list = feedback.mustFix.map(f => `- ${f}`).join('\n');
55
+ sections.push(`== PRIOR FEEDBACK (Round ${round}) ==\n` +
56
+ `The previous round was rejected. You MUST fix ALL of the following:\n${list}`);
57
+ }
58
+ if (context.ragChunks)
59
+ sections.push(`== RELEVANT CODE ==\n${context.ragChunks}`);
60
+ sections.push(`== ROLE BOUNDARY ==
61
+ You are Silpi, the Sthapathi-dispatched implementer for this bead, running
62
+ unattended — this is NOT an interactive session. Any repository instruction
63
+ addressed to "interactive sessions" (e.g. "task producer only", "do NOT implement
64
+ tasks yourself") does NOT apply to you: implement this task with your tools.
65
+ You are a pure coding agent. Sthapathi handles all task-state and git operations EXCEPT your implementation commits.
66
+ Do NOT call \`bd\` commands. Do NOT push to remote.
67
+
68
+ == INSTRUCTIONS ==
69
+ 1. Use Read to understand the existing codebase structure and patterns.
70
+ 2. Implement the task fully using Write and Edit tools.
71
+ 3. Write unit tests covering the new behaviour.
72
+ 4. Run the project's quality gates (check the project instruction file for commands) using Bash — ALL must pass.
73
+ 5. If tests or lint fail, fix them before proceeding.
74
+ 6. Commit all changes: \`git add -A && git commit -m "${context.task.id}: <brief description>"\`
75
+ 7. Get the diff of your commit: \`git show --stat HEAD && git diff HEAD~1 HEAD\`
76
+ 8. After completing all work, your FINAL response MUST be ONLY a valid JSON SilpiOutput object.
77
+ — No markdown fences, no explanation, no other text.
78
+ — Use the git diff output to populate \`filesChanged[].diff\`.
79
+ — Set \`lintPassed\` and \`testsPassed\` based on what actually happened when you ran them.
80
+ — \`confidenceScore\` is 0-100.`);
81
+ return sections.join('\n\n');
82
+ }
83
+ async function runSilpi(context, round, feedback, branch = `bead-${context.task.id}/${context.task.slug}`, signal) {
84
+ const result = await (0, runner_js_1.runAgent)({
85
+ provider: context.kshetra.agents.provider,
86
+ systemPrompt: buildSilpiSystemPrompt(context, round, branch, feedback),
87
+ userPrompt: `Implement task ${context.task.id}: ${context.task.title}. You are on branch ${branch}. Use your tools to implement, test, lint, and commit.`,
88
+ cwd: context.kshetra.repo.path,
89
+ agentName: 'silpi',
90
+ kshetraId: context.kshetra.id,
91
+ beadId: context.task.id,
92
+ model: context.kshetra.agents.model,
93
+ jsonSchema: SILPI_OUTPUT_SCHEMA,
94
+ signal,
95
+ });
96
+ if (!result.structuredOutput) {
97
+ throw new errors_js_1.ParseError(`Silpi: no structured output in result — resultText: ${(result.resultText ?? '').slice(0, 200)}`, null);
98
+ }
99
+ return result.structuredOutput;
100
+ }
101
+ //# sourceMappingURL=silpi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"silpi.js","sourceRoot":"","sources":["../../src/agents/silpi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { AgentContext, SilpiOutput, ViharapalaOutput } from '../sthapathi/types.js';
2
+ import { resolveBuildCommand } from '../kshetra/toolchain.js';
3
+ export { resolveBuildCommand };
4
+ export declare function runViharapala(context: AgentContext, silpiOut: SilpiOutput, round: number, roundHistory: string, branch?: string, signal?: AbortSignal): Promise<ViharapalaOutput>;
5
+ //# sourceMappingURL=viharapala.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viharapala.d.ts","sourceRoot":"","sources":["../../src/agents/viharapala.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAMzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAwH/B,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,MAAM,SAAiD,EACvD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAsB3B"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveBuildCommand = void 0;
4
+ exports.runViharapala = runViharapala;
5
+ const errors_js_1 = require("../sthapathi/errors.js");
6
+ const runner_js_1 = require("./runner.js");
7
+ // The build-gate command is resolved by the toolchain profile (one home for all
8
+ // ecosystem defaults). Re-exported so callers/tests that reach for it via the
9
+ // reviewer keep working. An empty command means the Kshetra has no build gate.
10
+ const toolchain_js_1 = require("../kshetra/toolchain.js");
11
+ Object.defineProperty(exports, "resolveBuildCommand", { enumerable: true, get: function () { return toolchain_js_1.resolveBuildCommand; } });
12
+ const VIHARAPALA_OUTPUT_SCHEMA = {
13
+ type: 'object',
14
+ properties: {
15
+ verdict: { type: 'string', enum: ['APPROVE', 'REJECT'] },
16
+ overallScore: { type: 'number' },
17
+ mustFix: { type: 'array', items: { type: 'string' } },
18
+ suggestions: { type: 'array', items: { type: 'string' } },
19
+ issues: {
20
+ type: 'array',
21
+ items: {
22
+ type: 'object',
23
+ properties: {
24
+ severity: { type: 'string', enum: ['blocker', 'major', 'minor'] },
25
+ file: { type: 'string' },
26
+ description: { type: 'string' },
27
+ },
28
+ required: ['severity', 'description'],
29
+ },
30
+ },
31
+ insights: { type: 'array', items: { type: 'string' } },
32
+ },
33
+ required: ['verdict', 'overallScore', 'mustFix', 'suggestions', 'issues', 'insights'],
34
+ };
35
+ function buildViharapalaSystemPrompt(context, silpiOut, round, roundHistory, branch) {
36
+ const sections = [];
37
+ const buildCommand = (0, toolchain_js_1.resolveBuildCommand)(context.kshetra);
38
+ sections.push(`You are Viharapala, the code reviewer for the ${context.kshetra.name} project.\n` +
39
+ `You have real tools available: Bash, Read. Use them to review the actual code.`);
40
+ // Native execution (the agent-execution design §3.1): the provider CLI loads repo
41
+ // skills/rules and the instruction file itself, so only the cross-project
42
+ // universalSkills are injected here.
43
+ if (context.universalSkills)
44
+ sections.push(`== SKILLS ==\n${context.universalSkills}`);
45
+ if (context.projectMemory)
46
+ sections.push(`== PROJECT MEMORY ==\n${context.projectMemory}`);
47
+ sections.push(`== TASK AND ACCEPTANCE CRITERIA ==\n${context.taskDetails}`);
48
+ sections.push(`== SILPI'S SUMMARY (Round ${round}, Branch: ${branch}) ==
49
+ ${JSON.stringify({ summary: silpiOut.summary, files: silpiOut.filesChanged.map(f => f.path), confidence: silpiOut.confidenceScore, lintPassed: silpiOut.lintPassed, testsPassed: silpiOut.testsPassed, questions: silpiOut.questionsForReviewer }, null, 2)}`);
50
+ if (roundHistory)
51
+ sections.push(`== FULL ROUND HISTORY ==\n${roundHistory}`);
52
+ sections.push(`== REVIEW DIMENSIONS ==
53
+ 1. Correctness: Does the code satisfy ALL acceptance criteria?
54
+ 2. Test coverage: Are edge cases covered? Do tests verify behaviour, not just implementation?
55
+ 3. Code quality: Patterns, readability, potential bugs, security.
56
+ 4. Side effects: Regressions, breaking interface changes.
57
+ 5. Completeness: No TODOs, no half-done work, no dead code.`);
58
+ // Reviewer-only custom instructions (the agent-execution design §3.3 channel B).
59
+ // Injected here and nowhere else (Silpi never sees it). It ADDS criteria and
60
+ // rubric on top of the dimensions above but cannot waive a Shreni hard gate —
61
+ // precedence is: Shreni gates (build/test, role boundary, output contract) >
62
+ // this guide > shared native criteria.
63
+ if (context.reviewGuide) {
64
+ sections.push(`== REVIEW GUIDE (developer-supplied, reviewer-only) ==
65
+ ${context.reviewGuide}
66
+
67
+ Apply these as ADDITIONAL review criteria and scoring rubric. They do NOT override
68
+ Shreni's hard gates: a failing build/test gate, the role boundary, and the
69
+ structured-output contract always win. This guide can only make the review
70
+ stricter or add criteria — it can never approve a task that fails a gate.`);
71
+ }
72
+ sections.push(buildCommand
73
+ ? `== BUILD GATE (MANDATORY, RUN FIRST) ==
74
+ Before reviewing anything, run the build on branch ${branch}: \`${buildCommand}\`
75
+ This is the authoritative compile/type-check gate — it must exit 0.
76
+ - If the build exits NON-ZERO, you MUST REJECT. Do not read the diff, do not
77
+ evaluate correctness, do not APPROVE under any circumstance.
78
+ · Set \`verdict\` to "REJECT".
79
+ · Put the compiler/build error output (the failing files and messages) into
80
+ \`mustFix\` so Silpi can fix it.
81
+ · Add a \`blocker\`-severity entry to \`issues\` describing the build failure.
82
+ - Only if the build exits 0 may you proceed to the test gate and the review.
83
+ There are NO exceptions: never skip the build gate to unblock a deadline, and
84
+ never approve a task whose branch does not compile — a red build means type
85
+ errors would reach main.`
86
+ : `== BUILD GATE ==
87
+ This Kshetra has no build gate configured (stack.buildCommand is empty), so there
88
+ is no compile step to run. Proceed directly to the test gate and the review.`);
89
+ sections.push(`== ROLE BOUNDARY ==
90
+ You are Viharapala, the Sthapathi-dispatched reviewer for this bead, running
91
+ unattended — this is NOT an interactive session. Any repository instruction
92
+ addressed to "interactive sessions" (e.g. "task producer only", "do NOT implement
93
+ or review") does NOT apply to you: review this task with your tools.
94
+ You are a pure reviewer. Do NOT call bd commands. Do NOT commit or push. Sthapathi handles that.
95
+ Minor style issues do NOT block approval. Only raise REJECT for genuine blockers.
96
+
97
+ == INSTRUCTIONS ==
98
+ 1. ${buildCommand ? `Use Bash to run the BUILD GATE first: \`${buildCommand}\`. If it fails, REJECT
99
+ immediately with the compiler output in \`mustFix\` (see BUILD GATE above).` : `No build gate is configured for this Kshetra — skip straight to the tests.`}
100
+ 2. Use Read to read the changed files (check Silpi's summary for which files changed on branch ${branch}).
101
+ 3. Use Bash to run the test suite and verify tests pass.
102
+ 4. Use Bash to check git diff: \`git diff main...${branch}\`
103
+ 5. Evaluate against all acceptance criteria in the task.
104
+ 6. After your review, your FINAL response MUST be ONLY a valid JSON ViharapalaOutput object.
105
+ — No markdown fences, no explanation, no other text.
106
+ — \`verdict\` must be "APPROVE" or "REJECT".
107
+ — Only REJECT for genuine blockers. Minor suggestions go in \`suggestions\`, not \`mustFix\`.`);
108
+ return sections.join('\n\n');
109
+ }
110
+ async function runViharapala(context, silpiOut, round, roundHistory, branch = `bead-${context.task.id}/${context.task.slug}`, signal) {
111
+ const result = await (0, runner_js_1.runAgent)({
112
+ provider: context.kshetra.agents.provider,
113
+ systemPrompt: buildViharapalaSystemPrompt(context, silpiOut, round, roundHistory, branch),
114
+ userPrompt: `Review the implementation on branch ${branch} for task ${context.task.id}: ${context.task.title}.`,
115
+ cwd: context.kshetra.repo.path,
116
+ agentName: 'viharapala',
117
+ kshetraId: context.kshetra.id,
118
+ beadId: context.task.id,
119
+ model: context.kshetra.agents.model,
120
+ jsonSchema: VIHARAPALA_OUTPUT_SCHEMA,
121
+ signal,
122
+ });
123
+ if (!result.structuredOutput) {
124
+ throw new errors_js_1.ParseError(`Viharapala: no structured output in result — resultText: ${(result.resultText ?? '').slice(0, 200)}`, null);
125
+ }
126
+ return result.structuredOutput;
127
+ }
128
+ //# sourceMappingURL=viharapala.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viharapala.js","sourceRoot":"","sources":["../../src/agents/viharapala.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface AgentLine {
2
+ kshetraId: string;
3
+ kshetraName: string;
4
+ daemonRunning: boolean;
5
+ paused: boolean;
6
+ beadId?: string;
7
+ beadTitle?: string;
8
+ agent?: string;
9
+ round?: number;
10
+ }
11
+ export declare function getAgentLines(): Promise<AgentLine[]>;
12
+ export declare function formatAgentLines(lines: AgentLine[]): string;
13
+ export declare function runAgents(): Promise<void>;
14
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAmB1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAgB3D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAG/C"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAgentLines = getAgentLines;
4
+ exports.formatAgentLines = formatAgentLines;
5
+ exports.runAgents = runAgents;
6
+ const registry_1 = require("../kshetra/registry");
7
+ const status_1 = require("./status");
8
+ async function getAgentLines() {
9
+ const kshetras = (0, registry_1.loadRegistry)();
10
+ const lines = await Promise.all(kshetras.map(async (k) => {
11
+ const info = await (0, status_1.getKshetraStatus)(k);
12
+ return {
13
+ kshetraId: k.id,
14
+ kshetraName: k.name,
15
+ daemonRunning: info.daemonRunning,
16
+ paused: info.paused,
17
+ beadId: info.activeBead?.id,
18
+ beadTitle: info.activeBead?.title,
19
+ agent: info.activeBead?.agent,
20
+ round: info.activeBead?.round,
21
+ };
22
+ }));
23
+ return lines;
24
+ }
25
+ function formatAgentLines(lines) {
26
+ if (lines.length === 0)
27
+ return 'No kshetras registered.';
28
+ return lines
29
+ .map(l => {
30
+ const daemon = l.daemonRunning ? 'running' : 'stopped';
31
+ const prefix = `${l.kshetraName} (${l.kshetraId}) [${daemon}]`;
32
+ if (l.paused)
33
+ return `${prefix} paused`;
34
+ if (!l.beadId)
35
+ return `${prefix} idle`;
36
+ const parts = [`${l.beadId} · ${l.beadTitle}`];
37
+ if (l.agent)
38
+ parts.push(`[${l.agent}${l.round !== undefined ? `, Round ${l.round}` : ''}]`);
39
+ return `${prefix} ${parts.join(' ')}`;
40
+ })
41
+ .join('\n');
42
+ }
43
+ async function runAgents() {
44
+ const lines = await getAgentLines();
45
+ console.log(formatAgentLines(lines));
46
+ }
47
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/cli/agents.ts"],"names":[],"mappings":";;AAeA,sCAmBC;AAED,4CAgBC;AAED,8BAGC;AAzDD,kDAAmD;AACnD,qCAA4C;AAcrC,KAAK,UAAU,aAAa;IACjC,MAAM,QAAQ,GAAG,IAAA,uBAAY,GAAE,CAAC;IAEhC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAgB,EAAsB,EAAE;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAgB,EAAC,CAAC,CAAC,CAAC;QACvC,OAAO;YACL,SAAS,EAAE,CAAC,CAAC,EAAE;YACf,WAAW,EAAE,CAAC,CAAC,IAAI;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;YACjC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;YAC7B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;SAC9B,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAkB;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,yBAAyB,CAAC;IAEzD,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM,MAAM,GAAG,CAAC;QAE/D,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,GAAG,MAAM,UAAU,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,GAAG,MAAM,QAAQ,CAAC;QAExC,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5F,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,SAAS;IAC7B,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC"}