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,531 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SHRENI_SECTION = exports.ARCH_FILE = exports.STYLE_GUIDE_FILE = exports.SHRENI_DIR = void 0;
37
+ exports.resolveAgents = resolveAgents;
38
+ exports.createGitHubRepo = createGitHubRepo;
39
+ exports.cloneBeadsRepo = cloneBeadsRepo;
40
+ exports.initBeadsDb = initBeadsDb;
41
+ exports.createBeadsSymlink = createBeadsSymlink;
42
+ exports.addToGitignore = addToGitignore;
43
+ exports.setupClaudeHooks = setupClaudeHooks;
44
+ exports.smokeCheckToolchain = smokeCheckToolchain;
45
+ exports.generateKshetraYaml = generateKshetraYaml;
46
+ exports.writeKshetraConfig = writeKshetraConfig;
47
+ exports.scaffoldConventions = scaffoldConventions;
48
+ exports.appendShreniIntegration = appendShreniIntegration;
49
+ exports.createRagIndexStub = createRagIndexStub;
50
+ exports.registerWithSthapathi = registerWithSthapathi;
51
+ exports.initKshetra = initKshetra;
52
+ const child_process_1 = require("child_process");
53
+ const util_1 = require("util");
54
+ const fs_1 = require("fs");
55
+ const path_1 = require("path");
56
+ const os_1 = require("os");
57
+ const yaml = __importStar(require("js-yaml"));
58
+ const registry_1 = require("../kshetra/registry");
59
+ const detect_toolchain_1 = require("./detect-toolchain");
60
+ const registry_2 = require("../agents/providers/registry");
61
+ const provider_preflight_1 = require("./provider-preflight");
62
+ const telemetry_1 = require("../telemetry/telemetry");
63
+ const execAsync = (0, util_1.promisify)(child_process_1.execFile);
64
+ // Canonical config directory (relative to the repo root). Config, conventions
65
+ // stubs, and the RAG index all live under here so a Kshetra carries one
66
+ // self-contained Shreni footprint. Mirrors the migrate target (migrate.ts).
67
+ exports.SHRENI_DIR = '.shreni';
68
+ exports.STYLE_GUIDE_FILE = (0, path_1.join)(exports.SHRENI_DIR, 'style-guide.md');
69
+ exports.ARCH_FILE = (0, path_1.join)(exports.SHRENI_DIR, 'arch.md');
70
+ // Resolve the selected provider + model from init opts (§3.5). Validates the
71
+ // provider name (invalid => throws with the valid set), then picks the model:
72
+ // an explicit --model wins; otherwise the registry default; a provider with no
73
+ // default (codex/gemini, OQ1) and no --model is a hard error. Pure — no writes,
74
+ // no preflight — so the orchestrator can resolve before touching the filesystem.
75
+ function resolveAgents(opts) {
76
+ const provider = (0, registry_2.providerFromCliName)(opts.provider ?? registry_2.PROVIDER_REGISTRY.anthropic.cliName);
77
+ const fallback = (0, registry_2.providerDefaultModel)(provider);
78
+ const model = opts.model ?? fallback;
79
+ if (!model) {
80
+ const info = registry_2.PROVIDER_REGISTRY[provider];
81
+ throw new Error(`Provider "${info.cliName}" has no default model — pass --model <id> (its model ids change often, so none is baked in).`);
82
+ }
83
+ return { provider, model };
84
+ }
85
+ // ── Helpers ───────────────────────────────────────────────────────────────────
86
+ function toName(slug) {
87
+ return slug
88
+ .split('-')
89
+ .map(w => w.charAt(0).toUpperCase() + w.slice(1))
90
+ .join(' ');
91
+ }
92
+ async function exec(cmd, args, opts = {}) {
93
+ const { stdout } = await execAsync(cmd, args, {
94
+ cwd: opts.cwd,
95
+ env: opts.env ?? process.env,
96
+ maxBuffer: 4 * 1024 * 1024,
97
+ });
98
+ return stdout.trim();
99
+ }
100
+ // ── Step 1: Create GitHub beads repo ─────────────────────────────────────────
101
+ async function createGitHubRepo(org, slug) {
102
+ const repoName = `${slug}-beads`;
103
+ const remote = `git@github.com:${org}/${repoName}.git`;
104
+ try {
105
+ await exec('gh', ['repo', 'view', `${org}/${repoName}`], {});
106
+ return remote; // already exists
107
+ }
108
+ catch {
109
+ await exec('gh', ['repo', 'create', `${org}/${repoName}`, '--private', '--confirm'], {});
110
+ return remote;
111
+ }
112
+ }
113
+ // ── Step 2: Clone beads repo ──────────────────────────────────────────────────
114
+ async function cloneBeadsRepo(remoteUrl, localPath) {
115
+ if ((0, fs_1.existsSync)(localPath))
116
+ return;
117
+ await exec('git', ['clone', remoteUrl, localPath]);
118
+ }
119
+ // ── Step 3: bd init --stealth ─────────────────────────────────────────────────
120
+ async function initBeadsDb(beadsPath) {
121
+ if ((0, fs_1.existsSync)((0, path_1.join)(beadsPath, '.dolt')) || (0, fs_1.existsSync)((0, path_1.join)(beadsPath, 'embeddeddolt')))
122
+ return;
123
+ await exec('bd', ['init', '--stealth'], {
124
+ cwd: beadsPath,
125
+ env: { ...process.env, BEADS_DIR: beadsPath },
126
+ });
127
+ }
128
+ // ── Step 4: Create .beads symlink ─────────────────────────────────────────────
129
+ function createBeadsSymlink(repoPath, beadsPath) {
130
+ const symlinkPath = (0, path_1.join)(repoPath, '.beads');
131
+ const target = (0, path_1.resolve)(beadsPath);
132
+ try {
133
+ const current = (0, fs_1.readlinkSync)(symlinkPath);
134
+ if ((0, path_1.resolve)(current) === target)
135
+ return;
136
+ throw new Error(`.beads symlink exists but points to "${current}" instead of "${target}"`);
137
+ }
138
+ catch (err) {
139
+ const code = err.code;
140
+ if (code === 'EINVAL') {
141
+ throw new Error(`.beads already exists as a directory at "${symlinkPath}". ` +
142
+ `Remove it first: rm -rf "${symlinkPath}"`);
143
+ }
144
+ if (code !== 'ENOENT')
145
+ throw err;
146
+ (0, fs_1.symlinkSync)(target, symlinkPath);
147
+ }
148
+ }
149
+ // ── Step 5: Update .gitignore ─────────────────────────────────────────────────
150
+ // Entries init keeps out of the repo. `.beads` is a machine-local symlink;
151
+ // `.shreni/kshetra.yaml` holds ABSOLUTE machine-specific repo/beads paths so it
152
+ // must not be committed — but it is ignored by exact path, NOT as `.shreni/`, so
153
+ // the tracked conventions docs (.shreni/style-guide.md, .shreni/arch.md) stay
154
+ // committable.
155
+ const GITIGNORE_MARKERS = ['.beads', `${exports.SHRENI_DIR}/kshetra.yaml`];
156
+ function addToGitignore(repoPath) {
157
+ const gitignorePath = (0, path_1.join)(repoPath, '.gitignore');
158
+ const existing = (0, fs_1.existsSync)(gitignorePath) ? (0, fs_1.readFileSync)(gitignorePath, 'utf8') : '';
159
+ const present = new Set(existing.split('\n').map(l => l.trim()));
160
+ const missing = GITIGNORE_MARKERS.filter(m => !present.has(m));
161
+ if (missing.length === 0)
162
+ return;
163
+ const block = missing.join('\n');
164
+ if (existing) {
165
+ const sep = existing.endsWith('\n') ? '' : '\n';
166
+ (0, fs_1.appendFileSync)(gitignorePath, `${sep}${block}\n`, 'utf8');
167
+ }
168
+ else {
169
+ (0, fs_1.writeFileSync)(gitignorePath, `${block}\n`, 'utf8');
170
+ }
171
+ }
172
+ // ── Step 6: bd setup claude ───────────────────────────────────────────────────
173
+ async function setupClaudeHooks(repoPath, beadsPath) {
174
+ await exec('bd', ['setup', 'claude'], {
175
+ cwd: repoPath,
176
+ env: { ...process.env, BEADS_DIR: beadsPath },
177
+ });
178
+ }
179
+ // ── Step 7: Generate kshetra.yaml ─────────────────────────────────────────────
180
+ // Build the stack YAML block from a detected profile: always the language, plus
181
+ // any populated toolchain fields (packageManager + the build/test/lint commands
182
+ // detection resolved). Undefined fields are omitted so non-node configs stay
183
+ // minimal; empty-string commands (explicit skips) are kept.
184
+ function stackBlock(stack) {
185
+ const block = { language: stack.language };
186
+ if (stack.packageManager)
187
+ block['packageManager'] = stack.packageManager;
188
+ if (stack.buildCommand !== undefined)
189
+ block['buildCommand'] = stack.buildCommand;
190
+ if (stack.testRunner !== undefined)
191
+ block['testRunner'] = stack.testRunner;
192
+ if (stack.lintCommand !== undefined)
193
+ block['lintCommand'] = stack.lintCommand;
194
+ return block;
195
+ }
196
+ // Smoke-check that the tools behind the resolved build/test gates are actually
197
+ // on PATH (§3.6.5). WARN-ONLY (OQ5) — unlike the provider preflight (a hard
198
+ // gate), a missing build/test tool is surfaced as a non-fatal warning so init
199
+ // still completes; the operator fixes stack.* or installs the tool later. Only
200
+ // the leading binary of each command is probed; an empty command ('' = an
201
+ // explicitly skipped gate) or an undefined one is left alone.
202
+ function smokeCheckToolchain(stack) {
203
+ const warnings = [];
204
+ const gates = [
205
+ ['buildCommand', stack.buildCommand],
206
+ ['testRunner', stack.testRunner],
207
+ ];
208
+ for (const [field, cmd] of gates) {
209
+ const bin = cmd?.trim().split(/\s+/)[0];
210
+ if (!bin)
211
+ continue;
212
+ if (!(0, provider_preflight_1.commandExists)(bin)) {
213
+ warnings.push(`stack.${field} runs "${bin}", which was not found on PATH — install it or ` +
214
+ `fix the command in ${exports.SHRENI_DIR}/kshetra.yaml (this is a warning, not a failure).`);
215
+ }
216
+ }
217
+ return warnings;
218
+ }
219
+ function generateKshetraYaml(opts) {
220
+ const stack = opts.stack ?? { language: opts.language ?? 'typescript', unknown: false };
221
+ const conventions = {};
222
+ if (opts.conventions?.styleGuide)
223
+ conventions['styleGuide'] = opts.conventions.styleGuide;
224
+ if (opts.conventions?.architecture)
225
+ conventions['architecture'] = opts.conventions.architecture;
226
+ const config = {
227
+ id: opts.slug,
228
+ name: toName(opts.slug),
229
+ repo: {
230
+ path: opts.repoPath,
231
+ remote: opts.repoRemote,
232
+ mainBranch: 'main',
233
+ branchPattern: 'bead-{id}/{slug}',
234
+ // Only emit mergePolicy when 'pr' — 'push' is the default, so a plain
235
+ // config stays clean and back-compatible.
236
+ ...(opts.mergePolicy === 'pr' ? { mergePolicy: 'pr' } : {}),
237
+ },
238
+ beads: {
239
+ path: opts.beadsPath,
240
+ remote: opts.beadsRemote,
241
+ mode: 'embedded',
242
+ },
243
+ stack: stackBlock(stack),
244
+ ...(Object.keys(conventions).length ? { conventions } : {}),
245
+ agents: {
246
+ provider: opts.agents?.provider ?? 'anthropic',
247
+ model: opts.agents?.model ?? 'claude-sonnet-4-6',
248
+ maxRoundsPerBead: 3,
249
+ },
250
+ priority: { p0AutoAssign: true, maxConcurrentBeads: 1 },
251
+ };
252
+ let out = yaml.dump(config, { lineWidth: -1 });
253
+ // Unknown ecosystem: flag the empty commands inline so the operator knows to
254
+ // fill them in (they were written as '' = explicitly-skipped gates).
255
+ if (stack.unknown) {
256
+ out = out.replace(/^(\s*language: unknown)$/m, '$1 # TODO: unknown ecosystem — set buildCommand/testRunner/lintCommand for your stack');
257
+ }
258
+ return out;
259
+ }
260
+ // Write the config to the canonical <repo>/.shreni/kshetra.yaml (not the repo
261
+ // root — migrate.ts moves any legacy root file here). The loader uses
262
+ // repo.path/beads.path verbatim, so the caller must pass a YAML with absolute
263
+ // paths already baked in (the orchestrator resolves them before generating).
264
+ function writeKshetraConfig(repoPath, content) {
265
+ const shreniDir = (0, path_1.join)(repoPath, exports.SHRENI_DIR);
266
+ (0, fs_1.mkdirSync)(shreniDir, { recursive: true });
267
+ const configPath = (0, path_1.join)(shreniDir, 'kshetra.yaml');
268
+ (0, fs_1.writeFileSync)(configPath, content, 'utf8');
269
+ return configPath;
270
+ }
271
+ // Scaffold the conventions docs Silpi/Viharapala consult, under .shreni/. Both
272
+ // are idempotent — an existing file is left untouched so a re-init never clobbers
273
+ // operator edits. Returns the repo-relative pointers to wire into conventions.*.
274
+ const STYLE_GUIDE_STUB = `# Style Guide
275
+
276
+ Coding conventions for this project. Shreni's agents read this file when
277
+ implementing and reviewing beads. Replace this stub with your real conventions
278
+ — naming, formatting, error handling, testing expectations, anything a
279
+ contributor should follow.
280
+ `;
281
+ const ARCH_STUB = `# Architecture
282
+
283
+ High-level architecture notes for this project. Shreni's agents read this file
284
+ for orientation before touching unfamiliar areas. Replace this stub with your
285
+ real notes — module boundaries, data flow, key invariants, where things live.
286
+ `;
287
+ function scaffoldConventions(repoPath) {
288
+ (0, fs_1.mkdirSync)((0, path_1.join)(repoPath, exports.SHRENI_DIR), { recursive: true });
289
+ const styleGuidePath = (0, path_1.join)(repoPath, exports.STYLE_GUIDE_FILE);
290
+ if (!(0, fs_1.existsSync)(styleGuidePath))
291
+ (0, fs_1.writeFileSync)(styleGuidePath, STYLE_GUIDE_STUB, 'utf8');
292
+ const archPath = (0, path_1.join)(repoPath, exports.ARCH_FILE);
293
+ if (!(0, fs_1.existsSync)(archPath))
294
+ (0, fs_1.writeFileSync)(archPath, ARCH_STUB, 'utf8');
295
+ return { styleGuide: exports.STYLE_GUIDE_FILE, architecture: exports.ARCH_FILE };
296
+ }
297
+ // ── Step 8: Append SHRENI INTEGRATION to CLAUDE.md ───────────────────────────
298
+ exports.SHRENI_SECTION = `
299
+ ## SHRENI INTEGRATION
300
+
301
+ This project is managed by Shreni. The Sthapathi daemon picks up beads issues and
302
+ implements them via autonomous agents (Silpi, Viharapala, Parikshaka).
303
+
304
+ **If your system prompt assigns you a Silpi/Viharapala/Parikshaka role for a
305
+ specific bead, this section does NOT apply to you** — do your assigned job
306
+ (implement / review / analyze) with your tools. The rules below govern
307
+ interactive human sessions only.
308
+
309
+ **Interactive sessions: task producer only.**
310
+ Create beads issues for the daemon to implement — do NOT implement tasks yourself.
311
+
312
+ Prohibited in interactive sessions:
313
+ bd update --claim Sthapathi claims tasks, not interactive agents
314
+ bd close Sthapathi closes tasks on completion
315
+ git checkout -b / git branch Sthapathi owns all bead-* branches
316
+
317
+ Useful commands:
318
+ shreni status --all Show all kshetra states
319
+ shreni agents Show live agent activity
320
+ shreni logs --kshetra <id> Round-by-round agent logs
321
+ shreni pause --kshetra <id> Pause task pickup
322
+ shreni resume --kshetra <id> Resume task pickup
323
+
324
+ ### Toolchain config sync
325
+
326
+ Shreni runs build/test/lint from the pointers in \`.shreni/kshetra.yaml\` (stack.*),
327
+ not by re-discovering your toolchain. Whenever you add or change a toolchain
328
+ config file — a new test runner (vitest/jest/pytest), linter (eslint), tsconfig,
329
+ a new package.json/Makefile script, or you switch package managers — update the
330
+ matching pointer in \`.shreni/kshetra.yaml\` in the same change:
331
+
332
+ stack.buildCommand the build/compile gate (e.g. \`pnpm build\`)
333
+ stack.testRunner the test command (e.g. \`pnpm test\`)
334
+ stack.lintCommand the lint gate (e.g. \`pnpm lint\`); omit to skip lint
335
+
336
+ Prefer pointing at a project script (\`pnpm test\`) over duplicating globs. The
337
+ escape hatches stack.testFileGlobs / stack.failCountPattern are for non-standard
338
+ setups only — set them only when the harness must find tests WITHOUT running the
339
+ runner. A stale pointer means Shreni runs the wrong gate.
340
+ `;
341
+ function appendShreniIntegration(repoPath) {
342
+ const claudePath = (0, path_1.join)(repoPath, 'CLAUDE.md');
343
+ if ((0, fs_1.existsSync)(claudePath)) {
344
+ const content = (0, fs_1.readFileSync)(claudePath, 'utf8');
345
+ if (content.includes('SHRENI INTEGRATION'))
346
+ return;
347
+ }
348
+ (0, fs_1.appendFileSync)(claudePath, exports.SHRENI_SECTION, 'utf8');
349
+ }
350
+ // ── Step 9: RAG index stub ────────────────────────────────────────────────────
351
+ function createRagIndexStub(slug) {
352
+ const ragDir = (0, path_1.resolve)((0, os_1.homedir)(), '.shreni', 'rag', slug);
353
+ (0, fs_1.mkdirSync)(ragDir, { recursive: true });
354
+ const indexPath = (0, path_1.join)(ragDir, 'index.json');
355
+ if (!(0, fs_1.existsSync)(indexPath)) {
356
+ (0, fs_1.writeFileSync)(indexPath, JSON.stringify({ chunks: [], version: 1 }, null, 2), 'utf8');
357
+ }
358
+ }
359
+ // ── Step 10: Register ─────────────────────────────────────────────────────────
360
+ function registerWithSthapathi(slug, configPath) {
361
+ (0, registry_1.registerKshetra)(slug, configPath);
362
+ }
363
+ // Reconstruct the exact command to re-run init, so a failure message can tell the
364
+ // operator precisely how to resume (completed phases will no-op).
365
+ function buildReRunCommand(opts) {
366
+ const parts = ['shreni init-kshetra', `--slug ${opts.slug}`, `--path ${opts.path}`];
367
+ if (opts.org)
368
+ parts.push(`--org ${opts.org}`);
369
+ if (opts.provider)
370
+ parts.push(`--provider ${opts.provider}`);
371
+ if (opts.model)
372
+ parts.push(`--model ${opts.model}`);
373
+ if (opts.language)
374
+ parts.push(`--language ${opts.language}`);
375
+ if (opts.beadsPath)
376
+ parts.push(`--beads-path ${opts.beadsPath}`);
377
+ if (opts.mergePolicy)
378
+ parts.push(`--merge-policy ${opts.mergePolicy}`);
379
+ return parts.join(' ');
380
+ }
381
+ // Run the mutating phases in order, printing a running/done/failed line each. On
382
+ // the first failure, print WHAT failed + HOW to recover + the exact re-run
383
+ // command, then re-throw so the CLI exits non-zero. Later phases do not run.
384
+ async function runInitPhases(phases, reRunCmd) {
385
+ for (const phase of phases) {
386
+ console.log(`▶ ${phase.name} …`);
387
+ try {
388
+ await phase.run();
389
+ console.log(` ✓ ${phase.name}`);
390
+ }
391
+ catch (err) {
392
+ const e = err;
393
+ console.error(` ✗ ${phase.name} failed: ${e.message}`);
394
+ console.error(`\n To recover: ${phase.recovery}`);
395
+ console.error(` Then re-run (completed phases are skipped):\n ${reRunCmd}`);
396
+ throw err;
397
+ }
398
+ }
399
+ }
400
+ async function initKshetra(opts) {
401
+ const org = opts.org ?? 'TeakWood';
402
+ const repoPath = (0, path_1.resolve)(opts.path);
403
+ const beadsPath = opts.beadsPath
404
+ ? (0, path_1.resolve)(opts.beadsPath)
405
+ : (0, path_1.resolve)((0, path_1.join)((0, path_1.dirname)(repoPath), `${(0, path_1.basename)(repoPath)}-beads`));
406
+ const reRunCmd = buildReRunCommand(opts);
407
+ // ── Preflight (§3.5) — provider selection + install hard gate + detection ────
408
+ // This runs BEFORE any network call or filesystem write and is the whole of
409
+ // --dry-run. When --provider is omitted and init has a real TTY, ask
410
+ // interactively (default Claude); otherwise take the flag (or fall through to
411
+ // the Claude default). An invalid provider throws with the valid set; a missing
412
+ // provider CLI is a hard gate that leaves the repo untouched.
413
+ const providerName = opts.provider ?? (process.stdin.isTTY ? await (0, provider_preflight_1.promptProvider)() : undefined);
414
+ const agents = resolveAgents({ provider: providerName, model: opts.model });
415
+ const preflight = (0, provider_preflight_1.checkProviderInstalled)(agents.provider);
416
+ if (!preflight.ok) {
417
+ throw new Error(preflight.message);
418
+ }
419
+ const providerLabel = `${registry_2.PROVIDER_REGISTRY[agents.provider].cliName} (${agents.model})`;
420
+ console.log(`Provider: ${providerLabel} — CLI found at "${preflight.bin}".`);
421
+ if ((0, registry_2.providerIsExperimental)(agents.provider)) {
422
+ console.warn(` ⚠ ${registry_2.PROVIDER_REGISTRY[agents.provider].cliName} is EXPERIMENTAL — its adapter is draft and ` +
423
+ `not verified end-to-end. Claude is the supported provider; expect rough edges on this one.`);
424
+ }
425
+ // Detect the ecosystem from marker files (pure read); an explicit --language
426
+ // overrides the detected language but keeps any detected packageManager/commands.
427
+ const detected = (0, detect_toolchain_1.detectToolchain)(repoPath);
428
+ const stack = opts.language ? { ...detected, language: opts.language } : detected;
429
+ if (stack.unknown) {
430
+ console.warn(` ⚠ Could not detect the ecosystem in ${repoPath}. Will write a config with empty ` +
431
+ `build/test/lint commands — edit stack.* in the config to point at your build/test/lint.`);
432
+ }
433
+ else {
434
+ console.log(` Detected ${stack.language}${stack.packageManager ? ` (${stack.packageManager})` : ''}.`);
435
+ }
436
+ // Warn-only smoke-check (§3.6.5): surface a missing build/test tool now instead
437
+ // of letting it fail silently on the first bead. Never aborts init.
438
+ for (const warning of smokeCheckToolchain(stack)) {
439
+ console.warn(` ⚠ ${warning}`);
440
+ }
441
+ const configTarget = (0, path_1.join)(repoPath, exports.SHRENI_DIR, 'kshetra.yaml');
442
+ if (opts.dryRun) {
443
+ console.log('\n--dry-run — plan only, nothing written:');
444
+ console.log(` provider: ${providerLabel}`);
445
+ console.log(` repo: ${repoPath}`);
446
+ console.log(` beads repo: ${beadsPath}`);
447
+ console.log(` config: ${configTarget}`);
448
+ console.log(` conventions: ${(0, path_1.join)(repoPath, exports.STYLE_GUIDE_FILE)}, ${(0, path_1.join)(repoPath, exports.ARCH_FILE)}`);
449
+ console.log('\nRe-run without --dry-run to apply.');
450
+ return;
451
+ }
452
+ // ── Mutating phases ──────────────────────────────────────────────────────────
453
+ // Shared state threaded between phases via closures.
454
+ let beadsRemote = '';
455
+ let configPath = configTarget;
456
+ const phases = [
457
+ {
458
+ name: 'Beads repo',
459
+ recovery: `ensure \`gh\` is authenticated (gh auth status) and you can reach GitHub, ` +
460
+ `or pass --beads-path to point at an existing beads repo.`,
461
+ run: async () => {
462
+ if (opts.beadsPath && (0, fs_1.existsSync)(beadsPath)) {
463
+ console.log(` using existing beads repo at ${beadsPath} — skipping create/clone`);
464
+ try {
465
+ beadsRemote = await exec('git', ['remote', 'get-url', 'origin'], { cwd: beadsPath });
466
+ }
467
+ catch {
468
+ beadsRemote = '';
469
+ }
470
+ }
471
+ else {
472
+ beadsRemote = await createGitHubRepo(org, opts.slug);
473
+ await cloneBeadsRepo(beadsRemote, beadsPath);
474
+ }
475
+ await initBeadsDb(beadsPath);
476
+ },
477
+ },
478
+ {
479
+ name: 'Repo wiring',
480
+ recovery: `if .beads exists as a real directory, remove it (rm -rf .beads); ` +
481
+ `ensure \`bd\` is installed for the Claude Code hooks.`,
482
+ run: async () => {
483
+ createBeadsSymlink(repoPath, beadsPath);
484
+ addToGitignore(repoPath);
485
+ await setupClaudeHooks(repoPath, beadsPath);
486
+ },
487
+ },
488
+ {
489
+ name: 'Config',
490
+ recovery: `ensure the repo at ${repoPath} has an 'origin' remote ` +
491
+ `(git -C ${repoPath} remote get-url origin).`,
492
+ run: async () => {
493
+ const repoRemote = await exec('git', ['remote', 'get-url', 'origin'], { cwd: repoPath });
494
+ // repoPath/beadsPath are already absolute; the loader does NOT expand ~ or
495
+ // resolve relatives, so init bakes absolute paths in.
496
+ const conventions = scaffoldConventions(repoPath);
497
+ const yamlContent = generateKshetraYaml({
498
+ slug: opts.slug,
499
+ repoPath,
500
+ repoRemote,
501
+ beadsPath,
502
+ beadsRemote,
503
+ stack,
504
+ conventions,
505
+ agents,
506
+ mergePolicy: opts.mergePolicy,
507
+ });
508
+ configPath = writeKshetraConfig(repoPath, yamlContent);
509
+ appendShreniIntegration(repoPath);
510
+ createRagIndexStub(opts.slug);
511
+ },
512
+ },
513
+ {
514
+ name: 'Register',
515
+ recovery: `check that ~/.shreni/registry.json is writable.`,
516
+ run: async () => {
517
+ registerWithSthapathi(opts.slug, configPath);
518
+ },
519
+ },
520
+ ];
521
+ await runInitPhases(phases, reRunCmd);
522
+ // Activation-funnel signal (yds.5) — opt-in + anonymous, a no-op unless
523
+ // enabled. Only the provider name (not the slug/paths/remote) is sent.
524
+ (0, telemetry_1.emit)('kshetra_init', { provider: agents.provider });
525
+ console.log(`\n✓ Kshetra "${opts.slug}" initialised.`);
526
+ console.log(` provider: ${providerLabel}`);
527
+ console.log(` config: ${configPath}`);
528
+ console.log(` beads repo: ${beadsPath}`);
529
+ console.log(`\nRun \`shreni start\` to begin.`);
530
+ }
531
+ //# sourceMappingURL=init-kshetra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-kshetra.js","sourceRoot":"","sources":["../../src/cli/init-kshetra.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,sCAcC;AAsBD,4CAUC;AAID,wCAGC;AAID,kCAMC;AAID,gDAkBC;AAWD,wCAcC;AAID,4CAKC;AAuBD,kDAiBC;AAED,kDA4DC;AAMD,gDAMC;AAoBD,kDAOC;AAgDD,0DAOC;AAID,gDAOC;AAID,sDAEC;AA8CD,kCA+IC;AAhkBD,iDAAyC;AACzC,+BAAiC;AACjC,2BAGY;AACZ,+BAAwD;AACxD,2BAA6B;AAC7B,8CAAgC;AAChC,kDAAsD;AACtD,yDAAyE;AAEzE,2DAKsC;AACtC,6DAA6F;AAC7F,sDAA+D;AAE/D,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;AAEtC,8EAA8E;AAC9E,wEAAwE;AACxE,4EAA4E;AAC/D,QAAA,UAAU,GAAG,SAAS,CAAC;AACvB,QAAA,gBAAgB,GAAG,IAAA,WAAI,EAAC,kBAAU,EAAE,gBAAgB,CAAC,CAAC;AACtD,QAAA,SAAS,GAAG,IAAA,WAAI,EAAC,kBAAU,EAAE,SAAS,CAAC,CAAC;AAsBrD,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,gFAAgF;AAChF,iFAAiF;AACjF,SAAgB,aAAa,CAAC,IAA2C;IAIvE,MAAM,QAAQ,GAAG,IAAA,8BAAmB,EAAC,IAAI,CAAC,QAAQ,IAAI,4BAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,IAAA,+BAAoB,EAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,4BAAiB,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,CAAC,OAAO,+FAA+F,CACzH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,iFAAiF;AAEjF,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAChD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,IAAc,EAAE,OAAkD,EAAE;IACnG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QAC5C,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;QAC5B,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,gFAAgF;AAEzE,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,IAAY;IAC9D,MAAM,QAAQ,GAAG,GAAG,IAAI,QAAQ,CAAC;IACjC,MAAM,MAAM,GAAG,kBAAkB,GAAG,IAAI,QAAQ,MAAM,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,CAAC,iBAAiB;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,IAAI,QAAQ,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,iFAAiF;AAE1E,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,SAAiB;IACvE,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC;QAAE,OAAO;IAClC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,iFAAiF;AAE1E,KAAK,UAAU,WAAW,CAAC,SAAiB;IACjD,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO;IAChG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;QACtC,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;IACpE,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,IAAA,cAAO,EAAC,OAAO,CAAC,KAAK,MAAM;YAAE,OAAO;QACxC,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,iBAAiB,MAAM,GAAG,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,4CAA4C,WAAW,KAAK;gBAC5D,4BAA4B,WAAW,GAAG,CAC3C,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;QACjC,IAAA,gBAAW,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,2EAA2E;AAC3E,gFAAgF;AAChF,iFAAiF;AACjF,8EAA8E;AAC9E,eAAe;AACf,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,GAAG,kBAAU,eAAe,CAAC,CAAC;AAEnE,SAAgB,cAAc,CAAC,QAAgB;IAC7C,MAAM,aAAa,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAA,eAAU,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,IAAA,mBAAc,EAAC,aAAa,EAAE,GAAG,GAAG,GAAG,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,IAAA,kBAAa,EAAC,aAAa,EAAE,GAAG,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,iFAAiF;AAE1E,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,SAAiB;IACxE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;QACpC,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,iFAAiF;AAEjF,gFAAgF;AAChF,gFAAgF;AAChF,6EAA6E;AAC7E,4DAA4D;AAC5D,SAAS,UAAU,CAAC,KAAoB;IACtC,MAAM,KAAK,GAA4B,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IACpE,IAAI,KAAK,CAAC,cAAc;QAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;IACzE,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,KAAK,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IACjF,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;IAC3E,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,8EAA8E;AAC9E,+EAA+E;AAC/E,0EAA0E;AAC1E,8DAA8D;AAC9D,SAAgB,mBAAmB,CAAC,KAAoB;IACtD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAmC;QAC5C,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC;QACpC,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC;KACjC,CAAC;IACF,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,IAAA,kCAAa,EAAC,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CACX,SAAS,KAAK,UAAU,GAAG,iDAAiD;gBAC1E,sBAAsB,kBAAU,mDAAmD,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAmBnC;IACC,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvG,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU;QAAE,WAAW,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;IAC1F,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY;QAAE,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;IAChG,MAAM,MAAM,GAA4B;QACtC,EAAE,EAAE,IAAI,CAAC,IAAI;QACb,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,kBAAkB;YACjC,sEAAsE;YACtE,0CAA0C;YAC1C,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D;QACD,KAAK,EAAE;YACL,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,UAAU;SACjB;QACD,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;QACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,EAAE;YACN,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,WAAW;YAC9C,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,mBAAmB;YAChD,gBAAgB,EAAE,CAAC;SACpB;QACD,QAAQ,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE;KACxD,CAAC;IACF,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,qEAAqE;IACrE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,GAAG,GAAG,GAAG,CAAC,OAAO,CACf,2BAA2B,EAC3B,wFAAwF,CACzF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAC9E,6EAA6E;AAC7E,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,OAAe;IAClE,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,kBAAU,CAAC,CAAC;IAC7C,IAAA,cAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACnD,IAAA,kBAAa,EAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,MAAM,gBAAgB,GAAG;;;;;;CAMxB,CAAC;AAEF,MAAM,SAAS,GAAG;;;;;CAKjB,CAAC;AAEF,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,IAAA,cAAS,EAAC,IAAA,WAAI,EAAC,QAAQ,EAAE,kBAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,wBAAgB,CAAC,CAAC;IACxD,IAAI,CAAC,IAAA,eAAU,EAAC,cAAc,CAAC;QAAE,IAAA,kBAAa,EAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,iBAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC;QAAE,IAAA,kBAAa,EAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACtE,OAAO,EAAE,UAAU,EAAE,wBAAgB,EAAE,YAAY,EAAE,iBAAS,EAAE,CAAC;AACnE,CAAC;AAED,gFAAgF;AAEnE,QAAA,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0C7B,CAAC;AAEF,SAAgB,uBAAuB,CAAC,QAAgB;IACtD,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC/C,IAAI,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAAE,OAAO;IACrD,CAAC;IACD,IAAA,mBAAc,EAAC,UAAU,EAAE,sBAAc,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,iFAAiF;AAEjF,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,IAAA,YAAO,GAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAA,cAAS,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,IAAA,kBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF,SAAgB,qBAAqB,CAAC,IAAY,EAAE,UAAkB;IACpE,IAAA,0BAAe,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AACpC,CAAC;AAcD,kFAAkF;AAClF,kEAAkE;AAClE,SAAS,iBAAiB,CAAC,IAAqB;IAC9C,MAAM,KAAK,GAAG,CAAC,qBAAqB,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,IAAI,IAAI,CAAC,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,iFAAiF;AACjF,2EAA2E;AAC3E,6EAA6E;AAC7E,KAAK,UAAU,aAAa,CAAC,MAAmB,EAAE,QAAgB;IAChE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAY,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,sDAAsD,QAAQ,EAAE,CAAC,CAAC;YAChF,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,IAAqB;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;QAC9B,CAAC,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,SAAS,CAAC;QACzB,CAAC,CAAC,IAAA,cAAO,EAAC,IAAA,WAAI,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,GAAG,IAAA,eAAQ,EAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAEzC,gFAAgF;IAChF,4EAA4E;IAC5E,qEAAqE;IACrE,8EAA8E;IAC9E,gFAAgF;IAChF,8DAA8D;IAC9D,MAAM,YAAY,GAChB,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAA,mCAAc,GAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,IAAA,2CAAsB,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,aAAa,GAAG,GAAG,4BAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,aAAa,aAAa,oBAAoB,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7E,IAAI,IAAA,iCAAsB,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CACV,OAAO,4BAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,8CAA8C;YAC7F,4FAA4F,CAC/F,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,kFAAkF;IAClF,MAAM,QAAQ,GAAG,IAAA,kCAAe,EAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAkB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CACV,yCAAyC,QAAQ,mCAAmC;YAClF,yFAAyF,CAC5F,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1G,CAAC;IACD,gFAAgF;IAChF,oEAAoE;IACpE,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,QAAQ,EAAE,kBAAU,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAA,WAAI,EAAC,QAAQ,EAAE,wBAAgB,CAAC,KAAK,IAAA,WAAI,EAAC,QAAQ,EAAE,iBAAS,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,gFAAgF;IAChF,qDAAqD;IACrD,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,UAAU,GAAG,YAAY,CAAC;IAE9B,MAAM,MAAM,GAAgB;QAC1B;YACE,IAAI,EAAE,YAAY;YAClB,QAAQ,EACN,4EAA4E;gBAC5E,0DAA0D;YAC5D,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,IAAI,IAAI,CAAC,SAAS,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,kCAAkC,SAAS,0BAA0B,CAAC,CAAC;oBACnF,IAAI,CAAC;wBACH,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;oBACvF,CAAC;oBAAC,MAAM,CAAC;wBACP,WAAW,GAAG,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrD,MAAM,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBAC/C,CAAC;gBACD,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;SACF;QACD;YACE,IAAI,EAAE,aAAa;YACnB,QAAQ,EACN,mEAAmE;gBACnE,uDAAuD;YACzD,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACxC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACzB,MAAM,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC9C,CAAC;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,sBAAsB,QAAQ,0BAA0B;gBACxD,WAAW,QAAQ,0BAA0B;YAC/C,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACzF,2EAA2E;gBAC3E,sDAAsD;gBACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBAClD,MAAM,WAAW,GAAG,mBAAmB,CAAC;oBACtC,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ;oBACR,UAAU;oBACV,SAAS;oBACT,WAAW;oBACX,KAAK;oBACL,WAAW;oBACX,MAAM;oBACN,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAC;gBACH,UAAU,GAAG,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACvD,uBAAuB,CAAC,QAAQ,CAAC,CAAC;gBAClC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,iDAAiD;YAC3D,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/C,CAAC;SACF;KACF,CAAC;IAEF,MAAM,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEtC,wEAAwE;IACxE,uEAAuE;IACvE,IAAA,gBAAa,EAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface ListRow {
2
+ id: string;
3
+ name: string;
4
+ status: string;
5
+ repoPath: string;
6
+ }
7
+ export declare function buildKshetraRows(): ListRow[];
8
+ export declare function formatKshetraList(rows: ListRow[]): string;
9
+ export declare function runList(): void;
10
+ export {};
11
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"AAGA,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,IAAI,OAAO,EAAE,CAY5C;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CA0BzD;AAED,wBAAgB,OAAO,IAAI,IAAI,CAG9B"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildKshetraRows = buildKshetraRows;
4
+ exports.formatKshetraList = formatKshetraList;
5
+ exports.runList = runList;
6
+ const registry_js_1 = require("../kshetra/registry.js");
7
+ const state_js_1 = require("../kshetra/state.js");
8
+ function buildKshetraRows() {
9
+ const kshetras = (0, registry_js_1.loadRegistry)();
10
+ const state = (0, state_js_1.loadState)();
11
+ return kshetras.map(k => {
12
+ const ks = state.kshetras[k.id];
13
+ let status = 'active';
14
+ if (ks?.paused) {
15
+ status = ks.requiresManualResume ? 'paused (manual resume required)' : 'paused';
16
+ }
17
+ return { id: k.id, name: k.name, status, repoPath: k.repo.path };
18
+ });
19
+ }
20
+ function formatKshetraList(rows) {
21
+ if (rows.length === 0)
22
+ return 'No kshetras registered. Run `shreni register <path>` first.';
23
+ const idWidth = Math.max(2, ...rows.map(r => r.id.length));
24
+ const nameWidth = Math.max(4, ...rows.map(r => r.name.length));
25
+ const statusWidth = Math.max(6, ...rows.map(r => r.status.length));
26
+ const header = [
27
+ 'ID'.padEnd(idWidth),
28
+ 'NAME'.padEnd(nameWidth),
29
+ 'STATUS'.padEnd(statusWidth),
30
+ 'PATH',
31
+ ].join(' ');
32
+ const sep = '-'.repeat(header.length);
33
+ const lines = rows.map(r => [
34
+ r.id.padEnd(idWidth),
35
+ r.name.padEnd(nameWidth),
36
+ r.status.padEnd(statusWidth),
37
+ r.repoPath,
38
+ ].join(' '));
39
+ return [header, sep, ...lines].join('\n');
40
+ }
41
+ function runList() {
42
+ const rows = buildKshetraRows();
43
+ console.log(formatKshetraList(rows));
44
+ }
45
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":";;AAUA,4CAYC;AAED,8CA0BC;AAED,0BAGC;AAvDD,wDAAsD;AACtD,kDAAgD;AAShD,SAAgB,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,IAAA,0BAAY,GAAE,CAAC;IAChC,MAAM,KAAK,GAAG,IAAA,oBAAS,GAAE,CAAC;IAE1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACtB,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;YACf,MAAM,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClF,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAe;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,6DAA6D,CAAC;IAE5F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,MAAM,MAAM,GAAG;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;QAC5B,MAAM;KACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACzB;QACE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACxB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;QAC5B,CAAC,CAAC,QAAQ;KACX,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,OAAO;IACrB,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface RoundEntry {
2
+ round: number;
3
+ events: string[];
4
+ }
5
+ export interface BeadLog {
6
+ beadId: string;
7
+ title: string;
8
+ status: string;
9
+ rounds: RoundEntry[];
10
+ extra: string[];
11
+ }
12
+ export declare function parseNotesToBeadLog(beadId: string, title: string, status: string, notes: string | undefined): BeadLog;
13
+ export declare function formatBeadLog(log: BeadLog): string;
14
+ export interface LogsOpts {
15
+ kshetraId?: string;
16
+ beadId?: string;
17
+ all: boolean;
18
+ }
19
+ export declare function runLogs(opts: LogsOpts): Promise<void>;
20
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/cli/logs.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAuBrH;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAWlD;AA+DD,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C3D"}