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,11 @@
1
+ import type { Provider } from '../agents/providers/types.js';
2
+ export declare const DEFAULT_PROVIDER_CLI_NAME: string;
3
+ export declare function promptProvider(): Promise<string>;
4
+ export declare function commandExists(bin: string, env?: NodeJS.ProcessEnv): boolean;
5
+ export interface PreflightResult {
6
+ ok: boolean;
7
+ bin: string;
8
+ message?: string;
9
+ }
10
+ export declare function checkProviderInstalled(provider: Provider, env?: NodeJS.ProcessEnv): PreflightResult;
11
+ //# sourceMappingURL=provider-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-preflight.d.ts","sourceRoot":"","sources":["../../src/cli/provider-preflight.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAK7D,eAAO,MAAM,yBAAyB,QAAsC,CAAC;AAK7E,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBtD;AAWD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAIxF;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IAEZ,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoBD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,eAAe,CAIjB"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PROVIDER_CLI_NAME = void 0;
4
+ exports.promptProvider = promptProvider;
5
+ exports.commandExists = commandExists;
6
+ exports.checkProviderInstalled = checkProviderInstalled;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const readline_1 = require("readline");
10
+ const registry_js_1 = require("../agents/providers/registry.js");
11
+ // The default provider when init is run without --provider and the operator just
12
+ // hits Enter at the prompt (§3.5).
13
+ exports.DEFAULT_PROVIDER_CLI_NAME = registry_js_1.PROVIDER_REGISTRY.anthropic.cliName;
14
+ // Interactively ask which provider to use. Returns the CLI-facing name (empty
15
+ // input => the Claude default). Kept separate from the resolver so it runs only
16
+ // when init has a real TTY — non-interactive callers pass --provider instead.
17
+ async function promptProvider() {
18
+ const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
19
+ try {
20
+ // Flag experimental providers with a trailing * so the operator sees the
21
+ // caveat before choosing (they still type the plain name).
22
+ const infos = Object.values(registry_js_1.PROVIDER_REGISTRY);
23
+ const names = infos.map(i => (i.experimental ? `${i.cliName}*` : i.cliName));
24
+ const legend = infos.some(i => i.experimental) ? '; * = experimental' : '';
25
+ const answer = await new Promise(res => rl.question(`Agent provider [${names.join('/')}] (default ${exports.DEFAULT_PROVIDER_CLI_NAME}${legend}): `, res));
26
+ const trimmed = answer.trim();
27
+ return trimmed || exports.DEFAULT_PROVIDER_CLI_NAME;
28
+ }
29
+ finally {
30
+ rl.close();
31
+ }
32
+ }
33
+ // Install preflight for the chosen agent provider (the project-init design §3.5). init
34
+ // must confirm the provider's CLI is actually on PATH (or pointed at by its
35
+ // SHRENI_*_BIN override) BEFORE writing anything — a missing CLI is a hard gate:
36
+ // we print how to install it and exit non-zero, leaving the repo untouched.
37
+ // True when `bin` is runnable: an absolute/relative path is checked directly,
38
+ // a bare command name is looked up across PATH (honouring the platform's
39
+ // delimiter). Kept side-effect-free (no spawning) so it stays deterministic and
40
+ // testable — resolveBin already normalised the SHRENI_*_BIN override into `bin`.
41
+ function commandExists(bin, env = process.env) {
42
+ if ((0, path_1.isAbsolute)(bin) || bin.includes('/'))
43
+ return (0, fs_1.existsSync)(bin);
44
+ const dirs = (env.PATH ?? '').split(path_1.delimiter).filter(Boolean);
45
+ return dirs.some(dir => (0, fs_1.existsSync)((0, path_1.join)(dir, bin)));
46
+ }
47
+ // Build the install guidance shown when a provider CLI is missing: the resolved
48
+ // bin we looked for, the install command, the docs URL, and the re-run hint.
49
+ function installMessage(provider, bin) {
50
+ const info = registry_js_1.PROVIDER_REGISTRY[provider];
51
+ return [
52
+ `The ${info.cliName} CLI is required but was not found (looked for "${bin}").`,
53
+ ``,
54
+ ` Install it: ${info.installCmd}`,
55
+ ` Docs: ${info.docsUrl}`,
56
+ ` Override: set ${info.binEnvVar}=/path/to/${info.defaultBin} if it is installed elsewhere`,
57
+ ``,
58
+ `Then re-run: shreni init-kshetra --provider ${info.cliName} ...`,
59
+ ].join('\n');
60
+ }
61
+ // Probe the chosen provider's CLI. Returns ok+bin when present; ok=false with an
62
+ // install message when missing. Callers (init) must abort without writing on a
63
+ // non-ok result.
64
+ function checkProviderInstalled(provider, env = process.env) {
65
+ const bin = (0, registry_js_1.providerBin)(provider);
66
+ if (commandExists(bin, env))
67
+ return { ok: true, bin };
68
+ return { ok: false, bin, message: installMessage(provider, bin) };
69
+ }
70
+ //# sourceMappingURL=provider-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-preflight.js","sourceRoot":"","sources":["../../src/cli/provider-preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface RegisterResult {
2
+ status: 'registered' | 're_registered';
3
+ id: string;
4
+ configPath: string;
5
+ }
6
+ export declare function resolveConfigPath(dir: string): string;
7
+ export declare function runRegister(kshetraPath: string): RegisterResult;
8
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/cli/register.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAe/D"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveConfigPath = resolveConfigPath;
4
+ exports.runRegister = runRegister;
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const config_js_1 = require("../kshetra/config.js");
8
+ const registry_js_1 = require("../kshetra/registry.js");
9
+ // Resolve the config for a Kshetra directory. The canonical location is
10
+ // `<dir>/.shreni/kshetra.yaml` (one source of truth, the project-init design §3.1); a
11
+ // root `<dir>/kshetra.yaml` is the legacy layout we still accept (and that
12
+ // `shreni migrate` moves). Prefer the canonical file when it exists.
13
+ function resolveConfigPath(dir) {
14
+ const canonical = (0, path_1.join)(dir, '.shreni', 'kshetra.yaml');
15
+ if ((0, fs_1.existsSync)(canonical))
16
+ return canonical;
17
+ return (0, path_1.join)(dir, 'kshetra.yaml');
18
+ }
19
+ function runRegister(kshetraPath) {
20
+ const resolvedPath = (0, path_1.resolve)(kshetraPath);
21
+ const configPath = resolveConfigPath(resolvedPath);
22
+ let config;
23
+ try {
24
+ config = (0, config_js_1.loadKshetraConfig)(configPath);
25
+ }
26
+ catch (err) {
27
+ if (err instanceof config_js_1.KshetraConfigError)
28
+ throw err;
29
+ throw new config_js_1.KshetraConfigError(configPath, err.message, err);
30
+ }
31
+ (0, registry_js_1.registerKshetra)(config.id, configPath);
32
+ return { status: 'registered', id: config.id, configPath };
33
+ }
34
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/cli/register.ts"],"names":[],"mappings":";;AAeA,8CAIC;AAED,kCAeC;AApCD,2BAAgC;AAChC,+BAAqC;AACrC,oDAA6E;AAC7E,wDAAyD;AAQzD,wEAAwE;AACxE,sFAAsF;AACtF,2EAA2E;AAC3E,qEAAqE;AACrE,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,IAAA,WAAI,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,WAAW,CAAC,WAAmB;IAC7C,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,6BAAiB,EAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,8BAAkB;YAAE,MAAM,GAAG,CAAC;QACjD,MAAM,IAAI,8BAAkB,CAAC,UAAU,EAAG,GAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,IAAA,6BAAe,EAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAEvC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function runManualCycle(kshetraId: string): Promise<void>;
2
+ export declare function runRun(kshetraId: string): Promise<void>;
3
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAUA,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrE;AAED,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7D"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runManualCycle = runManualCycle;
4
+ exports.runRun = runRun;
5
+ const registry_1 = require("../kshetra/registry");
6
+ const state_1 = require("../kshetra/state");
7
+ const index_1 = require("../sthapathi/index");
8
+ const pickup_1 = require("../sthapathi/pickup");
9
+ const dispatch_1 = require("../sthapathi/dispatch");
10
+ const errors_1 = require("../sthapathi/errors");
11
+ const branch_1 = require("../sthapathi/branch");
12
+ async function runManualCycle(kshetraId) {
13
+ const kshetra = (0, registry_1.loadRegistry)().find((k) => k.id === kshetraId);
14
+ if (!kshetra)
15
+ throw new Error(`Kshetra not found: ${kshetraId}`);
16
+ const scheduler = (0, index_1.createScheduler)();
17
+ const hooks = {
18
+ async selectNext(k) {
19
+ if ((0, state_1.isKshetraManuallyPaused)(k))
20
+ return null;
21
+ return (0, pickup_1.selectNext)(k);
22
+ },
23
+ prepareTask: pickup_1.prepareTask,
24
+ async runTask(task, k) {
25
+ try {
26
+ await (0, dispatch_1.runSilpiViharapalaLoop)(k, task, (0, branch_1.branchName)(task));
27
+ }
28
+ catch (err) {
29
+ await (0, errors_1.handleCycleError)(k, task, err);
30
+ }
31
+ },
32
+ };
33
+ await scheduler.runCycle(kshetra, hooks);
34
+ }
35
+ async function runRun(kshetraId) {
36
+ console.log(`Running immediate cycle for kshetra "${kshetraId}"...`);
37
+ await runManualCycle(kshetraId);
38
+ console.log('Cycle complete.');
39
+ }
40
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":";;AAUA,wCAsBC;AAED,wBAIC;AAtCD,kDAAmD;AACnD,4CAA2D;AAC3D,8CAA0E;AAC1E,gDAA8D;AAC9D,oDAA+D;AAC/D,gDAAuD;AACvD,gDAAiD;AAI1C,KAAK,UAAU,cAAc,CAAC,SAAiB;IACpD,MAAM,OAAO,GAAG,IAAA,uBAAY,GAAE,CAAC,IAAI,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC9E,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IAEjE,MAAM,SAAS,GAAG,IAAA,uBAAe,GAAE,CAAC;IAEpC,MAAM,KAAK,GAAmB;QAC5B,KAAK,CAAC,UAAU,CAAC,CAAgB;YAC/B,IAAI,IAAA,+BAAuB,EAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC5C,OAAO,IAAA,mBAAU,EAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QACD,WAAW,EAAX,oBAAW;QACX,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,CAAgB;YACxC,IAAI,CAAC;gBACH,MAAM,IAAA,iCAAsB,EAAC,CAAC,EAAE,IAAI,EAAE,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAA,yBAAgB,EAAC,CAAC,EAAE,IAAI,EAAE,GAAY,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;KACF,CAAC;IAEF,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAEM,KAAK,UAAU,MAAM,CAAC,SAAiB;IAC5C,OAAO,CAAC,GAAG,CAAC,wCAAwC,SAAS,MAAM,CAAC,CAAC;IACrE,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type StartResult = {
2
+ status: 'started';
3
+ kshetraId: string;
4
+ pid: number;
5
+ } | {
6
+ status: 'already_running';
7
+ kshetraId: string;
8
+ pid: number;
9
+ };
10
+ export declare function startWorker(kshetraId: string, workerScript?: string): StartResult;
11
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,MAAwC,GACrD,WAAW,CAqBb"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startWorker = startWorker;
4
+ const child_process_1 = require("child_process");
5
+ const path_1 = require("path");
6
+ const fs_1 = require("fs");
7
+ const pid_1 = require("./pid");
8
+ function startWorker(kshetraId, workerScript = (0, path_1.resolve)(__dirname, 'worker.js')) {
9
+ const existing = (0, pid_1.readPid)(kshetraId);
10
+ if (existing !== null && (0, pid_1.isAlive)(existing)) {
11
+ return { status: 'already_running', kshetraId, pid: existing };
12
+ }
13
+ (0, fs_1.mkdirSync)((0, pid_1.kshetraDir)(kshetraId), { recursive: true });
14
+ const logFd = (0, fs_1.openSync)((0, pid_1.workerLogPath)(kshetraId), 'a');
15
+ const child = (0, child_process_1.spawn)(process.execPath, [workerScript, kshetraId], {
16
+ detached: true,
17
+ stdio: ['ignore', logFd, logFd],
18
+ });
19
+ if (child.pid === undefined) {
20
+ throw new Error(`Failed to spawn worker process for "${kshetraId}"`);
21
+ }
22
+ (0, pid_1.writePid)(kshetraId, child.pid);
23
+ child.unref();
24
+ return { status: 'started', kshetraId, pid: child.pid };
25
+ }
26
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/cli/start.ts"],"names":[],"mappings":";;AASA,kCAwBC;AAjCD,iDAAsC;AACtC,+BAA+B;AAC/B,2BAAyC;AACzC,+BAA8E;AAM9E,SAAgB,WAAW,CACzB,SAAiB,EACjB,eAAuB,IAAA,cAAO,EAAC,SAAS,EAAE,WAAW,CAAC;IAEtD,MAAM,QAAQ,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAA,aAAO,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IACjE,CAAC;IAED,IAAA,cAAS,EAAC,IAAA,gBAAU,EAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAA,aAAQ,EAAC,IAAA,mBAAa,EAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE;QAC/D,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;KAChC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,GAAG,CAAC,CAAC;IACvE,CAAC;IAED,IAAA,cAAQ,EAAC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { KshetraConfig } from '../kshetra/config';
2
+ export interface ActiveBead {
3
+ id: string;
4
+ title: string;
5
+ agent?: string;
6
+ round?: number;
7
+ }
8
+ export interface KshetraStatusInfo {
9
+ kshetra: KshetraConfig;
10
+ daemonRunning: boolean;
11
+ pid?: number;
12
+ paused: boolean;
13
+ pauseReason?: string;
14
+ pauseMessage?: string;
15
+ requiresManualResume?: boolean;
16
+ activeBead?: ActiveBead;
17
+ queueDepth: number;
18
+ lastCompleted?: {
19
+ id: string;
20
+ title: string;
21
+ };
22
+ phase?: string;
23
+ lastProgressAt?: string;
24
+ stuck?: {
25
+ since: string;
26
+ reason: string;
27
+ remediation: string;
28
+ };
29
+ }
30
+ export declare function getKshetraStatus(kshetra: KshetraConfig): Promise<KshetraStatusInfo>;
31
+ export declare function formatAge(iso: string | undefined, now?: number): string;
32
+ export declare function resolveKshetra(kshetras: KshetraConfig[], cwd: string): KshetraConfig | null;
33
+ export declare function resumeHint(reason: string | undefined, kshetraId: string): string;
34
+ export declare function formatKshetraStatus(info: KshetraStatusInfo): string;
35
+ export declare function runStatus(opts: {
36
+ all: boolean;
37
+ cwd: string;
38
+ }): Promise<void>;
39
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAmCD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoDzF;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAUnF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAW3F;AAQD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAgDnE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BlF"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getKshetraStatus = getKshetraStatus;
4
+ exports.formatAge = formatAge;
5
+ exports.resolveKshetra = resolveKshetra;
6
+ exports.resumeHint = resumeHint;
7
+ exports.formatKshetraStatus = formatKshetraStatus;
8
+ exports.runStatus = runStatus;
9
+ const zod_1 = require("zod");
10
+ const registry_1 = require("../kshetra/registry");
11
+ const state_1 = require("../kshetra/state");
12
+ const beads_1 = require("../sthapathi/beads");
13
+ const pid_1 = require("./pid");
14
+ const BeadsItemSchema = zod_1.z.object({
15
+ id: zod_1.z.string(),
16
+ title: zod_1.z.string(),
17
+ status: zod_1.z.string().optional(),
18
+ notes: zod_1.z.string().optional(),
19
+ });
20
+ function parseJsonArray(raw) {
21
+ try {
22
+ const parsed = JSON.parse(raw);
23
+ return Array.isArray(parsed) ? parsed : [];
24
+ }
25
+ catch {
26
+ return [];
27
+ }
28
+ }
29
+ function parseAgentRound(notes) {
30
+ if (!notes)
31
+ return {};
32
+ const lines = notes.split('\n').map(l => l.trim()).filter(Boolean);
33
+ for (let i = lines.length - 1; i >= 0; i--) {
34
+ const line = lines[i] ?? '';
35
+ const dispatch = line.match(/Round\s+(\d+):\s+dispatching\s+(\w+)/i);
36
+ if (dispatch) {
37
+ return { round: parseInt(dispatch[1], 10), agent: dispatch[2] };
38
+ }
39
+ const roundOnly = line.match(/Round\s+(\d+):/i);
40
+ if (roundOnly) {
41
+ return { round: parseInt(roundOnly[1], 10) };
42
+ }
43
+ }
44
+ return {};
45
+ }
46
+ async function getKshetraStatus(kshetra) {
47
+ const pid = (0, pid_1.readPid)(kshetra.id);
48
+ const daemonRunning = pid !== null && (0, pid_1.isAlive)(pid);
49
+ const state = (0, state_1.loadState)();
50
+ const ks = state.kshetras[kshetra.id];
51
+ const paused = ks?.paused ?? false;
52
+ const bdClient = (0, beads_1.bd)(kshetra);
53
+ const [inProgressRaw, readyRaw, closedRaw] = await Promise.all([
54
+ bdClient.list({ status: 'in_progress' }).catch(() => '[]'),
55
+ bdClient.ready().catch(() => '[]'),
56
+ bdClient.list({ status: 'closed' }).catch(() => '[]'),
57
+ ]);
58
+ let activeBead;
59
+ const inProgress = parseJsonArray(inProgressRaw);
60
+ if (inProgress.length > 0) {
61
+ const parsed = BeadsItemSchema.safeParse(inProgress[0]);
62
+ if (parsed.success) {
63
+ const { agent, round } = parseAgentRound(parsed.data.notes);
64
+ activeBead = { id: parsed.data.id, title: parsed.data.title, agent, round };
65
+ }
66
+ }
67
+ const queueDepth = parseJsonArray(readyRaw).length;
68
+ let lastCompleted;
69
+ const closed = parseJsonArray(closedRaw);
70
+ if (closed.length > 0) {
71
+ const parsed = BeadsItemSchema.safeParse(closed[closed.length - 1]);
72
+ if (parsed.success) {
73
+ lastCompleted = { id: parsed.data.id, title: parsed.data.title };
74
+ }
75
+ }
76
+ return {
77
+ kshetra,
78
+ daemonRunning,
79
+ pid: daemonRunning ? pid : undefined,
80
+ paused,
81
+ pauseReason: ks?.reason,
82
+ pauseMessage: ks?.message,
83
+ requiresManualResume: ks?.requiresManualResume,
84
+ activeBead,
85
+ queueDepth,
86
+ lastCompleted,
87
+ phase: ks?.phase,
88
+ lastProgressAt: ks?.lastProgressAt,
89
+ stuck: ks?.stuck,
90
+ };
91
+ }
92
+ // "2026-06-30T03:00:00Z" → "12m ago" / "2h ago". Empty when unknown.
93
+ function formatAge(iso, now = Date.now()) {
94
+ if (!iso)
95
+ return '';
96
+ const ms = now - new Date(iso).getTime();
97
+ if (!Number.isFinite(ms) || ms < 0)
98
+ return '';
99
+ const mins = Math.floor(ms / 60_000);
100
+ if (mins < 1)
101
+ return 'just now';
102
+ if (mins < 60)
103
+ return `${mins}m ago`;
104
+ const hours = Math.floor(mins / 60);
105
+ if (hours < 24)
106
+ return `${hours}h ago`;
107
+ return `${Math.floor(hours / 24)}d ago`;
108
+ }
109
+ function resolveKshetra(kshetras, cwd) {
110
+ let best = null;
111
+ let bestLen = -1;
112
+ for (const k of kshetras) {
113
+ const prefix = k.repo.path.replace(/\/?$/, '/');
114
+ if ((cwd + '/').startsWith(prefix) && prefix.length > bestLen) {
115
+ best = k;
116
+ bestLen = prefix.length;
117
+ }
118
+ }
119
+ return best;
120
+ }
121
+ // The resume hint depends on WHY it paused. A reason:'stuck' pause means a live
122
+ // worker is hung on an agent; `shreni resume` now triggers an in-process
123
+ // self-heal — the worker aborts the hung agent, RECOVERs, and re-arms
124
+ // — so plain resume recovers it. If no worker is running the
125
+ // resume command itself redirects to `shreni start`. All other pause reasons
126
+ // (api_down/git_failed/bd_failed/manual) also clear with plain resume.
127
+ function resumeHint(reason, kshetraId) {
128
+ if (reason === 'stuck') {
129
+ return `Requires manual resume: shreni resume --kshetra ${kshetraId} (worker self-heals the hung agent)`;
130
+ }
131
+ return 'Requires manual resume: shreni resume';
132
+ }
133
+ function formatKshetraStatus(info) {
134
+ const lines = [];
135
+ const daemonLabel = info.daemonRunning ? `running (pid ${info.pid})` : 'stopped';
136
+ lines.push(`Kshetra: ${info.kshetra.name} (${info.kshetra.id}) — worker ${daemonLabel}`);
137
+ lines.push('─'.repeat(50));
138
+ if (info.paused) {
139
+ const reason = info.pauseReason ? ` (${info.pauseReason})` : '';
140
+ lines.push(`Status: paused${reason}`);
141
+ if (info.pauseMessage)
142
+ lines.push(` ${info.pauseMessage}`);
143
+ if (info.requiresManualResume)
144
+ lines.push(` ${resumeHint(info.pauseReason, info.kshetra.id)}`);
145
+ }
146
+ else {
147
+ const phase = info.phase ? ` · phase ${info.phase}` : '';
148
+ lines.push(`Status: active${phase}`);
149
+ }
150
+ // Stuck banner — the watchdog's diagnosis + remediation, surfaced prominently.
151
+ if (info.stuck) {
152
+ lines.push('');
153
+ lines.push(`⚠️ STUCK (since ${formatAge(info.stuck.since)}): ${info.stuck.reason}`);
154
+ lines.push(' Try:');
155
+ for (const step of info.stuck.remediation.split('\n'))
156
+ lines.push(` ${step}`);
157
+ }
158
+ lines.push('');
159
+ if (info.activeBead) {
160
+ const { id, title, agent, round } = info.activeBead;
161
+ lines.push(`Active bead: ${id} · ${title}`);
162
+ const details = [];
163
+ if (agent)
164
+ details.push(`Agent: ${agent}`);
165
+ if (round !== undefined)
166
+ details.push(`Round: ${round}`);
167
+ if (details.length > 0)
168
+ lines.push(` ${details.join(' ')}`);
169
+ }
170
+ else {
171
+ lines.push('Active bead: none');
172
+ }
173
+ lines.push('');
174
+ lines.push(`Queue depth: ${info.queueDepth}`);
175
+ if (info.lastCompleted) {
176
+ lines.push(`Last completed: ${info.lastCompleted.id} · ${info.lastCompleted.title}`);
177
+ }
178
+ const progressAge = formatAge(info.lastProgressAt);
179
+ if (progressAge)
180
+ lines.push(`Last progress: ${progressAge}`);
181
+ return lines.join('\n');
182
+ }
183
+ async function runStatus(opts) {
184
+ const kshetras = (0, registry_1.loadRegistry)();
185
+ if (kshetras.length === 0) {
186
+ console.log('No kshetras registered. Run `shreni register` first.');
187
+ return;
188
+ }
189
+ if (opts.all) {
190
+ for (const k of kshetras) {
191
+ const info = await getKshetraStatus(k);
192
+ console.log(formatKshetraStatus(info));
193
+ console.log();
194
+ }
195
+ return;
196
+ }
197
+ const kshetra = resolveKshetra(kshetras, opts.cwd);
198
+ if (!kshetra) {
199
+ console.error(`No kshetra found for cwd: ${opts.cwd}`);
200
+ console.error('Hint: run `shreni status --all` to see all kshetras');
201
+ process.exit(1);
202
+ return;
203
+ }
204
+ const info = await getKshetraStatus(kshetra);
205
+ console.log(formatKshetraStatus(info));
206
+ }
207
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export type StopResult = {
2
+ status: 'stopped';
3
+ kshetraId: string;
4
+ pid: number;
5
+ } | {
6
+ status: 'not_running';
7
+ kshetraId: string;
8
+ } | {
9
+ status: 'stale_pid_cleared';
10
+ kshetraId: string;
11
+ };
12
+ export declare function stopWorker(kshetraId: string): StopResult;
13
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/cli/stop.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAClB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAexD"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stopWorker = stopWorker;
4
+ const pid_1 = require("./pid");
5
+ function stopWorker(kshetraId) {
6
+ const pid = (0, pid_1.readPid)(kshetraId);
7
+ if (pid === null) {
8
+ return { status: 'not_running', kshetraId };
9
+ }
10
+ if (!(0, pid_1.isAlive)(pid)) {
11
+ (0, pid_1.clearPid)(kshetraId);
12
+ return { status: 'stale_pid_cleared', kshetraId };
13
+ }
14
+ process.kill(pid, 'SIGTERM');
15
+ (0, pid_1.clearPid)(kshetraId);
16
+ return { status: 'stopped', kshetraId, pid };
17
+ }
18
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/cli/stop.ts"],"names":[],"mappings":";;AAOA,gCAeC;AAtBD,+BAAmD;AAOnD,SAAgB,UAAU,CAAC,SAAiB;IAC1C,MAAM,GAAG,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,CAAC;IAE/B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,IAAA,aAAO,EAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAA,cAAQ,EAAC,SAAS,CAAC,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7B,IAAA,cAAQ,EAAC,SAAS,CAAC,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface SyncOpts {
2
+ kshetraId?: string;
3
+ all: boolean;
4
+ }
5
+ export declare function runSync(opts: SyncOpts): Promise<void>;
6
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3D"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runSync = runSync;
4
+ const registry_1 = require("../kshetra/registry");
5
+ const beads_1 = require("../sthapathi/beads");
6
+ async function runSync(opts) {
7
+ const kshetras = (0, registry_1.loadRegistry)();
8
+ if (kshetras.length === 0) {
9
+ console.log('No kshetras registered.');
10
+ return;
11
+ }
12
+ const targets = opts.all
13
+ ? kshetras
14
+ : kshetras.filter((k) => k.id === opts.kshetraId);
15
+ if (targets.length === 0) {
16
+ if (!opts.kshetraId) {
17
+ console.error('Usage: shreni sync --kshetra <id> | --all');
18
+ }
19
+ else {
20
+ console.error(`Kshetra not found: ${opts.kshetraId}`);
21
+ }
22
+ process.exit(1);
23
+ return;
24
+ }
25
+ for (const k of targets) {
26
+ console.log(`Syncing "${k.name}" (${k.id})...`);
27
+ await (0, beads_1.syncBeads)(k);
28
+ console.log(` Done.`);
29
+ }
30
+ }
31
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":";;AASA,0BA2BC;AApCD,kDAAmD;AACnD,8CAA+C;AAQxC,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,QAAQ,GAAG,IAAA,uBAAY,GAAE,CAAC;IAEhC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAoB,IAAI,CAAC,GAAG;QACvC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;IAEnE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,IAAA,iBAAS,EAAC,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface TailOpts {
2
+ kshetraId?: string;
3
+ all: boolean;
4
+ }
5
+ export declare function runTail(opts: TailOpts): void;
6
+ //# sourceMappingURL=tail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/cli/tail.ts"],"names":[],"mappings":"AA0HA,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;CACd;AAqBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAgD5C"}