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.
- package/ARCHITECTURE.md +260 -0
- package/LICENSE +201 -0
- package/README.md +519 -0
- package/TRADEMARK.md +97 -0
- package/dist/agents/parikshaka.d.ts +11 -0
- package/dist/agents/parikshaka.d.ts.map +1 -0
- package/dist/agents/parikshaka.js +80 -0
- package/dist/agents/parikshaka.js.map +1 -0
- package/dist/agents/providers/claude.d.ts +3 -0
- package/dist/agents/providers/claude.d.ts.map +1 -0
- package/dist/agents/providers/claude.js +100 -0
- package/dist/agents/providers/claude.js.map +1 -0
- package/dist/agents/providers/codex.d.ts +3 -0
- package/dist/agents/providers/codex.d.ts.map +1 -0
- package/dist/agents/providers/codex.js +123 -0
- package/dist/agents/providers/codex.js.map +1 -0
- package/dist/agents/providers/gemini.d.ts +3 -0
- package/dist/agents/providers/gemini.d.ts.map +1 -0
- package/dist/agents/providers/gemini.js +77 -0
- package/dist/agents/providers/gemini.js.map +1 -0
- package/dist/agents/providers/index.d.ts +6 -0
- package/dist/agents/providers/index.d.ts.map +1 -0
- package/dist/agents/providers/index.js +35 -0
- package/dist/agents/providers/index.js.map +1 -0
- package/dist/agents/providers/registry.d.ts +20 -0
- package/dist/agents/providers/registry.d.ts.map +1 -0
- package/dist/agents/providers/registry.js +91 -0
- package/dist/agents/providers/registry.js.map +1 -0
- package/dist/agents/providers/types.d.ts +42 -0
- package/dist/agents/providers/types.d.ts.map +1 -0
- package/dist/agents/providers/types.js +61 -0
- package/dist/agents/providers/types.js.map +1 -0
- package/dist/agents/runner.d.ts +6 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +159 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/agents/silpi.d.ts +3 -0
- package/dist/agents/silpi.d.ts.map +1 -0
- package/dist/agents/silpi.js +101 -0
- package/dist/agents/silpi.js.map +1 -0
- package/dist/agents/viharapala.d.ts +5 -0
- package/dist/agents/viharapala.d.ts.map +1 -0
- package/dist/agents/viharapala.js +128 -0
- package/dist/agents/viharapala.js.map +1 -0
- package/dist/cli/agents.d.ts +14 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +47 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/detect-toolchain.d.ts +10 -0
- package/dist/cli/detect-toolchain.d.ts.map +1 -0
- package/dist/cli/detect-toolchain.js +77 -0
- package/dist/cli/detect-toolchain.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +342 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-kshetra.d.ts +59 -0
- package/dist/cli/init-kshetra.d.ts.map +1 -0
- package/dist/cli/init-kshetra.js +531 -0
- package/dist/cli/init-kshetra.js.map +1 -0
- package/dist/cli/list.d.ts +11 -0
- package/dist/cli/list.d.ts.map +1 -0
- package/dist/cli/list.js +45 -0
- package/dist/cli/list.js.map +1 -0
- package/dist/cli/logs.d.ts +20 -0
- package/dist/cli/logs.d.ts.map +1 -0
- package/dist/cli/logs.js +144 -0
- package/dist/cli/logs.js.map +1 -0
- package/dist/cli/migrate.d.ts +8 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +116 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/pause.d.ts +24 -0
- package/dist/cli/pause.d.ts.map +1 -0
- package/dist/cli/pause.js +41 -0
- package/dist/cli/pause.js.map +1 -0
- package/dist/cli/phalaka-autostart.d.ts +11 -0
- package/dist/cli/phalaka-autostart.d.ts.map +1 -0
- package/dist/cli/phalaka-autostart.js +28 -0
- package/dist/cli/phalaka-autostart.js.map +1 -0
- package/dist/cli/phalaka-server.d.ts +2 -0
- package/dist/cli/phalaka-server.d.ts.map +1 -0
- package/dist/cli/phalaka-server.js +20 -0
- package/dist/cli/phalaka-server.js.map +1 -0
- package/dist/cli/phalaka.d.ts +30 -0
- package/dist/cli/phalaka.d.ts.map +1 -0
- package/dist/cli/phalaka.js +60 -0
- package/dist/cli/phalaka.js.map +1 -0
- package/dist/cli/pid.d.ts +9 -0
- package/dist/cli/pid.d.ts.map +1 -0
- package/dist/cli/pid.js +66 -0
- package/dist/cli/pid.js.map +1 -0
- package/dist/cli/provider-preflight.d.ts +11 -0
- package/dist/cli/provider-preflight.d.ts.map +1 -0
- package/dist/cli/provider-preflight.js +70 -0
- package/dist/cli/provider-preflight.js.map +1 -0
- package/dist/cli/register.d.ts +8 -0
- package/dist/cli/register.d.ts.map +1 -0
- package/dist/cli/register.js +34 -0
- package/dist/cli/register.js.map +1 -0
- package/dist/cli/run.d.ts +3 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +40 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/start.d.ts +11 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +26 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/cli/status.d.ts +39 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +207 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/stop.d.ts +13 -0
- package/dist/cli/stop.d.ts.map +1 -0
- package/dist/cli/stop.js +18 -0
- package/dist/cli/stop.js.map +1 -0
- package/dist/cli/sync.d.ts +6 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +31 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/tail.d.ts +6 -0
- package/dist/cli/tail.d.ts.map +1 -0
- package/dist/cli/tail.js +170 -0
- package/dist/cli/tail.js.map +1 -0
- package/dist/cli/telemetry.d.ts +2 -0
- package/dist/cli/telemetry.d.ts.map +1 -0
- package/dist/cli/telemetry.js +42 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/verify-hooks.d.ts +12 -0
- package/dist/cli/verify-hooks.d.ts.map +1 -0
- package/dist/cli/verify-hooks.js +38 -0
- package/dist/cli/verify-hooks.js.map +1 -0
- package/dist/cli/worker.d.ts +2 -0
- package/dist/cli/worker.d.ts.map +1 -0
- package/dist/cli/worker.js +211 -0
- package/dist/cli/worker.js.map +1 -0
- package/dist/kshetra/config.d.ts +64 -0
- package/dist/kshetra/config.d.ts.map +1 -0
- package/dist/kshetra/config.js +173 -0
- package/dist/kshetra/config.js.map +1 -0
- package/dist/kshetra/registry.d.ts +5 -0
- package/dist/kshetra/registry.d.ts.map +1 -0
- package/dist/kshetra/registry.js +69 -0
- package/dist/kshetra/registry.js.map +1 -0
- package/dist/kshetra/state.d.ts +57 -0
- package/dist/kshetra/state.d.ts.map +1 -0
- package/dist/kshetra/state.js +195 -0
- package/dist/kshetra/state.js.map +1 -0
- package/dist/kshetra/toolchain.d.ts +20 -0
- package/dist/kshetra/toolchain.d.ts.map +1 -0
- package/dist/kshetra/toolchain.js +146 -0
- package/dist/kshetra/toolchain.js.map +1 -0
- package/dist/phalaka/api.d.ts +123 -0
- package/dist/phalaka/api.d.ts.map +1 -0
- package/dist/phalaka/api.js +196 -0
- package/dist/phalaka/api.js.map +1 -0
- package/dist/phalaka/beads-read.d.ts +49 -0
- package/dist/phalaka/beads-read.d.ts.map +1 -0
- package/dist/phalaka/beads-read.js +174 -0
- package/dist/phalaka/beads-read.js.map +1 -0
- package/dist/phalaka/pid.d.ts +6 -0
- package/dist/phalaka/pid.d.ts.map +1 -0
- package/dist/phalaka/pid.js +48 -0
- package/dist/phalaka/pid.js.map +1 -0
- package/dist/phalaka/server.d.ts +10 -0
- package/dist/phalaka/server.d.ts.map +1 -0
- package/dist/phalaka/server.js +30 -0
- package/dist/phalaka/server.js.map +1 -0
- package/dist/phalaka/token.d.ts +5 -0
- package/dist/phalaka/token.d.ts.map +1 -0
- package/dist/phalaka/token.js +40 -0
- package/dist/phalaka/token.js.map +1 -0
- package/dist/phalaka/ui.d.ts +15 -0
- package/dist/phalaka/ui.d.ts.map +1 -0
- package/dist/phalaka/ui.js +233 -0
- package/dist/phalaka/ui.js.map +1 -0
- package/dist/sthapathi/activity-log.d.ts +68 -0
- package/dist/sthapathi/activity-log.d.ts.map +1 -0
- package/dist/sthapathi/activity-log.js +57 -0
- package/dist/sthapathi/activity-log.js.map +1 -0
- package/dist/sthapathi/beads.d.ts +27 -0
- package/dist/sthapathi/beads.d.ts.map +1 -0
- package/dist/sthapathi/beads.js +153 -0
- package/dist/sthapathi/beads.js.map +1 -0
- package/dist/sthapathi/branch.d.ts +5 -0
- package/dist/sthapathi/branch.d.ts.map +1 -0
- package/dist/sthapathi/branch.js +20 -0
- package/dist/sthapathi/branch.js.map +1 -0
- package/dist/sthapathi/dispatch.d.ts +14 -0
- package/dist/sthapathi/dispatch.d.ts.map +1 -0
- package/dist/sthapathi/dispatch.js +326 -0
- package/dist/sthapathi/dispatch.js.map +1 -0
- package/dist/sthapathi/errors.d.ts +27 -0
- package/dist/sthapathi/errors.d.ts.map +1 -0
- package/dist/sthapathi/errors.js +174 -0
- package/dist/sthapathi/errors.js.map +1 -0
- package/dist/sthapathi/gh.d.ts +19 -0
- package/dist/sthapathi/gh.d.ts.map +1 -0
- package/dist/sthapathi/gh.js +69 -0
- package/dist/sthapathi/gh.js.map +1 -0
- package/dist/sthapathi/git.d.ts +41 -0
- package/dist/sthapathi/git.d.ts.map +1 -0
- package/dist/sthapathi/git.js +199 -0
- package/dist/sthapathi/git.js.map +1 -0
- package/dist/sthapathi/guard.d.ts +24 -0
- package/dist/sthapathi/guard.d.ts.map +1 -0
- package/dist/sthapathi/guard.js +64 -0
- package/dist/sthapathi/guard.js.map +1 -0
- package/dist/sthapathi/health.d.ts +23 -0
- package/dist/sthapathi/health.d.ts.map +1 -0
- package/dist/sthapathi/health.js +142 -0
- package/dist/sthapathi/health.js.map +1 -0
- package/dist/sthapathi/index.d.ts +21 -0
- package/dist/sthapathi/index.d.ts.map +1 -0
- package/dist/sthapathi/index.js +88 -0
- package/dist/sthapathi/index.js.map +1 -0
- package/dist/sthapathi/lifecycle.d.ts +7 -0
- package/dist/sthapathi/lifecycle.d.ts.map +1 -0
- package/dist/sthapathi/lifecycle.js +43 -0
- package/dist/sthapathi/lifecycle.js.map +1 -0
- package/dist/sthapathi/lint.d.ts +8 -0
- package/dist/sthapathi/lint.d.ts.map +1 -0
- package/dist/sthapathi/lint.js +33 -0
- package/dist/sthapathi/lint.js.map +1 -0
- package/dist/sthapathi/merge.d.ts +18 -0
- package/dist/sthapathi/merge.d.ts.map +1 -0
- package/dist/sthapathi/merge.js +259 -0
- package/dist/sthapathi/merge.js.map +1 -0
- package/dist/sthapathi/notifications.d.ts +14 -0
- package/dist/sthapathi/notifications.d.ts.map +1 -0
- package/dist/sthapathi/notifications.js +57 -0
- package/dist/sthapathi/notifications.js.map +1 -0
- package/dist/sthapathi/parikshaka-dispatch.d.ts +12 -0
- package/dist/sthapathi/parikshaka-dispatch.d.ts.map +1 -0
- package/dist/sthapathi/parikshaka-dispatch.js +0 -0
- package/dist/sthapathi/parikshaka-dispatch.js.map +1 -0
- package/dist/sthapathi/pickup.d.ts +13 -0
- package/dist/sthapathi/pickup.d.ts.map +1 -0
- package/dist/sthapathi/pickup.js +144 -0
- package/dist/sthapathi/pickup.js.map +1 -0
- package/dist/sthapathi/recover.d.ts +16 -0
- package/dist/sthapathi/recover.d.ts.map +1 -0
- package/dist/sthapathi/recover.js +149 -0
- package/dist/sthapathi/recover.js.map +1 -0
- package/dist/sthapathi/retry.d.ts +11 -0
- package/dist/sthapathi/retry.d.ts.map +1 -0
- package/dist/sthapathi/retry.js +42 -0
- package/dist/sthapathi/retry.js.map +1 -0
- package/dist/sthapathi/self-heal.d.ts +19 -0
- package/dist/sthapathi/self-heal.d.ts.map +1 -0
- package/dist/sthapathi/self-heal.js +46 -0
- package/dist/sthapathi/self-heal.js.map +1 -0
- package/dist/sthapathi/types.d.ts +56 -0
- package/dist/sthapathi/types.d.ts.map +1 -0
- package/dist/sthapathi/types.js +4 -0
- package/dist/sthapathi/types.js.map +1 -0
- package/dist/sthapathi/watchdog.d.ts +27 -0
- package/dist/sthapathi/watchdog.d.ts.map +1 -0
- package/dist/sthapathi/watchdog.js +145 -0
- package/dist/sthapathi/watchdog.js.map +1 -0
- package/dist/telemetry/telemetry.d.ts +42 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -0
- package/dist/telemetry/telemetry.js +189 -0
- package/dist/telemetry/telemetry.js.map +1 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +16 -0
- package/dist/test-setup.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|
package/dist/cli/list.js
ADDED
|
@@ -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"}
|