@damian87/omp 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/src/cli.js +125 -4
  2. package/dist/src/cli.js.map +1 -1
  3. package/dist/src/commands/comms.d.ts +2 -0
  4. package/dist/src/commands/comms.js +110 -0
  5. package/dist/src/commands/comms.js.map +1 -0
  6. package/dist/src/commands/council.d.ts +2 -0
  7. package/dist/src/commands/council.js +77 -0
  8. package/dist/src/commands/council.js.map +1 -0
  9. package/dist/src/commands/env.d.ts +2 -0
  10. package/dist/src/commands/env.js +95 -0
  11. package/dist/src/commands/env.js.map +1 -0
  12. package/dist/src/commands/gateway.d.ts +3 -0
  13. package/dist/src/commands/gateway.js +129 -0
  14. package/dist/src/commands/gateway.js.map +1 -0
  15. package/dist/src/commands/memory.d.ts +7 -0
  16. package/dist/src/commands/memory.js +202 -0
  17. package/dist/src/commands/memory.js.map +1 -0
  18. package/dist/src/commands/mode.d.ts +4 -0
  19. package/dist/src/commands/mode.js +119 -0
  20. package/dist/src/commands/mode.js.map +1 -0
  21. package/dist/src/commands/schedule.d.ts +2 -0
  22. package/dist/src/commands/schedule.js +91 -0
  23. package/dist/src/commands/schedule.js.map +1 -0
  24. package/dist/src/commands/team.d.ts +2 -0
  25. package/dist/src/commands/team.js +146 -0
  26. package/dist/src/commands/team.js.map +1 -0
  27. package/dist/src/commands/utils.d.ts +13 -0
  28. package/dist/src/commands/utils.js +68 -0
  29. package/dist/src/commands/utils.js.map +1 -0
  30. package/dist/src/goal.js +6 -8
  31. package/dist/src/goal.js.map +1 -1
  32. package/dist/src/instructions-memory.js +26 -3
  33. package/dist/src/instructions-memory.js.map +1 -1
  34. package/dist/src/memory-review/apply.d.ts +7 -0
  35. package/dist/src/memory-review/apply.js +75 -0
  36. package/dist/src/memory-review/apply.js.map +1 -0
  37. package/dist/src/memory-review/config.d.ts +22 -0
  38. package/dist/src/memory-review/config.js +54 -0
  39. package/dist/src/memory-review/config.js.map +1 -0
  40. package/dist/src/memory-review/guard.d.ts +5 -0
  41. package/dist/src/memory-review/guard.js +37 -0
  42. package/dist/src/memory-review/guard.js.map +1 -0
  43. package/dist/src/memory-review/index.d.ts +17 -0
  44. package/dist/src/memory-review/index.js +87 -0
  45. package/dist/src/memory-review/index.js.map +1 -0
  46. package/dist/src/memory-review/prompt.d.ts +18 -0
  47. package/dist/src/memory-review/prompt.js +89 -0
  48. package/dist/src/memory-review/prompt.js.map +1 -0
  49. package/dist/src/memory-review/spawn.d.ts +2 -0
  50. package/dist/src/memory-review/spawn.js +51 -0
  51. package/dist/src/memory-review/spawn.js.map +1 -0
  52. package/dist/src/memory-review/transcript.d.ts +24 -0
  53. package/dist/src/memory-review/transcript.js +212 -0
  54. package/dist/src/memory-review/transcript.js.map +1 -0
  55. package/dist/src/memory-review/trigger.d.ts +21 -0
  56. package/dist/src/memory-review/trigger.js +27 -0
  57. package/dist/src/memory-review/trigger.js.map +1 -0
  58. package/dist/src/project-memory.d.ts +9 -0
  59. package/dist/src/project-memory.js +72 -1
  60. package/dist/src/project-memory.js.map +1 -1
  61. package/dist/src/state.js +25 -37
  62. package/dist/src/state.js.map +1 -1
  63. package/dist/src/utils/fs.d.ts +14 -0
  64. package/dist/src/utils/fs.js +32 -0
  65. package/dist/src/utils/fs.js.map +1 -0
  66. package/dist/src/utils/paths.d.ts +14 -0
  67. package/dist/src/utils/paths.js +21 -0
  68. package/dist/src/utils/paths.js.map +1 -0
  69. package/docs/memory-mode.md +94 -0
  70. package/package.json +1 -1
  71. package/plugin.json +1 -1
  72. package/scripts/lib/memory-review-trigger.mjs +59 -0
  73. package/scripts/lib/pending-directives.mjs +36 -0
  74. package/scripts/session-end.mjs +8 -0
  75. package/scripts/session-start.mjs +4 -0
@@ -0,0 +1,110 @@
1
+ import { flagValue, hasFlag, parsePositiveIntFlag } from "./utils.js";
2
+ export async function handleComms(argv) {
3
+ const [, command] = argv;
4
+ const json = hasFlag(argv, "--json");
5
+ const { resolveSession } = await import("../comms/resolve-session.js");
6
+ // `--session` present but with a missing/empty/flag-like value must fail loud,
7
+ // never silently fall through to env/discovery and target an unintended session.
8
+ const flagSession = flagValue(argv, "--session");
9
+ if (hasFlag(argv, "--session") &&
10
+ (flagSession === undefined || flagSession === "" || flagSession.startsWith("-"))) {
11
+ return { ok: false, exitCode: 1, message: "invalid or missing --session value" };
12
+ }
13
+ const resolved = resolveSession({
14
+ flag: flagSession,
15
+ env: process.env.COPILOT_TMUX_SESSION,
16
+ });
17
+ if (!resolved.ok) {
18
+ return json
19
+ ? {
20
+ ok: false,
21
+ exitCode: 1,
22
+ output: { ok: false, error: resolved.error, candidates: resolved.candidates },
23
+ }
24
+ : { ok: false, exitCode: 1, message: resolved.error };
25
+ }
26
+ const session = resolved.session;
27
+ const sessionSource = resolved.source;
28
+ // Guard against a --session value that looks like a flag (e.g. --session --foo).
29
+ if (sessionSource === "flag" && session.startsWith("-")) {
30
+ return { ok: false, exitCode: 1, message: `invalid --session name: ${session}` };
31
+ }
32
+ const { commsStatus, commsSend, commsRecv, commsAsk } = await import("../comms/index.js");
33
+ if (command === "status") {
34
+ const r = await commsStatus(session);
35
+ return json
36
+ ? { ok: r.ok, output: { ...r, source: sessionSource } }
37
+ : {
38
+ ok: r.ok,
39
+ message: `session=${session} source=${sessionSource} on=${r.exists} online=${r.online} ready=${r.ready} busy=${r.busy}`,
40
+ };
41
+ }
42
+ if (command === "send") {
43
+ const text = flagValue(argv, "--text");
44
+ if (!text) {
45
+ return { ok: false, exitCode: 1, message: 'comms send requires --text "<prompt>"' };
46
+ }
47
+ const r = await commsSend(session, text, {}, { force: hasFlag(argv, "--force") });
48
+ return json
49
+ ? { ok: r.ok, exitCode: r.ok ? 0 : 1, output: r }
50
+ : {
51
+ ok: r.ok,
52
+ exitCode: r.ok ? 0 : 1,
53
+ message: r.ok ? `sent to ${session}` : `send failed: ${r.error}`,
54
+ };
55
+ }
56
+ if (command === "recv") {
57
+ let lines;
58
+ let timeoutMs;
59
+ try {
60
+ lines = parsePositiveIntFlag(flagValue(argv, "--lines"), "--lines");
61
+ timeoutMs = parsePositiveIntFlag(flagValue(argv, "--timeout"), "--timeout");
62
+ }
63
+ catch (err) {
64
+ return { ok: false, exitCode: 1, message: String(err instanceof Error ? err.message : err) };
65
+ }
66
+ const r = await commsRecv(session, {}, { wait: hasFlag(argv, "--wait"), lines, timeoutMs });
67
+ if (json) {
68
+ return { ok: r.ok && !r.timedOut, exitCode: r.ok && !r.timedOut ? 0 : 1, output: r };
69
+ }
70
+ if (!r.ok) {
71
+ return { ok: false, exitCode: 1, message: `recv failed: ${r.error}` };
72
+ }
73
+ if (r.timedOut) {
74
+ return { ok: false, exitCode: 1, message: `recv timed out waiting for copilot\n${r.text ?? ""}` };
75
+ }
76
+ return { ok: true, exitCode: 0, message: r.text ?? "" };
77
+ }
78
+ if (command === "ask") {
79
+ const text = flagValue(argv, "--text");
80
+ if (!text) {
81
+ return { ok: false, exitCode: 1, message: 'comms ask requires --text "<prompt>"' };
82
+ }
83
+ let lines;
84
+ let timeoutMs;
85
+ try {
86
+ lines = parsePositiveIntFlag(flagValue(argv, "--lines"), "--lines");
87
+ timeoutMs = parsePositiveIntFlag(flagValue(argv, "--timeout"), "--timeout");
88
+ }
89
+ catch (err) {
90
+ return { ok: false, exitCode: 1, message: String(err instanceof Error ? err.message : err) };
91
+ }
92
+ const r = await commsAsk(session, text, {}, { force: hasFlag(argv, "--force"), lines, timeoutMs });
93
+ if (json) {
94
+ return { ok: r.ok && !r.timedOut, exitCode: r.ok && !r.timedOut ? 0 : 1, output: r };
95
+ }
96
+ if (!r.ok) {
97
+ return { ok: false, exitCode: 1, message: `ask failed: ${r.error}` };
98
+ }
99
+ if (r.timedOut) {
100
+ return { ok: false, exitCode: 1, message: `ask timed out waiting for copilot\n${r.text ?? ""}` };
101
+ }
102
+ return { ok: true, exitCode: 0, message: r.text ?? "" };
103
+ }
104
+ return {
105
+ ok: false,
106
+ exitCode: 1,
107
+ message: 'Unknown comms subcommand. Try: comms status | send --text "<prompt>" | recv [--wait] | ask --text "<prompt>"',
108
+ };
109
+ }
110
+ //# sourceMappingURL=comms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comms.js","sourceRoot":"","sources":["../../../src/commands/comms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CliResult } from "./types.js";
2
+ export declare function handleCouncil(argv: string[]): Promise<CliResult>;
@@ -0,0 +1,77 @@
1
+ import { flagValue, hasFlag, parseModelsFlag, parsePositiveIntFlag, readFlagOrFile } from "./utils.js";
2
+ export async function handleCouncil(argv) {
3
+ const json = hasFlag(argv, "--json");
4
+ const question = argv[1] && !argv[1].startsWith("--") ? argv[1] : undefined;
5
+ if (!question) {
6
+ return { ok: false, exitCode: 1, message: 'council requires a question: omp council "<question>" [flags]' };
7
+ }
8
+ let members;
9
+ try {
10
+ const modelsFlag = flagValue(argv, "--models");
11
+ members = modelsFlag ? parseModelsFlag(modelsFlag) : undefined;
12
+ }
13
+ catch (err) {
14
+ return { ok: false, exitCode: 1, message: `Invalid --models: ${String(err)}` };
15
+ }
16
+ const context = await readFlagOrFile(flagValue(argv, "--context"));
17
+ const rubric = await readFlagOrFile(flagValue(argv, "--rubric"));
18
+ let perMemberTimeoutMs;
19
+ let synthTimeoutMs;
20
+ let minSurvivors;
21
+ let maxConcurrency;
22
+ try {
23
+ perMemberTimeoutMs = parsePositiveIntFlag(flagValue(argv, "--timeout"), "--timeout");
24
+ synthTimeoutMs = parsePositiveIntFlag(flagValue(argv, "--synth-timeout"), "--synth-timeout");
25
+ minSurvivors = parsePositiveIntFlag(flagValue(argv, "--min-survivors"), "--min-survivors");
26
+ maxConcurrency = parsePositiveIntFlag(flagValue(argv, "--max-concurrency"), "--max-concurrency");
27
+ }
28
+ catch (err) {
29
+ return { ok: false, exitCode: 1, message: String(err instanceof Error ? err.message : err) };
30
+ }
31
+ // Only set probe when the flag is present, so `council.probe` from config
32
+ // takes effect (precedence: spec.probe ?? config.probe ?? false).
33
+ const probe = hasFlag(argv, "--probe") ? true : undefined;
34
+ const { runCouncilWithDefaults } = await import("../council/index.js");
35
+ const result = await runCouncilWithDefaults({
36
+ question,
37
+ context,
38
+ rubric,
39
+ rolePack: flagValue(argv, "--role-pack"),
40
+ members,
41
+ synthesizerModel: flagValue(argv, "--synth"),
42
+ probe,
43
+ perMemberTimeoutMs,
44
+ synthTimeoutMs,
45
+ minSurvivors,
46
+ maxConcurrency,
47
+ tmpDir: flagValue(argv, "--tmp-dir"),
48
+ }, {
49
+ cwd: flagValue(argv, "--root") ?? process.cwd(),
50
+ bin: flagValue(argv, "--bin"),
51
+ onProgress: json ? undefined : (msg) => process.stderr.write(`${msg}\n`),
52
+ });
53
+ if (json) {
54
+ return { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result };
55
+ }
56
+ const lines = [];
57
+ if (result.ok && result.synth) {
58
+ lines.push(`Verdict: ${result.synth.verdict}`);
59
+ lines.push(`Confidence: ${result.synth.confidence}`);
60
+ lines.push(`Rationale: ${result.synth.rationale}`);
61
+ if (result.synth.minority_report) {
62
+ lines.push(`Minority report: ${result.synth.minority_report}`);
63
+ }
64
+ lines.push(`Members: ${result.survivors} survived, ${result.dropped} dropped`);
65
+ }
66
+ else {
67
+ lines.push(`Council failed: ${result.error ?? "unknown error"}`);
68
+ }
69
+ for (const m of result.members) {
70
+ if (m.status !== "ok") {
71
+ lines.push(` - dropped ${m.spec.model} (${m.spec.role}): ${m.status} — ${m.dropReason ?? ""}`);
72
+ }
73
+ }
74
+ lines.push(`Artifacts: ${result.tmpDir}`);
75
+ return { ok: result.ok, exitCode: result.ok ? 0 : 1, message: lines.join("\n") };
76
+ }
77
+ //# sourceMappingURL=council.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"council.js","sourceRoot":"","sources":["../../../src/commands/council.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CliResult } from "./types.js";
2
+ export declare function handleEnv(argv: string[]): Promise<CliResult>;
@@ -0,0 +1,95 @@
1
+ import { flagValue, hasFlag } from "./utils.js";
2
+ export async function handleEnv(argv) {
3
+ const [, command] = argv;
4
+ const json = hasFlag(argv, "--json");
5
+ if (command !== "init") {
6
+ return {
7
+ ok: false,
8
+ exitCode: 1,
9
+ message: "Unknown env subcommand. Try: env init [--force] [--bot-token x] [--app-token x]",
10
+ };
11
+ }
12
+ const { runEnvInit } = await import("../env/init.js");
13
+ const readline = await import("node:readline/promises");
14
+ // Preferred non-interactive path: env vars. Putting secrets in argv leaks
15
+ // them to shell history, ps output, and CI logs — so we read the safe
16
+ // input from env vars first, then fall back to flags (with a warning).
17
+ const botEnv = process.env.OMP_INIT_BOT_TOKEN;
18
+ const appEnv = process.env.OMP_INIT_APP_TOKEN;
19
+ const sessionEnv = process.env.OMP_INIT_SESSION;
20
+ const usersEnv = process.env.OMP_INIT_USERS;
21
+ const homeChannelEnv = process.env.OMP_INIT_HOME_CHANNEL;
22
+ const botFlag = flagValue(argv, "--bot-token");
23
+ const appFlag = flagValue(argv, "--app-token");
24
+ const sessionFlag = flagValue(argv, "--session");
25
+ const usersFlag = flagValue(argv, "--users");
26
+ const homeChannelFlag = flagValue(argv, "--home-channel");
27
+ if ((botFlag !== undefined || appFlag !== undefined) && process.env.OMP_INIT_NO_WARN !== "1") {
28
+ console.error("warning: --bot-token/--app-token leak via shell history and `ps`. " +
29
+ "Prefer OMP_INIT_BOT_TOKEN / OMP_INIT_APP_TOKEN env vars (set OMP_INIT_NO_WARN=1 to silence).");
30
+ }
31
+ const botToken = botEnv ?? botFlag;
32
+ const appToken = appEnv ?? appFlag;
33
+ const session = sessionEnv ?? sessionFlag;
34
+ const users = usersEnv ?? usersFlag;
35
+ const homeChannel = homeChannelEnv ?? homeChannelFlag;
36
+ // Non-interactive when stdin isn't a TTY OR when any answer is already
37
+ // supplied (via env or flag). Partial answers are allowed; missing required
38
+ // ones will be rejected by runEnvInit's validator.
39
+ const anyAnswer = botToken !== undefined ||
40
+ appToken !== undefined ||
41
+ session !== undefined ||
42
+ users !== undefined ||
43
+ homeChannel !== undefined;
44
+ const force = hasFlag(argv, "--force");
45
+ let result;
46
+ if (anyAnswer || !process.stdin.isTTY) {
47
+ result = await runEnvInit({
48
+ io: {
49
+ // In non-interactive / --json mode we still must not corrupt stdout
50
+ // with diagnostic prints. Route everything but the JSON result to
51
+ // stderr so callers can pipe stdout safely.
52
+ print: (line) => (json ? console.error(line) : console.log(line)),
53
+ warn: (line) => console.error(line),
54
+ ask: async () => undefined,
55
+ },
56
+ force,
57
+ answers: {
58
+ slackBotToken: botToken ?? "",
59
+ slackAppToken: appToken ?? "",
60
+ copilotTmuxSession: session ?? "",
61
+ slackAllowedUsers: users ?? "",
62
+ slackHomeChannel: homeChannel ?? "",
63
+ },
64
+ });
65
+ }
66
+ else {
67
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
68
+ try {
69
+ result = await runEnvInit({
70
+ io: {
71
+ print: (line) => console.log(line),
72
+ warn: (line) => console.error(line),
73
+ ask: (prompt) => rl.question(prompt),
74
+ },
75
+ force,
76
+ });
77
+ }
78
+ finally {
79
+ rl.close();
80
+ }
81
+ }
82
+ if (json) {
83
+ return {
84
+ ok: result.ok,
85
+ exitCode: result.ok ? 0 : 1,
86
+ output: { ok: result.ok, path: result.path, reason: result.reason },
87
+ };
88
+ }
89
+ return {
90
+ ok: result.ok,
91
+ exitCode: result.ok ? 0 : 1,
92
+ message: result.ok ? `wrote ${result.path}` : (result.reason ?? "env init failed"),
93
+ };
94
+ }
95
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/commands/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliResult } from "./types.js";
2
+ export declare function handleGateway(argv: string[]): Promise<CliResult>;
3
+ export declare function handleSlack(argv: string[]): Promise<CliResult>;
@@ -0,0 +1,129 @@
1
+ import { flagValue, hasFlag } from "./utils.js";
2
+ export async function handleGateway(argv) {
3
+ const [, command] = argv;
4
+ const json = hasFlag(argv, "--json");
5
+ const { buildConnectors, KNOWN_CONNECTORS } = await import("../gateway/registry.js");
6
+ const { runGateway, getGatewayStatus, parseOnlyFlag } = await import("../gateway/runtime.js");
7
+ const only = parseOnlyFlag(flagValue(argv, "--only"));
8
+ if (only) {
9
+ const unknown = only.filter((n) => !KNOWN_CONNECTORS.includes(n));
10
+ if (unknown.length > 0) {
11
+ return {
12
+ ok: false,
13
+ exitCode: 1,
14
+ message: `unknown connector(s): ${unknown.join(", ")} — known: ${KNOWN_CONNECTORS.join(", ")}`,
15
+ };
16
+ }
17
+ }
18
+ if (command === "serve") {
19
+ const built = buildConnectors(only);
20
+ if (built.connectors.length === 0) {
21
+ const reason = built.warnings.length > 0
22
+ ? built.warnings.join("; ")
23
+ : "no connectors configured — set SLACK_BOT_TOKEN+SLACK_APP_TOKEN or pass --only <name>";
24
+ return { ok: false, exitCode: 1, message: reason };
25
+ }
26
+ try {
27
+ await runGateway({ connectors: built.connectors });
28
+ }
29
+ catch (err) {
30
+ return {
31
+ ok: false,
32
+ exitCode: 1,
33
+ message: `gateway failed: ${err instanceof Error ? err.message : String(err)}`,
34
+ };
35
+ }
36
+ return { ok: true, message: "gateway stopped" };
37
+ }
38
+ if (command === "status" || command === "doctor") {
39
+ const built = buildConnectors(only);
40
+ const rows = built.doctors.map((d) => {
41
+ const s = d.doctor();
42
+ return { name: d.name, ready: s.ready, detail: s.detail };
43
+ });
44
+ const ready = rows.length > 0 && rows.every((r) => r.ready);
45
+ if (json) {
46
+ return {
47
+ ok: ready,
48
+ exitCode: ready ? 0 : 1,
49
+ output: { ready, connectors: rows, warnings: built.warnings },
50
+ };
51
+ }
52
+ const lines = [
53
+ `ready=${ready}`,
54
+ ...rows.map((r) => ` ${r.name}: ready=${r.ready}${r.detail ? ` (${r.detail})` : ""}`),
55
+ ...built.warnings.map((w) => ` warning: ${w}`),
56
+ ];
57
+ return { ok: ready, exitCode: ready ? 0 : 1, message: lines.join("\n") };
58
+ }
59
+ if (command === "notify") {
60
+ const text = flagValue(argv, "--text");
61
+ if (!text || !text.trim()) {
62
+ return { ok: false, exitCode: 1, message: 'gateway notify requires --text "<message>"' };
63
+ }
64
+ const target = flagValue(argv, "--target");
65
+ const threadTs = flagValue(argv, "--thread-ts");
66
+ const { notify } = await import("../gateway/notify.js");
67
+ const result = await notify({ text, target, threadTs });
68
+ if (json) {
69
+ return {
70
+ ok: result.ok,
71
+ exitCode: result.ok ? 0 : 1,
72
+ output: result,
73
+ };
74
+ }
75
+ return {
76
+ ok: result.ok,
77
+ exitCode: result.ok ? 0 : 1,
78
+ message: result.ok
79
+ ? `posted to ${result.channel} (ts=${result.ts}${result.openedIm ? ", opened IM" : ""})`
80
+ : `notify failed [${result.code}]: ${result.reason}`,
81
+ };
82
+ }
83
+ // Silence the unused warning emitted when no command path is hit.
84
+ void getGatewayStatus;
85
+ return {
86
+ ok: false,
87
+ exitCode: 1,
88
+ message: "Unknown gateway subcommand. Try: gateway serve | status | doctor | notify --text \"...\"",
89
+ };
90
+ }
91
+ export async function handleSlack(argv) {
92
+ // Backwards-compatible alias: `omp slack <cmd>` forwards to the generalized
93
+ // gateway runtime (scoped to slack). `slack doctor --json` keeps its legacy
94
+ // flat output shape so existing scripts that parsed it don't break — see
95
+ // `src/cli.ts` pre-refactor at 5c08a88.
96
+ const [, command, ...rest] = argv;
97
+ const json = hasFlag(argv, "--json");
98
+ if (command === "serve") {
99
+ return await handleGateway(["gateway", "serve", "--only", "slack", ...rest]);
100
+ }
101
+ if (command === "doctor" || command === "status") {
102
+ const hasBot = !!process.env.SLACK_BOT_TOKEN;
103
+ const hasApp = !!process.env.SLACK_APP_TOKEN;
104
+ const { resolveSession } = await import("../comms/resolve-session.js");
105
+ const resolved = resolveSession({ env: process.env.COPILOT_TMUX_SESSION });
106
+ const startable = hasBot && hasApp;
107
+ const ready = startable && resolved.ok;
108
+ const output = {
109
+ botToken: hasBot,
110
+ appToken: hasApp,
111
+ copilotSession: resolved.ok ? resolved.session : null,
112
+ copilotError: resolved.ok ? undefined : resolved.error,
113
+ ready,
114
+ };
115
+ return json
116
+ ? { ok: startable, exitCode: startable ? 0 : 1, output }
117
+ : {
118
+ ok: startable,
119
+ exitCode: startable ? 0 : 1,
120
+ message: `bot_token=${hasBot} app_token=${hasApp} copilot_session=${output.copilotSession ?? `(none: ${output.copilotError ?? "unknown"})`} ready=${ready}`,
121
+ };
122
+ }
123
+ return {
124
+ ok: false,
125
+ exitCode: 1,
126
+ message: "Unknown slack subcommand. Try: slack serve | slack doctor",
127
+ };
128
+ }
129
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/commands/gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CliResult } from "./types.js";
2
+ export declare function handleGoal(argv: string[]): Promise<CliResult>;
3
+ export declare function handleMemory(argv: string[]): Promise<CliResult>;
4
+ export declare function handleDailyLog(argv: string[]): Promise<CliResult>;
5
+ export declare function handleState(argv: string[]): Promise<CliResult>;
6
+ export declare function handleProjectMemory(argv: string[]): Promise<CliResult>;
7
+ export declare function handleTrace(argv: string[]): Promise<CliResult>;