@synaplink/orqlaude 0.9.6 → 0.10.1

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 (63) hide show
  1. package/dist/__tests__/v010.test.d.ts +1 -0
  2. package/dist/__tests__/v010.test.js +270 -0
  3. package/dist/__tests__/v010.test.js.map +1 -0
  4. package/dist/__tests__/v0101.test.d.ts +1 -0
  5. package/dist/__tests__/v0101.test.js +133 -0
  6. package/dist/__tests__/v0101.test.js.map +1 -0
  7. package/dist/__tests__/v031.test.js +10 -6
  8. package/dist/__tests__/v031.test.js.map +1 -1
  9. package/dist/cli/autopilot.d.ts +11 -0
  10. package/dist/cli/autopilot.js +447 -0
  11. package/dist/cli/autopilot.js.map +1 -0
  12. package/dist/cli.js +12 -0
  13. package/dist/cli.js.map +1 -1
  14. package/dist/lib/auto_merge.d.ts +85 -0
  15. package/dist/lib/auto_merge.js +208 -0
  16. package/dist/lib/auto_merge.js.map +1 -0
  17. package/dist/lib/backlog.d.ts +78 -0
  18. package/dist/lib/backlog.js +133 -0
  19. package/dist/lib/backlog.js.map +1 -0
  20. package/dist/lib/guardrails.d.ts +72 -0
  21. package/dist/lib/guardrails.js +86 -0
  22. package/dist/lib/guardrails.js.map +1 -0
  23. package/dist/lib/memory.d.ts +111 -0
  24. package/dist/lib/memory.js +247 -0
  25. package/dist/lib/memory.js.map +1 -0
  26. package/dist/lib/orch_turn.d.ts +65 -0
  27. package/dist/lib/orch_turn.js +174 -0
  28. package/dist/lib/orch_turn.js.map +1 -0
  29. package/dist/lib/retry.d.ts +59 -0
  30. package/dist/lib/retry.js +149 -0
  31. package/dist/lib/retry.js.map +1 -0
  32. package/dist/lib/templates.d.ts +59 -0
  33. package/dist/lib/templates.js +136 -0
  34. package/dist/lib/templates.js.map +1 -0
  35. package/dist/lib/tg_classifier.d.ts +93 -0
  36. package/dist/lib/tg_classifier.js +99 -0
  37. package/dist/lib/tg_classifier.js.map +1 -0
  38. package/dist/lib/version.d.ts +1 -1
  39. package/dist/lib/version.js +1 -1
  40. package/dist/lib/version.js.map +1 -1
  41. package/dist/server.js +11 -0
  42. package/dist/server.js.map +1 -1
  43. package/dist/telegram/api.d.ts +14 -0
  44. package/dist/telegram/api.js +6 -0
  45. package/dist/telegram/api.js.map +1 -1
  46. package/dist/telegram/commands.d.ts +12 -14
  47. package/dist/telegram/commands.js +141 -82
  48. package/dist/telegram/commands.js.map +1 -1
  49. package/dist/telegram/notifier.d.ts +3 -3
  50. package/dist/telegram/notifier.js +79 -97
  51. package/dist/telegram/notifier.js.map +1 -1
  52. package/dist/tools/backlog.d.ts +4 -0
  53. package/dist/tools/backlog.js +166 -0
  54. package/dist/tools/backlog.js.map +1 -0
  55. package/dist/tools/memory.d.ts +4 -0
  56. package/dist/tools/memory.js +115 -0
  57. package/dist/tools/memory.js.map +1 -0
  58. package/dist/tools/templates.d.ts +9 -0
  59. package/dist/tools/templates.js +99 -0
  60. package/dist/tools/templates.js.map +1 -0
  61. package/dist/tools/userio.js +122 -1
  62. package/dist/tools/userio.js.map +1 -1
  63. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,270 @@
1
+ import { test } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { promises as fs } from "node:fs";
4
+ import path from "node:path";
5
+ import os from "node:os";
6
+ import { MemoryStore } from "../lib/memory.js";
7
+ import { BacklogStore } from "../lib/backlog.js";
8
+ import { GuardrailStore, DEFAULT_GUARDRAILS } from "../lib/guardrails.js";
9
+ import { FLEET_TEMPLATES, findTemplate, suggestTemplates } from "../lib/templates.js";
10
+ import { parseSlashCommand } from "../lib/tg_classifier.js";
11
+ import { applyRule } from "../lib/auto_merge.js";
12
+ /**
13
+ * v0.10.0 — autopilot daemon, memory, backlog, templates, guardrails.
14
+ *
15
+ * These tests cover the pure-logic surface: store IO, glob matching,
16
+ * priority math, rule application. The daemon's tick loop and the
17
+ * `claude -p` spawn paths are not unit-tested here because they require
18
+ * a working claude binary in the environment.
19
+ */
20
+ async function tempDir(label) {
21
+ const base = await fs.mkdtemp(path.join(os.tmpdir(), `orqlaude-v010-${label}-`));
22
+ return base;
23
+ }
24
+ // ---- Memory --------------------------------------------------------------
25
+ test("v0.10.0: memory remember/recall round-trips", async () => {
26
+ const dir = await tempDir("memory");
27
+ const m = new MemoryStore(dir);
28
+ await m.remember({ category: "lore", key: "language", value: "Russian comments in CRM templates" });
29
+ const got = await m.recall({ category: "lore", key: "language" });
30
+ assert.equal(got.length, 1);
31
+ assert.equal(got[0].value, "Russian comments in CRM templates");
32
+ });
33
+ test("v0.10.0: memory supersedes older entries with same (category, key)", async () => {
34
+ const dir = await tempDir("memory-supersede");
35
+ const m = new MemoryStore(dir);
36
+ await m.remember({ category: "playbook", key: "test_runner", value: "pytest" });
37
+ await m.remember({ category: "playbook", key: "test_runner", value: "pytest -x --tb=short" });
38
+ const got = await m.recall({ category: "playbook", key: "test_runner" });
39
+ assert.equal(got.length, 1, "older entry should be superseded");
40
+ assert.equal(got[0].value, "pytest -x --tb=short");
41
+ });
42
+ test("v0.10.0: memory recall by scope glob picks overlapping entries", async () => {
43
+ const dir = await tempDir("memory-scope");
44
+ const m = new MemoryStore(dir);
45
+ await m.remember({
46
+ category: "atlas",
47
+ key: "kanban-dnd",
48
+ value: "Kanban dnd handlers in frontend/src/components/Kanban/",
49
+ scope: ["frontend/src/components/Kanban/**"],
50
+ });
51
+ await m.remember({
52
+ category: "atlas",
53
+ key: "deals-views",
54
+ value: "Deal endpoints in backend/deals/views.py",
55
+ scope: ["backend/deals/**"],
56
+ });
57
+ const got = await m.recall({ scope: ["frontend/src/components/Kanban/Board.tsx"] });
58
+ // Both entries match because globMatch is permissive in either direction.
59
+ // What we care about is that the kanban-specific one is in the results.
60
+ assert.ok(got.some((e) => e.key === "kanban-dnd"));
61
+ });
62
+ test("v0.10.0: pinned memory entries always come first", async () => {
63
+ const dir = await tempDir("memory-pinned");
64
+ const m = new MemoryStore(dir);
65
+ await m.remember({ category: "lore", key: "a", value: "older non-pinned" });
66
+ await m.remember({ category: "lore", key: "b", value: "pinned", pinned: true });
67
+ await m.remember({ category: "lore", key: "c", value: "newer non-pinned" });
68
+ const got = await m.recall({});
69
+ assert.equal(got[0].key, "b", "pinned must be first");
70
+ });
71
+ test("v0.10.0: composeContextBlock includes pinned + per-category entries", async () => {
72
+ const dir = await tempDir("memory-compose");
73
+ const m = new MemoryStore(dir);
74
+ await m.remember({ category: "lore", key: "name", value: "Matthew", pinned: true });
75
+ await m.remember({ category: "playbook", key: "i18n", value: "Russian comments" });
76
+ const block = await m.composeContextBlock({ maxChars: 1000 });
77
+ assert.ok(block.includes("Matthew"));
78
+ assert.ok(block.includes("Russian"));
79
+ assert.ok(block.toLowerCase().includes("pinned"));
80
+ });
81
+ test("v0.10.0: forget marks an entry as soft-deleted", async () => {
82
+ const dir = await tempDir("memory-forget");
83
+ const m = new MemoryStore(dir);
84
+ const e = await m.remember({ category: "ledger", key: "k", value: "v" });
85
+ const ok = await m.forget(e.id);
86
+ assert.equal(ok, true);
87
+ const after = await m.recall({});
88
+ assert.equal(after.length, 0);
89
+ });
90
+ // ---- Backlog -------------------------------------------------------------
91
+ test("v0.10.0: backlog enqueue + pickNext picks highest priority", async () => {
92
+ const dir = await tempDir("backlog");
93
+ const b = new BacklogStore(dir);
94
+ await b.enqueue({ title: "low", priority: 20, source: "user" });
95
+ await b.enqueue({ title: "high", priority: 80, source: "user" });
96
+ await b.enqueue({ title: "mid", priority: 50, source: "user" });
97
+ const picked = await b.pickNext();
98
+ assert.equal(picked?.title, "high");
99
+ });
100
+ test("v0.10.0: backlog respects dependency chain", async () => {
101
+ const dir = await tempDir("backlog-deps");
102
+ const b = new BacklogStore(dir);
103
+ const a = await b.enqueue({ title: "A", priority: 50, source: "user" });
104
+ await b.enqueue({ title: "B (depends on A)", priority: 90, source: "user", dependsOn: [a.id] });
105
+ // B is higher priority but depends on A, so A goes first.
106
+ let picked = await b.pickNext();
107
+ assert.equal(picked?.title, "A");
108
+ // Mark A done; now B is unblocked.
109
+ await b.update(a.id, (g) => {
110
+ g.status = "done";
111
+ });
112
+ picked = await b.pickNext();
113
+ assert.equal(picked?.title, "B (depends on A)");
114
+ });
115
+ test("v0.10.0: backlog deadline boost raises effective priority", async () => {
116
+ const dir = await tempDir("backlog-deadline");
117
+ const b = new BacklogStore(dir);
118
+ const tomorrow = Date.now() + 86_400_000; // 1 day out → ~+26 boost
119
+ await b.enqueue({ title: "no-deadline-high", priority: 60, source: "user" });
120
+ await b.enqueue({ title: "deadline-mid", priority: 50, deadlineAt: tomorrow, source: "user" });
121
+ const picked = await b.pickNext();
122
+ // deadline-mid effective priority should be 50 + ~26 = 76 > 60.
123
+ assert.equal(picked?.title, "deadline-mid");
124
+ });
125
+ // ---- Templates -----------------------------------------------------------
126
+ test("v0.10.0: fleet templates have unique ids", () => {
127
+ const ids = FLEET_TEMPLATES.map((t) => t.id);
128
+ const unique = new Set(ids);
129
+ assert.equal(unique.size, ids.length);
130
+ });
131
+ test("v0.10.0: every fleet template has at least one role", () => {
132
+ for (const t of FLEET_TEMPLATES) {
133
+ assert.ok(t.agentRoles.length >= 1, `template ${t.id} has no roles`);
134
+ }
135
+ });
136
+ test("v0.10.0: suggestTemplates ranks by tag overlap", () => {
137
+ const matches = suggestTemplates(["migration", "schema"]);
138
+ assert.ok(matches.length >= 1);
139
+ assert.equal(matches[0].id, "migration-only");
140
+ });
141
+ test("v0.10.0: findTemplate returns undefined for unknown id", () => {
142
+ assert.equal(findTemplate("does-not-exist"), undefined);
143
+ });
144
+ // ---- Guardrails ----------------------------------------------------------
145
+ test("v0.10.0: guardrails snapshot computes window+day pcts", async () => {
146
+ const dir = await tempDir("guardrails");
147
+ const g = new GuardrailStore(dir);
148
+ await g.record({ ts: Date.now(), billed: 500_000, cached: 1_000_000, source: "t" });
149
+ const snap = await g.snapshot(DEFAULT_GUARDRAILS);
150
+ assert.equal(snap.windowBilled, 500_000);
151
+ assert.ok(snap.windowPct < 0.1);
152
+ assert.equal(snap.level, "green");
153
+ });
154
+ test("v0.10.0: guardrails escalate to red at 95% window", async () => {
155
+ const dir = await tempDir("guardrails-red");
156
+ const g = new GuardrailStore(dir);
157
+ // 95% of 8M = 7.6M.
158
+ await g.record({ ts: Date.now(), billed: 7_600_000, cached: 0, source: "t" });
159
+ const snap = await g.snapshot(DEFAULT_GUARDRAILS);
160
+ assert.equal(snap.level, "red");
161
+ });
162
+ test("v0.10.0: guardrails trim events older than 48h", async () => {
163
+ const dir = await tempDir("guardrails-trim");
164
+ const g = new GuardrailStore(dir);
165
+ const oldTs = Date.now() - 50 * 60 * 60 * 1000; // 50h ago
166
+ await g.record({ ts: oldTs, billed: 999_999, cached: 0, source: "ancient" });
167
+ await g.record({ ts: Date.now(), billed: 100_000, cached: 0, source: "now" });
168
+ const win = await g.windowBilled(DEFAULT_GUARDRAILS.windowMs);
169
+ assert.equal(win, 100_000, "old event should have been trimmed");
170
+ });
171
+ // ---- Telegram classifier (parser only) -----------------------------------
172
+ test("v0.10.0: parseSlashCommand recognizes /now /queue /pause /resume", () => {
173
+ assert.deepEqual(parseSlashCommand("/now"), { cmd: "now" });
174
+ assert.deepEqual(parseSlashCommand("/queue"), { cmd: "queue" });
175
+ assert.deepEqual(parseSlashCommand("/pause"), { cmd: "pause" });
176
+ assert.deepEqual(parseSlashCommand("/resume"), { cmd: "resume" });
177
+ assert.deepEqual(parseSlashCommand("/morning"), { cmd: "morning" });
178
+ assert.deepEqual(parseSlashCommand("/pulse"), { cmd: "pulse" });
179
+ assert.deepEqual(parseSlashCommand("/budget"), { cmd: "budget" });
180
+ });
181
+ test("v0.10.0: parseSlashCommand /respond preserves shortId + text", () => {
182
+ const got = parseSlashCommand("/respond ab12cd34 yes, do it");
183
+ assert.deepEqual(got, { cmd: "respond", shortId: "ab12cd34", text: "yes, do it" });
184
+ });
185
+ test("v0.10.0: parseSlashCommand handles bot-mention suffix", () => {
186
+ // Telegram appends @botname in group chats.
187
+ assert.deepEqual(parseSlashCommand("/now@orqlaudebot"), { cmd: "now" });
188
+ });
189
+ test("v0.10.0: parseSlashCommand returns null for non-slash", () => {
190
+ assert.equal(parseSlashCommand("hello"), null);
191
+ assert.equal(parseSlashCommand(""), null);
192
+ });
193
+ // ---- Auto-merge rule engine ----------------------------------------------
194
+ function makePr(overrides = {}) {
195
+ return {
196
+ number: 1,
197
+ url: "https://github.com/x/y/pull/1",
198
+ state: "OPEN",
199
+ title: "t",
200
+ author: "a",
201
+ headBranch: "h",
202
+ baseBranch: "b",
203
+ additions: 100,
204
+ deletions: 50,
205
+ changedFiles: 5,
206
+ files: [{ path: "src/foo.ts", additions: 100, deletions: 50 }],
207
+ checksStatus: "success",
208
+ mergeable: true,
209
+ ...overrides,
210
+ };
211
+ }
212
+ function makeReview(overrides = {}) {
213
+ return {
214
+ verdict: "APPROVE",
215
+ blockers: [],
216
+ suggestions: [],
217
+ summary: "ok",
218
+ ...overrides,
219
+ };
220
+ }
221
+ test("v0.10.0: applyRule accepts a green PR with APPROVE", () => {
222
+ const pr = makePr();
223
+ const review = makeReview();
224
+ const d = applyRule(pr, review, { method: "squash", requireCi: true, requireReviewerApprove: true, maxLoc: 1500 });
225
+ assert.equal(d.ok, true);
226
+ assert.equal(d.violations.length, 0);
227
+ });
228
+ test("v0.10.0: applyRule rejects on BLOCKER verdict", () => {
229
+ const pr = makePr();
230
+ const review = makeReview({ verdict: "BLOCKER", blockers: ["data loss risk"] });
231
+ const d = applyRule(pr, review, { requireReviewerApprove: true });
232
+ assert.equal(d.ok, false);
233
+ assert.ok(d.violations.some((v) => v.toLowerCase().includes("blocker")));
234
+ });
235
+ test("v0.10.0: applyRule rejects on failing CI", () => {
236
+ const pr = makePr({ checksStatus: "failure" });
237
+ const d = applyRule(pr, makeReview(), { requireCi: true });
238
+ assert.equal(d.ok, false);
239
+ });
240
+ test("v0.10.0: applyRule rejects when maxLoc exceeded", () => {
241
+ const pr = makePr({ additions: 2000, deletions: 100 });
242
+ const d = applyRule(pr, makeReview(), { maxLoc: 1500 });
243
+ assert.equal(d.ok, false);
244
+ });
245
+ test("v0.10.0: applyRule blockOnMigrations stops migration-touching PRs", () => {
246
+ const pr = makePr({
247
+ files: [
248
+ { path: "backend/deals/migrations/0042_foo.py", additions: 50, deletions: 0 },
249
+ { path: "backend/deals/views.py", additions: 10, deletions: 0 },
250
+ ],
251
+ });
252
+ const d = applyRule(pr, makeReview(), { blockOnMigrations: true });
253
+ assert.equal(d.ok, false);
254
+ assert.ok(d.violations.some((v) => v.includes("migration")));
255
+ });
256
+ test("v0.10.0: applyRule blockOnPaths rejects matching files", () => {
257
+ const pr = makePr({
258
+ files: [{ path: "backend/settings.py", additions: 10, deletions: 0 }],
259
+ });
260
+ const d = applyRule(pr, makeReview(), { blockOnPaths: ["**/settings.py"] });
261
+ assert.equal(d.ok, false);
262
+ assert.ok(d.violations.some((v) => v.includes("settings.py")));
263
+ });
264
+ test("v0.10.0: applyRule rejects conflicting (mergeable=false) PRs", () => {
265
+ const pr = makePr({ mergeable: false });
266
+ const d = applyRule(pr, makeReview(), {});
267
+ assert.equal(d.ok, false);
268
+ assert.ok(d.violations.some((v) => v.toLowerCase().includes("conflict")));
269
+ });
270
+ //# sourceMappingURL=v010.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v010.test.js","sourceRoot":"","sources":["../../src/__tests__/v010.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,133 @@
1
+ import { test } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { promises as fs } from "node:fs";
4
+ import path from "node:path";
5
+ import os from "node:os";
6
+ import { StateStore } from "../lib/state.js";
7
+ import { escapeMd } from "../telegram/notifier.js";
8
+ /**
9
+ * v0.10.1 — Telegram plain-text + reply-to-message + blocking ask_user.
10
+ *
11
+ * The full blocking-poll lifecycle is tested in a separate integration test
12
+ * (requires running notifier + bot). These unit tests cover:
13
+ * • escapeMd is a no-op (we ship plain text now)
14
+ * • orphanResponseRequests is the right home for plan-less ask_user calls
15
+ * • reply-to-message routing logic: finding a request by telegramMessageId
16
+ */
17
+ async function tempDir(label) {
18
+ return fs.mkdtemp(path.join(os.tmpdir(), `orqlaude-v0101-${label}-`));
19
+ }
20
+ test("v0.10.1: escapeMd is a no-op (plain text shipping)", () => {
21
+ assert.equal(escapeMd("*bold* _ital_ `code` [link]"), "*bold* _ital_ `code` [link]");
22
+ assert.equal(escapeMd("plain"), "plain");
23
+ assert.equal(escapeMd(""), "");
24
+ });
25
+ test("v0.10.1: ask_user creates an orphanResponseRequest when plan_id omitted", async () => {
26
+ const dir = await tempDir("orphan");
27
+ const store = new StateStore(dir);
28
+ const id = "ask-user-test-id-12345678";
29
+ await store.update((state) => {
30
+ state.orphanResponseRequests = state.orphanResponseRequests ?? [];
31
+ state.orphanResponseRequests.push({
32
+ id,
33
+ shortId: id.slice(0, 8),
34
+ prompt: "test",
35
+ createdAt: Date.now(),
36
+ timeoutAt: Date.now() + 60_000,
37
+ delivered: false,
38
+ });
39
+ });
40
+ const found = await store.read((s) => (s.orphanResponseRequests ?? []).find((r) => r.id === id));
41
+ assert.ok(found);
42
+ assert.equal(found.prompt, "test");
43
+ });
44
+ test("v0.10.1: reply-to-message routes by telegramMessageId + chatId tuple", async () => {
45
+ const dir = await tempDir("reply-to");
46
+ const store = new StateStore(dir);
47
+ // Two requests sent to two different chats, same message_id by coincidence
48
+ // (Telegram message_ids are per-chat, not global).
49
+ await store.update((state) => {
50
+ state.orphanResponseRequests = state.orphanResponseRequests ?? [];
51
+ state.orphanResponseRequests.push({
52
+ id: "req-a",
53
+ shortId: "req-a",
54
+ prompt: "A",
55
+ createdAt: Date.now(),
56
+ timeoutAt: Date.now() + 60_000,
57
+ delivered: true,
58
+ telegramMessageId: 42,
59
+ telegramChatId: 111,
60
+ });
61
+ state.orphanResponseRequests.push({
62
+ id: "req-b",
63
+ shortId: "req-b",
64
+ prompt: "B",
65
+ createdAt: Date.now(),
66
+ timeoutAt: Date.now() + 60_000,
67
+ delivered: true,
68
+ telegramMessageId: 42, // same message_id ...
69
+ telegramChatId: 222, // ... but different chat
70
+ });
71
+ });
72
+ // Mimic the routing logic in tryHandleReplyToQuestion: match BOTH msgId AND chatId.
73
+ const matchA = await store.read((s) => (s.orphanResponseRequests ?? []).find((r) => r.telegramMessageId === 42 && r.telegramChatId === 111));
74
+ const matchB = await store.read((s) => (s.orphanResponseRequests ?? []).find((r) => r.telegramMessageId === 42 && r.telegramChatId === 222));
75
+ assert.equal(matchA?.id, "req-a");
76
+ assert.equal(matchB?.id, "req-b");
77
+ });
78
+ test("v0.10.1: writing a response sets responded_at and persists", async () => {
79
+ const dir = await tempDir("response");
80
+ const store = new StateStore(dir);
81
+ const id = "ask-write-test";
82
+ await store.update((state) => {
83
+ state.orphanResponseRequests = state.orphanResponseRequests ?? [];
84
+ state.orphanResponseRequests.push({
85
+ id,
86
+ shortId: id.slice(0, 8),
87
+ prompt: "x",
88
+ createdAt: Date.now(),
89
+ timeoutAt: Date.now() + 60_000,
90
+ delivered: false,
91
+ });
92
+ });
93
+ await store.update((state) => {
94
+ const req = (state.orphanResponseRequests ?? []).find((r) => r.id === id);
95
+ if (req) {
96
+ req.response = "the answer";
97
+ req.respondedAt = Date.now();
98
+ }
99
+ });
100
+ const after = await store.read((s) => (s.orphanResponseRequests ?? []).find((r) => r.id === id));
101
+ assert.equal(after?.response, "the answer");
102
+ assert.ok(after?.respondedAt && after.respondedAt > 0);
103
+ });
104
+ test("v0.10.1: cancelled requests short-circuit before answering", async () => {
105
+ const dir = await tempDir("cancelled");
106
+ const store = new StateStore(dir);
107
+ const id = "ask-cancel-test";
108
+ await store.update((state) => {
109
+ state.orphanResponseRequests = state.orphanResponseRequests ?? [];
110
+ state.orphanResponseRequests.push({
111
+ id,
112
+ shortId: id.slice(0, 8),
113
+ prompt: "x",
114
+ createdAt: Date.now(),
115
+ timeoutAt: Date.now() + 60_000,
116
+ delivered: false,
117
+ cancelled: true,
118
+ });
119
+ });
120
+ // Mimic the ask_user poll loop's check.
121
+ const result = await store.read((state) => {
122
+ const req = (state.orphanResponseRequests ?? []).find((r) => r.id === id);
123
+ if (!req)
124
+ return null;
125
+ if (req.cancelled)
126
+ return { kind: "cancelled" };
127
+ if (req.response !== undefined)
128
+ return { kind: "answered", response: req.response };
129
+ return null;
130
+ });
131
+ assert.deepEqual(result, { kind: "cancelled" });
132
+ });
133
+ //# sourceMappingURL=v0101.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v0101.test.js","sourceRoot":"","sources":["../../src/__tests__/v0101.test.ts"],"names":[],"mappings":"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"}
@@ -103,13 +103,17 @@ test("v1→v2 migration synthesizes tasks/notes/messages/claims when missing (CO
103
103
  assert.deepEqual(out.claims, []);
104
104
  assert.equal(out.budgetCapTokens, 4 * 25_000);
105
105
  });
106
- test("escapeMd backslashes Telegram MarkdownV1 special chars (BLOCKER from Phase 3)", () => {
107
- assert.equal(escapeMd("feature/foo_bar"), "feature/foo\\_bar");
108
- assert.equal(escapeMd("**bold**"), "\\*\\*bold\\*\\*");
106
+ test("escapeMd is a no-op in v0.10.1+ (we ship plain text now)", () => {
107
+ // v0.10.1 dropped Markdown from all Telegram sends — the parser was eating
108
+ // special chars (especially inside backticks, parens, and around hyphens)
109
+ // and silently failing the send. escapeMd remains exported as a no-op for
110
+ // back-compat with any third-party plugin that imports it.
111
+ assert.equal(escapeMd("feature/foo_bar"), "feature/foo_bar");
112
+ assert.equal(escapeMd("**bold**"), "**bold**");
109
113
  assert.equal(escapeMd("plain text"), "plain text");
110
- assert.equal(escapeMd("`code`"), "\\`code\\`");
111
- assert.equal(escapeMd("[link]"), "\\[link]");
112
- assert.equal(escapeMd("a_b*c`d[e"), "a\\_b\\*c\\`d\\[e");
114
+ assert.equal(escapeMd("`code`"), "`code`");
115
+ assert.equal(escapeMd("[link]"), "[link]");
116
+ assert.equal(escapeMd("a_b*c`d[e"), "a_b*c`d[e");
113
117
  });
114
118
  test("Telegram saveConfig writes with mode 0o600 atomically (BLOCKER from Phase 3)", async () => {
115
119
  // We can't easily mock the HOME-rooted CONFIG_PATH inside the module, so
@@ -1 +1 @@
1
- {"version":3,"file":"v031.test.js","sourceRoot":"","sources":["../../src/__tests__/v031.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"v031.test.js","sourceRoot":"","sources":["../../src/__tests__/v031.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface AutopilotOpts {
2
+ /** Foreground vs daemonized. */
3
+ foreground?: boolean;
4
+ /** Verbose logging. */
5
+ verbose?: boolean;
6
+ /** Override tick interval (ms). */
7
+ tickMs?: number;
8
+ }
9
+ export declare function runAutopilot(opts?: AutopilotOpts): Promise<number>;
10
+ export declare function cmdAutopilot(args: string[]): Promise<number>;
11
+ export {};