@synaplink/orqlaude 0.5.2 → 0.5.5

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 (39) hide show
  1. package/README.md +25 -6
  2. package/dist/__tests__/desktop_config.test.d.ts +1 -0
  3. package/dist/__tests__/desktop_config.test.js +110 -0
  4. package/dist/__tests__/desktop_config.test.js.map +1 -0
  5. package/dist/__tests__/v05.test.js +6 -2
  6. package/dist/__tests__/v05.test.js.map +1 -1
  7. package/dist/__tests__/v053.test.d.ts +1 -0
  8. package/dist/__tests__/v053.test.js +89 -0
  9. package/dist/__tests__/v053.test.js.map +1 -0
  10. package/dist/cli.js +118 -0
  11. package/dist/cli.js.map +1 -1
  12. package/dist/lib/desktop_config.d.ts +66 -0
  13. package/dist/lib/desktop_config.js +126 -0
  14. package/dist/lib/desktop_config.js.map +1 -0
  15. package/dist/lib/spawn_cli.d.ts +79 -0
  16. package/dist/lib/spawn_cli.js +211 -0
  17. package/dist/lib/spawn_cli.js.map +1 -0
  18. package/dist/lib/state.d.ts +10 -6
  19. package/dist/lib/state.js.map +1 -1
  20. package/dist/lib/telegram_status.d.ts +24 -0
  21. package/dist/lib/telegram_status.js +87 -0
  22. package/dist/lib/telegram_status.js.map +1 -0
  23. package/dist/server.js +1 -1
  24. package/dist/telegram/api.d.ts +0 -20
  25. package/dist/telegram/api.js +0 -32
  26. package/dist/telegram/api.js.map +1 -1
  27. package/dist/telegram/bot.js +54 -6
  28. package/dist/telegram/bot.js.map +1 -1
  29. package/dist/telegram/notifier.js +10 -98
  30. package/dist/telegram/notifier.js.map +1 -1
  31. package/dist/tools/broker.js +47 -1
  32. package/dist/tools/broker.js.map +1 -1
  33. package/dist/tools/dispatch.js +74 -20
  34. package/dist/tools/dispatch.js.map +1 -1
  35. package/dist/tools/ping.js +16 -2
  36. package/dist/tools/ping.js.map +1 -1
  37. package/dist/tools/userio.js +40 -9
  38. package/dist/tools/userio.js.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,126 @@
1
+ import { promises as fs, existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ import os from "node:os";
4
+ const NPM_PACKAGE = "@synaplink/orqlaude";
5
+ const MCP_KEY = "orqlaude";
6
+ /** Resolve the Claude Desktop config path for the current platform. */
7
+ export function findDesktopConfigPath() {
8
+ const home = os.homedir();
9
+ if (process.platform === "darwin") {
10
+ return path.join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json");
11
+ }
12
+ if (process.platform === "win32") {
13
+ const appData = process.env.APPDATA ?? path.join(home, "AppData", "Roaming");
14
+ return path.join(appData, "Claude", "claude_desktop_config.json");
15
+ }
16
+ return path.join(home, ".config", "Claude", "claude_desktop_config.json");
17
+ }
18
+ /**
19
+ * Read the desktop config. Returns null if the file doesn't exist;
20
+ * throws on a parse error (we don't want to silently overwrite a malformed
21
+ * but probably-valuable file).
22
+ */
23
+ export async function readDesktopConfig(filePath) {
24
+ if (!existsSync(filePath))
25
+ return null;
26
+ const raw = await fs.readFile(filePath, "utf8");
27
+ // Some users may have empty files. Treat as empty config.
28
+ if (!raw.trim())
29
+ return {};
30
+ try {
31
+ return JSON.parse(raw);
32
+ }
33
+ catch (err) {
34
+ throw new Error(`Failed to parse ${filePath}: ${err.message}. ` +
35
+ `Inspect / fix the file manually before re-running setup — orql refuses to overwrite a malformed config.`);
36
+ }
37
+ }
38
+ /**
39
+ * Build the orqlaude MCP server entry pointing at the npm package + a
40
+ * concrete state dir.
41
+ */
42
+ export function buildOrqlaudeEntry(stateDir) {
43
+ return {
44
+ command: "npx",
45
+ args: ["-y", "-p", NPM_PACKAGE, "orqlaude-mcp"],
46
+ env: {
47
+ ORQLAUDE_STATE_DIR: stateDir,
48
+ },
49
+ };
50
+ }
51
+ /**
52
+ * Return what would change if we patched in `stateDir`. Doesn't write
53
+ * anything — caller persists with `writeDesktopConfigAtomic`.
54
+ */
55
+ export function planPatch(existing, stateDir) {
56
+ const next = existing ? structuredClone(existing) : {};
57
+ const targetEntry = buildOrqlaudeEntry(stateDir);
58
+ let action = "noop";
59
+ let before = null;
60
+ if (!existing) {
61
+ action = "create-config";
62
+ next.mcpServers = { [MCP_KEY]: targetEntry };
63
+ }
64
+ else {
65
+ if (!next.mcpServers || typeof next.mcpServers !== "object") {
66
+ next.mcpServers = {};
67
+ }
68
+ before = next.mcpServers[MCP_KEY] ?? null;
69
+ if (!before) {
70
+ action = "create-server";
71
+ next.mcpServers[MCP_KEY] = targetEntry;
72
+ }
73
+ else {
74
+ // Compare semantically — only update if something is meaningfully off.
75
+ const equal = before.command === targetEntry.command &&
76
+ sameArray(before.args, targetEntry.args) &&
77
+ (before.env?.ORQLAUDE_STATE_DIR === targetEntry.env?.ORQLAUDE_STATE_DIR);
78
+ if (!equal) {
79
+ action = "update-server";
80
+ // Preserve other env keys the user might have added.
81
+ const mergedEnv = { ...(before.env ?? {}), ...targetEntry.env };
82
+ next.mcpServers[MCP_KEY] = { ...before, ...targetEntry, env: mergedEnv };
83
+ }
84
+ }
85
+ }
86
+ return { action, before, after: next.mcpServers[MCP_KEY], config: next };
87
+ }
88
+ function sameArray(a, b) {
89
+ if (!a || !b)
90
+ return a === b;
91
+ if (a.length !== b.length)
92
+ return false;
93
+ return a.every((v, i) => v === b[i]);
94
+ }
95
+ /**
96
+ * Persist a config back to disk. Writes a timestamped `.bak` first if the
97
+ * file existed, then tmp + rename for atomicity. Never partial.
98
+ */
99
+ export async function writeDesktopConfigAtomic(filePath, config) {
100
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
101
+ let backupPath = null;
102
+ if (existsSync(filePath)) {
103
+ const ts = new Date().toISOString().replace(/[:.]/g, "-");
104
+ backupPath = `${filePath}.bak.${ts}`;
105
+ await fs.copyFile(filePath, backupPath);
106
+ }
107
+ const tmp = `${filePath}.${process.pid}.${Date.now()}.tmp`;
108
+ await fs.writeFile(tmp, JSON.stringify(config, null, 2) + "\n");
109
+ await fs.rename(tmp, filePath);
110
+ return { backupPath };
111
+ }
112
+ /**
113
+ * One-shot convenience: patch the config at `filePath` so orqlaude points at
114
+ * `stateDir`. Returns the action that was taken and the backup path (if a
115
+ * backup was created).
116
+ */
117
+ export async function applyPatch(filePath, stateDir) {
118
+ const existing = await readDesktopConfig(filePath);
119
+ const result = planPatch(existing, stateDir);
120
+ if (result.action === "noop") {
121
+ return { result, backupPath: null };
122
+ }
123
+ const { backupPath } = await writeDesktopConfigAtomic(filePath, result.config);
124
+ return { result, backupPath };
125
+ }
126
+ //# sourceMappingURL=desktop_config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop_config.js","sourceRoot":"","sources":["../../src/lib/desktop_config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * orqlaude-owned spawning path — sidesteps the host's choice of tool.
3
+ *
4
+ * Why this exists: the host's `Agent` tool runs the spawned worker in the
5
+ * SAME worktree as the orchestrator, so concurrent siblings collide on git
6
+ * operations. The host's `mcp__ccd_session__spawn_task` does create a
7
+ * worktree but the orchestrator can pick the wrong tool by habit. Solving
8
+ * this from inside orqlaude means owning the spawn end-to-end: we create
9
+ * a dedicated worktree per task, pre-allocate the session id, and exec
10
+ * `claude -p` directly.
11
+ *
12
+ * The cost is that the spawned session won't appear in the Claude Desktop
13
+ * sidebar until the app restarts (the JSONL lives in ~/.claude/projects/
14
+ * but the in-memory cache doesn't see it). That's an acceptable tradeoff
15
+ * for correctness.
16
+ */
17
+ export interface SpawnViaCliResult {
18
+ worktreePath: string;
19
+ branch: string;
20
+ sessionId: string;
21
+ pid: number;
22
+ jsonlPath: string;
23
+ }
24
+ export interface SpawnViaCliInput {
25
+ projectRoot: string;
26
+ stateDir: string;
27
+ planId: string;
28
+ taskId: string;
29
+ agnetName?: string;
30
+ prompt: string;
31
+ branchHint?: string;
32
+ /** Per-task token cap. Wired into --max-budget-usd if model pricing is known;
33
+ * primarily here for the future when claude exposes --max-budget-tokens. */
34
+ budgetCapUsd?: number;
35
+ permissionMode?: "bypassPermissions" | "acceptEdits" | "default";
36
+ /** Override which claude binary to invoke. Defaults to discoverClaudeBinary(). */
37
+ claudeBin?: string;
38
+ }
39
+ /**
40
+ * Find the `claude` binary in priority order:
41
+ * 1. CLAUDE_BIN env var (explicit override)
42
+ * 2. `which claude` on PATH
43
+ * 3. macOS bundled location:
44
+ * ~/Library/Application Support/Claude/claude-code/<version>/claude.app/Contents/MacOS/claude
45
+ */
46
+ export declare function discoverClaudeBinary(): string;
47
+ /**
48
+ * Find the project's git root. We look upward from `start` for `.git` (dir
49
+ * or file). If `start` is already in a worktree, the worktree's `.git` file
50
+ * points back at the main checkout — for spawning fresh worktrees we want
51
+ * the MAIN checkout, not a sibling.
52
+ */
53
+ export declare function findGitRoot(start: string): string;
54
+ /**
55
+ * Create a fresh worktree dedicated to one task. Worktree path:
56
+ * <project_root>/.orqlaude-worktrees/<plan_short>-<agnet_or_task>
57
+ *
58
+ * Returns the absolute path and the branch name created.
59
+ */
60
+ export declare function createWorktreeForTask(input: {
61
+ projectRoot: string;
62
+ planId: string;
63
+ taskId: string;
64
+ agnetName?: string;
65
+ branchHint?: string;
66
+ }): Promise<{
67
+ path: string;
68
+ branch: string;
69
+ }>;
70
+ /**
71
+ * Spawn a fresh worktree + a `claude -p` process bound to a pre-allocated
72
+ * session id. Returns immediately — the child runs detached.
73
+ */
74
+ export declare function spawnAgnetViaCli(input: SpawnViaCliInput): Promise<SpawnViaCliResult>;
75
+ /**
76
+ * Remove all orqlaude-managed worktrees for a plan. Safe-by-default: only
77
+ * touches paths under <project>/.orqlaude-worktrees/<plan_short>-*.
78
+ */
79
+ export declare function cleanupPlanWorktrees(projectRoot: string, planId: string): Promise<string[]>;
@@ -0,0 +1,211 @@
1
+ import { execSync, spawn } from "node:child_process";
2
+ import { promises as fs, existsSync, readdirSync, statSync, readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import os from "node:os";
5
+ import { randomUUID } from "node:crypto";
6
+ import { fileURLToPath } from "node:url";
7
+ /**
8
+ * Find the `claude` binary in priority order:
9
+ * 1. CLAUDE_BIN env var (explicit override)
10
+ * 2. `which claude` on PATH
11
+ * 3. macOS bundled location:
12
+ * ~/Library/Application Support/Claude/claude-code/<version>/claude.app/Contents/MacOS/claude
13
+ */
14
+ export function discoverClaudeBinary() {
15
+ if (process.env.CLAUDE_BIN && existsSync(process.env.CLAUDE_BIN)) {
16
+ return process.env.CLAUDE_BIN;
17
+ }
18
+ try {
19
+ const out = execSync("which claude", { encoding: "utf8" }).trim();
20
+ if (out && existsSync(out))
21
+ return out;
22
+ }
23
+ catch {
24
+ /* not on PATH */
25
+ }
26
+ // macOS bundled path probe.
27
+ const bundleRoot = path.join(os.homedir(), "Library", "Application Support", "Claude", "claude-code");
28
+ try {
29
+ const entries = readdirSync(bundleRoot);
30
+ // Highest semver-looking dir wins.
31
+ const versions = entries.filter((e) => /^\d/.test(e)).sort().reverse();
32
+ for (const v of versions) {
33
+ const candidate = path.join(bundleRoot, v, "claude.app", "Contents", "MacOS", "claude");
34
+ if (existsSync(candidate))
35
+ return candidate;
36
+ }
37
+ }
38
+ catch {
39
+ /* no bundle */
40
+ }
41
+ throw new Error("claude binary not found. Set CLAUDE_BIN env var, install Claude Code globally, or run from a machine with the Desktop app installed.");
42
+ }
43
+ /**
44
+ * Find the project's git root. We look upward from `start` for `.git` (dir
45
+ * or file). If `start` is already in a worktree, the worktree's `.git` file
46
+ * points back at the main checkout — for spawning fresh worktrees we want
47
+ * the MAIN checkout, not a sibling.
48
+ */
49
+ export function findGitRoot(start) {
50
+ let dir = path.resolve(start);
51
+ while (true) {
52
+ const dotGit = path.join(dir, ".git");
53
+ if (existsSync(dotGit)) {
54
+ const stat = statSync(dotGit);
55
+ if (stat.isFile()) {
56
+ // worktree pointer: gitdir: <main>/.git/worktrees/<n>
57
+ const content = readFileSync(dotGit, "utf8");
58
+ const m = content.match(/^gitdir:\s*(.+?)\/worktrees\/[^\/\s]+\s*$/m);
59
+ if (m)
60
+ return path.dirname(m[1]); // strip /.git to get main checkout
61
+ }
62
+ return dir;
63
+ }
64
+ const parent = path.dirname(dir);
65
+ if (parent === dir)
66
+ throw new Error(`no git repo found starting from ${start}`);
67
+ dir = parent;
68
+ }
69
+ }
70
+ /**
71
+ * Create a fresh worktree dedicated to one task. Worktree path:
72
+ * <project_root>/.orqlaude-worktrees/<plan_short>-<agnet_or_task>
73
+ *
74
+ * Returns the absolute path and the branch name created.
75
+ */
76
+ export async function createWorktreeForTask(input) {
77
+ const planShort = input.planId.slice(0, 8);
78
+ const agnetSlug = (input.agnetName ?? input.taskId.slice(0, 8)).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "agnet";
79
+ const worktreeBase = path.join(input.projectRoot, ".orqlaude-worktrees");
80
+ await fs.mkdir(worktreeBase, { recursive: true });
81
+ const wtPath = path.join(worktreeBase, `${planShort}-${agnetSlug}`);
82
+ const branch = input.branchHint
83
+ ? input.branchHint
84
+ : `fleet/${planShort}/${agnetSlug}`;
85
+ // If the worktree already exists, reuse it (idempotent).
86
+ if (existsSync(wtPath)) {
87
+ return { path: wtPath, branch };
88
+ }
89
+ try {
90
+ execSync(`git worktree add "${wtPath}" -b "${branch}"`, { cwd: input.projectRoot, stdio: "pipe" });
91
+ }
92
+ catch (err) {
93
+ // Branch might already exist; retry without -b.
94
+ const msg = (err.stderr?.toString?.() ?? err.message ?? "").toLowerCase();
95
+ if (msg.includes("already exists")) {
96
+ execSync(`git worktree add "${wtPath}" "${branch}"`, { cwd: input.projectRoot, stdio: "pipe" });
97
+ }
98
+ else {
99
+ throw err;
100
+ }
101
+ }
102
+ return { path: wtPath, branch };
103
+ }
104
+ /**
105
+ * Build a `--mcp-config` JSON inline so the spawned claude session loads
106
+ * orqlaude with the parent's state dir. The child's `process.cwd()` will be
107
+ * the worktree, but its ORQLAUDE_STATE_DIR points back at the parent.
108
+ */
109
+ function buildMcpConfig(serverEntryPath, stateDir) {
110
+ return JSON.stringify({
111
+ mcpServers: {
112
+ orqlaude: {
113
+ command: "node",
114
+ args: [serverEntryPath],
115
+ env: { ORQLAUDE_STATE_DIR: stateDir },
116
+ },
117
+ },
118
+ });
119
+ }
120
+ /**
121
+ * Spawn a fresh worktree + a `claude -p` process bound to a pre-allocated
122
+ * session id. Returns immediately — the child runs detached.
123
+ */
124
+ export async function spawnAgnetViaCli(input) {
125
+ const claudeBin = input.claudeBin ?? discoverClaudeBinary();
126
+ const wt = await createWorktreeForTask({
127
+ projectRoot: input.projectRoot,
128
+ planId: input.planId,
129
+ taskId: input.taskId,
130
+ agnetName: input.agnetName,
131
+ branchHint: input.branchHint,
132
+ });
133
+ const sessionId = randomUUID();
134
+ // Path to orqlaude's server.js — derived from this file's location.
135
+ const thisFile = fileURLToPath(import.meta.url);
136
+ const serverEntry = path.resolve(path.dirname(thisFile), "..", "server.js");
137
+ const mcpConfig = buildMcpConfig(serverEntry, input.stateDir);
138
+ const args = [
139
+ "-p",
140
+ input.prompt,
141
+ "--session-id",
142
+ sessionId,
143
+ "--output-format",
144
+ "stream-json",
145
+ "--permission-mode",
146
+ input.permissionMode ?? "bypassPermissions",
147
+ "--mcp-config",
148
+ mcpConfig,
149
+ ];
150
+ if (input.budgetCapUsd) {
151
+ args.push("--max-budget-usd", String(input.budgetCapUsd));
152
+ }
153
+ // JSONL ends up at ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl.
154
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
155
+ const jsonlPath = path.join(home, ".claude", "projects", wt.path.replace(/\//g, "-"), `${sessionId}.jsonl`);
156
+ // Spawn detached so it survives the MCP tool call return.
157
+ const child = spawn(claudeBin, args, {
158
+ cwd: wt.path,
159
+ detached: true,
160
+ stdio: "ignore",
161
+ env: {
162
+ ...process.env,
163
+ ORQLAUDE_STATE_DIR: input.stateDir,
164
+ },
165
+ });
166
+ child.unref();
167
+ return {
168
+ worktreePath: wt.path,
169
+ branch: wt.branch,
170
+ sessionId,
171
+ pid: child.pid ?? -1,
172
+ jsonlPath,
173
+ };
174
+ }
175
+ /**
176
+ * Remove all orqlaude-managed worktrees for a plan. Safe-by-default: only
177
+ * touches paths under <project>/.orqlaude-worktrees/<plan_short>-*.
178
+ */
179
+ export async function cleanupPlanWorktrees(projectRoot, planId) {
180
+ const planShort = planId.slice(0, 8);
181
+ const base = path.join(projectRoot, ".orqlaude-worktrees");
182
+ if (!existsSync(base))
183
+ return [];
184
+ let entries = [];
185
+ try {
186
+ entries = (await fs.readdir(base)).filter((n) => n.startsWith(`${planShort}-`));
187
+ }
188
+ catch {
189
+ return [];
190
+ }
191
+ const removed = [];
192
+ for (const entry of entries) {
193
+ const wt = path.join(base, entry);
194
+ try {
195
+ execSync(`git worktree remove --force "${wt}"`, { cwd: projectRoot, stdio: "pipe" });
196
+ removed.push(wt);
197
+ }
198
+ catch {
199
+ // Worktree might be in an inconsistent state. Force-remove the dir.
200
+ try {
201
+ await fs.rm(wt, { recursive: true, force: true });
202
+ removed.push(wt);
203
+ }
204
+ catch {
205
+ /* leave behind; report and move on */
206
+ }
207
+ }
208
+ }
209
+ return removed;
210
+ }
211
+ //# sourceMappingURL=spawn_cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn_cli.js","sourceRoot":"","sources":["../../src/lib/spawn_cli.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,11 @@ export interface Task {
27
27
  branchHint?: string;
28
28
  status: TaskStatus;
29
29
  spawnedSessionId?: string;
30
+ /** v0.5.3+: filesystem path of the worktree this Agnet is running in.
31
+ * Populated when spawned via spawn_via_cli; null for host-spawned. */
32
+ worktreePath?: string;
33
+ /** v0.5.3+: feature branch the worktree is on. */
34
+ worktreeBranch?: string;
30
35
  /** v0.5+: Human-friendly Agnet designation (e.g. "Zenith"). Used in CLI
31
36
  * output and Telegram notifications. Stable per task_id. */
32
37
  agnetName?: string;
@@ -119,14 +124,13 @@ export interface UserStream {
119
124
  status: "active" | "ended";
120
125
  createdAt: number;
121
126
  endedAt?: number;
122
- /** v0.5.1+: deterministic non-zero integer for Telegram's sendMessageDraft.
123
- * Derived from the stream UUID so it's stable across restarts. */
127
+ /** v0.5.1 added a sendMessageDraft transport which was reverted in v0.5.4.
128
+ * Field retained for backward-compatible deserialization of old state files. */
124
129
  draftId?: number;
125
- /** v0.5.1+: which transport path is active.
126
- * "draft" sendMessageDraft for each update, sendMessage to persist on end.
127
- * "edit" → fallback: sendMessage once + editMessageText for updates (v0.5 default). */
130
+ /** v0.5.1 added "draft" alongside "edit". v0.5.4 removed the draft path;
131
+ * only "edit" remains in use. Field retained for back-compat. */
128
132
  transport?: "draft" | "edit";
129
- /** Per-chat persistence so the notifier knows which message to edit (edit path) or persist (draft path). */
133
+ /** Per-chat persistence so the notifier knows which message to edit. */
130
134
  telegramChatId?: number;
131
135
  telegramMessageId?: number;
132
136
  /** v0.5.1+: whether the stream's final persisted message has been sent. */
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Quick "is Telegram alive" probe for inclusion in ping / notify_user /
3
+ * request_user_response responses.
4
+ *
5
+ * Three signals, oldest to newest:
6
+ * 1. config file at ~/.orqlaude/telegram.json exists + parses + has a
7
+ * bot token + has at least one whitelist entry → "configured"
8
+ * 2. notifier cursor at <project>/.orqlaude/telegram-cursor.json exists
9
+ * and has initialized=true → "started"
10
+ * 3. notifier cursor's last-write mtime is fresh (< 30s ago) → "active"
11
+ *
12
+ * We don't try to confirm Telegram's API is reachable — that'd require an
13
+ * extra HTTP call per ping. The three-step check covers the realistic
14
+ * failure modes (token missing, bot never started, bot crashed).
15
+ */
16
+ export type TgStatus = "unconfigured" | "configured" | "started" | "active" | "stale";
17
+ export interface TgStatusInfo {
18
+ status: TgStatus;
19
+ hasToken: boolean;
20
+ whitelistSize: number;
21
+ notifierLastTickMsAgo: number | null;
22
+ notes: string[];
23
+ }
24
+ export declare function probeTelegramStatus(stateDir: string): Promise<TgStatusInfo>;
@@ -0,0 +1,87 @@
1
+ import { promises as fs, existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ import os from "node:os";
4
+ const CONFIG_PATH = path.join(os.homedir(), ".orqlaude", "telegram.json");
5
+ export async function probeTelegramStatus(stateDir) {
6
+ const notes = [];
7
+ // 1. Config.
8
+ let hasToken = false;
9
+ let whitelistSize = 0;
10
+ if (!existsSync(CONFIG_PATH)) {
11
+ return {
12
+ status: "unconfigured",
13
+ hasToken: false,
14
+ whitelistSize: 0,
15
+ notifierLastTickMsAgo: null,
16
+ notes: [`No Telegram config at ${CONFIG_PATH}. Run \`orql tg setup\` first.`],
17
+ };
18
+ }
19
+ try {
20
+ const raw = await fs.readFile(CONFIG_PATH, "utf8");
21
+ const cfg = JSON.parse(raw);
22
+ hasToken = Boolean(cfg.botToken && cfg.botToken.length > 10);
23
+ whitelistSize = Array.isArray(cfg.whitelist) ? cfg.whitelist.length : 0;
24
+ }
25
+ catch (err) {
26
+ return {
27
+ status: "unconfigured",
28
+ hasToken: false,
29
+ whitelistSize: 0,
30
+ notifierLastTickMsAgo: null,
31
+ notes: [`Telegram config exists but couldn't be parsed: ${err.message}`],
32
+ };
33
+ }
34
+ if (!hasToken) {
35
+ return { status: "unconfigured", hasToken: false, whitelistSize, notifierLastTickMsAgo: null, notes: ["Token missing in config; run `orql tg setup`."] };
36
+ }
37
+ if (whitelistSize === 0) {
38
+ notes.push("Whitelist is empty — no one will receive notifications. Run `orql tg whitelist <user_id> --owner`.");
39
+ }
40
+ // 2. Notifier cursor existence (started?).
41
+ const cursorPath = path.join(stateDir, "telegram-cursor.json");
42
+ if (!existsSync(cursorPath)) {
43
+ return {
44
+ status: "configured",
45
+ hasToken,
46
+ whitelistSize,
47
+ notifierLastTickMsAgo: null,
48
+ notes: [...notes, `Config OK but the bot hasn't started yet — run \`orql tg start\` in the project root.`],
49
+ };
50
+ }
51
+ let initialized = false;
52
+ let lastTickMsAgo = null;
53
+ try {
54
+ const raw = await fs.readFile(cursorPath, "utf8");
55
+ const cursor = JSON.parse(raw);
56
+ initialized = Boolean(cursor.initialized);
57
+ const stat = await fs.stat(cursorPath);
58
+ lastTickMsAgo = Date.now() - stat.mtimeMs;
59
+ }
60
+ catch {
61
+ /* unreadable; treat as just-started */
62
+ }
63
+ if (!initialized) {
64
+ return { status: "started", hasToken, whitelistSize, notifierLastTickMsAgo: lastTickMsAgo, notes: [...notes, "Bot started but not yet initialized."] };
65
+ }
66
+ // 3. Activity check.
67
+ if (lastTickMsAgo !== null && lastTickMsAgo > 30_000) {
68
+ return {
69
+ status: "stale",
70
+ hasToken,
71
+ whitelistSize,
72
+ notifierLastTickMsAgo: lastTickMsAgo,
73
+ notes: [
74
+ ...notes,
75
+ `Notifier cursor hasn't ticked in ${Math.round(lastTickMsAgo / 1000)}s. The bot process may have died — restart with \`orql tg start\`.`,
76
+ ],
77
+ };
78
+ }
79
+ return {
80
+ status: "active",
81
+ hasToken,
82
+ whitelistSize,
83
+ notifierLastTickMsAgo: lastTickMsAgo,
84
+ notes,
85
+ };
86
+ }
87
+ //# sourceMappingURL=telegram_status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram_status.js","sourceRoot":"","sources":["../../src/lib/telegram_status.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -23,7 +23,7 @@ const store = new StateStore(stateDir);
23
23
  const audit = new AuditLog(stateDir);
24
24
  const server = new McpServer({
25
25
  name: "orqlaude",
26
- version: "0.5.2",
26
+ version: "0.5.5",
27
27
  });
28
28
  registerPing(server);
29
29
  registerPlanning(server, store, audit);