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