@damian87/omp 0.6.0 → 0.8.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/.github/skills/team/SKILL.md +82 -57
- package/.github/skills/team/scripts/team-launch.sh +140 -42
- package/README.md +31 -0
- package/catalog/skills-general.json +2 -2
- package/dist/src/cli.d.ts +1 -7
- package/dist/src/cli.js +355 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/registry.d.ts +3 -0
- package/dist/src/commands/registry.js +11 -0
- package/dist/src/commands/registry.js.map +1 -0
- package/dist/src/commands/suggest.d.ts +19 -0
- package/dist/src/commands/suggest.js +158 -0
- package/dist/src/commands/suggest.js.map +1 -0
- package/dist/src/commands/types.d.ts +16 -0
- package/dist/src/commands/types.js +2 -0
- package/dist/src/commands/types.js.map +1 -0
- package/dist/src/env/dotenv.d.ts +41 -0
- package/dist/src/env/dotenv.js +112 -0
- package/dist/src/env/dotenv.js.map +1 -0
- package/dist/src/env/init.d.ts +50 -0
- package/dist/src/env/init.js +276 -0
- package/dist/src/env/init.js.map +1 -0
- package/dist/src/gateway/connector.d.ts +37 -0
- package/dist/src/gateway/connector.js +12 -0
- package/dist/src/gateway/connector.js.map +1 -0
- package/dist/src/gateway/connectors/slack.d.ts +69 -0
- package/dist/src/gateway/connectors/slack.js +159 -0
- package/dist/src/gateway/connectors/slack.js.map +1 -0
- package/dist/src/gateway/registry.d.ts +29 -0
- package/dist/src/gateway/registry.js +37 -0
- package/dist/src/gateway/registry.js.map +1 -0
- package/dist/src/gateway/runtime.d.ts +58 -0
- package/dist/src/gateway/runtime.js +105 -0
- package/dist/src/gateway/runtime.js.map +1 -0
- package/dist/src/instructions-memory.js +8 -15
- package/dist/src/instructions-memory.js.map +1 -1
- package/dist/src/jira.js +2 -14
- package/dist/src/jira.js.map +1 -1
- package/dist/src/slack/config.d.ts +32 -0
- package/dist/src/slack/config.js +52 -0
- package/dist/src/slack/config.js.map +1 -0
- package/dist/src/slack/handler.d.ts +48 -0
- package/dist/src/slack/handler.js +68 -0
- package/dist/src/slack/handler.js.map +1 -0
- package/dist/src/slack/serve.d.ts +8 -0
- package/dist/src/slack/serve.js +7 -0
- package/dist/src/slack/serve.js.map +1 -0
- package/dist/src/team/index.d.ts +1 -0
- package/dist/src/team/index.js +1 -0
- package/dist/src/team/index.js.map +1 -1
- package/dist/src/team/pane-monitor.d.ts +39 -0
- package/dist/src/team/pane-monitor.js +128 -0
- package/dist/src/team/pane-monitor.js.map +1 -0
- package/dist/src/team/runtime.js +12 -1
- package/dist/src/team/runtime.js.map +1 -1
- package/dist/src/team/tmux.d.ts +13 -0
- package/dist/src/team/tmux.js +47 -0
- package/dist/src/team/tmux.js.map +1 -1
- package/docs/slack-setup.md +144 -0
- package/package.json +4 -2
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack bridge configuration. Reads tokens + policy from env (mirroring the
|
|
3
|
+
* omp env-config pattern), with optional overrides for tests/flags.
|
|
4
|
+
*
|
|
5
|
+
* Tokens (both required):
|
|
6
|
+
* - SLACK_BOT_TOKEN (xoxb-…) — bot user OAuth token
|
|
7
|
+
* - SLACK_APP_TOKEN (xapp-…) — app-level token with `connections:write` (Socket Mode)
|
|
8
|
+
*
|
|
9
|
+
* Policy (optional):
|
|
10
|
+
* - SLACK_ALLOWED_USERS csv of user IDs; `*` or unset/empty = allow everyone
|
|
11
|
+
* - SLACK_REQUIRE_MENTION "true"/"false" (default true) — require @mention in channels
|
|
12
|
+
* - COPILOT_TMUX_SESSION passthrough to comms session resolution
|
|
13
|
+
*/
|
|
14
|
+
export interface SlackConfig {
|
|
15
|
+
botToken: string;
|
|
16
|
+
appToken: string;
|
|
17
|
+
/** [] means allow all; ["*"] also means allow all. */
|
|
18
|
+
allowedUsers: string[];
|
|
19
|
+
/** require an @mention to respond in channels (DMs always respond). */
|
|
20
|
+
requireMention: boolean;
|
|
21
|
+
/** explicit Copilot tmux session name, if set. */
|
|
22
|
+
sessionEnv?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface SlackConfigOverrides {
|
|
25
|
+
botToken?: string;
|
|
26
|
+
appToken?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Load + validate Slack config. Throws a clear error if a token is missing.
|
|
30
|
+
* `env` defaults to process.env; tests can pass a custom map.
|
|
31
|
+
*/
|
|
32
|
+
export declare function loadSlackConfig(overrides?: SlackConfigOverrides, env?: NodeJS.ProcessEnv): SlackConfig;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack bridge configuration. Reads tokens + policy from env (mirroring the
|
|
3
|
+
* omp env-config pattern), with optional overrides for tests/flags.
|
|
4
|
+
*
|
|
5
|
+
* Tokens (both required):
|
|
6
|
+
* - SLACK_BOT_TOKEN (xoxb-…) — bot user OAuth token
|
|
7
|
+
* - SLACK_APP_TOKEN (xapp-…) — app-level token with `connections:write` (Socket Mode)
|
|
8
|
+
*
|
|
9
|
+
* Policy (optional):
|
|
10
|
+
* - SLACK_ALLOWED_USERS csv of user IDs; `*` or unset/empty = allow everyone
|
|
11
|
+
* - SLACK_REQUIRE_MENTION "true"/"false" (default true) — require @mention in channels
|
|
12
|
+
* - COPILOT_TMUX_SESSION passthrough to comms session resolution
|
|
13
|
+
*/
|
|
14
|
+
function parseBool(value, fallback) {
|
|
15
|
+
if (value === undefined || value === "")
|
|
16
|
+
return fallback;
|
|
17
|
+
return !["0", "false", "no", "off"].includes(value.trim().toLowerCase());
|
|
18
|
+
}
|
|
19
|
+
function parseCsv(value) {
|
|
20
|
+
return (value ?? "")
|
|
21
|
+
.split(",")
|
|
22
|
+
.map((s) => s.trim())
|
|
23
|
+
.filter((s) => s.length > 0);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Load + validate Slack config. Throws a clear error if a token is missing.
|
|
27
|
+
* `env` defaults to process.env; tests can pass a custom map.
|
|
28
|
+
*/
|
|
29
|
+
export function loadSlackConfig(overrides = {}, env = process.env) {
|
|
30
|
+
const botToken = (overrides.botToken ?? env.SLACK_BOT_TOKEN ?? "").trim();
|
|
31
|
+
const appToken = (overrides.appToken ?? env.SLACK_APP_TOKEN ?? "").trim();
|
|
32
|
+
if (!botToken) {
|
|
33
|
+
throw new Error("SLACK_BOT_TOKEN is required (xoxb-… bot token)");
|
|
34
|
+
}
|
|
35
|
+
if (!botToken.startsWith("xoxb-")) {
|
|
36
|
+
throw new Error("SLACK_BOT_TOKEN looks wrong — expected a bot token starting with 'xoxb-'");
|
|
37
|
+
}
|
|
38
|
+
if (!appToken) {
|
|
39
|
+
throw new Error("SLACK_APP_TOKEN is required (xapp-… app-level token with connections:write)");
|
|
40
|
+
}
|
|
41
|
+
if (!appToken.startsWith("xapp-")) {
|
|
42
|
+
throw new Error("SLACK_APP_TOKEN looks wrong — expected an app-level token starting with 'xapp-'");
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
botToken,
|
|
46
|
+
appToken,
|
|
47
|
+
allowedUsers: parseCsv(env.SLACK_ALLOWED_USERS),
|
|
48
|
+
requireMention: parseBool(env.SLACK_REQUIRE_MENTION, true),
|
|
49
|
+
sessionEnv: env.COPILOT_TMUX_SESSION,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/slack/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAkBH,SAAS,SAAS,CAAC,KAAyB,EAAE,QAAiB;IAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACzD,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,YAAkC,EAAE,EACpC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;IACD,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC/C,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;QAC1D,UAAU,EAAE,GAAG,CAAC,oBAAoB;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure, testable core of the Slack → Copilot bridge. NO Slack/Bolt import here
|
|
3
|
+
* so the decision logic can be unit-tested with injected fakes.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors a lean subset of Hermes' Slack behavioral contract:
|
|
6
|
+
* - DMs always respond; channels respond only on @mention (unless requireMention=false).
|
|
7
|
+
* - Unauthorized users (not in the allowlist) are silently ignored.
|
|
8
|
+
* - The bot's own `<@BOT>` mention is stripped from the text before forwarding.
|
|
9
|
+
* - Resolution / Copilot errors come back as friendly Slack replies (never silent failure
|
|
10
|
+
* of a request we accepted).
|
|
11
|
+
*/
|
|
12
|
+
import type { ResolveSessionResult } from "../comms/resolve-session.js";
|
|
13
|
+
import type { AskResult } from "../comms/index.js";
|
|
14
|
+
export interface SlackMessageInput {
|
|
15
|
+
text: string;
|
|
16
|
+
userId?: string;
|
|
17
|
+
channelType: "im" | "channel";
|
|
18
|
+
/** true when the bot was @mentioned (channel messages) */
|
|
19
|
+
isMention: boolean;
|
|
20
|
+
/** thread to reply in (event.thread_ts ?? event.ts) */
|
|
21
|
+
threadTs?: string;
|
|
22
|
+
/** bot's own user id, for stripping the mention token */
|
|
23
|
+
botUserId?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface SlackHandlerDeps {
|
|
26
|
+
resolve: (opts: {
|
|
27
|
+
flag?: string;
|
|
28
|
+
env?: string;
|
|
29
|
+
}) => ResolveSessionResult;
|
|
30
|
+
ask: (session: string, text: string) => Promise<AskResult>;
|
|
31
|
+
/** [] / undefined / ["*"] = allow all. */
|
|
32
|
+
allowedUsers?: string[] | null;
|
|
33
|
+
/** require @mention in channels (default true). */
|
|
34
|
+
requireMention?: boolean;
|
|
35
|
+
/** COPILOT_TMUX_SESSION passthrough for resolution. */
|
|
36
|
+
sessionEnv?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface SlackReply {
|
|
39
|
+
/** text to post back, or null to stay silent. */
|
|
40
|
+
reply: string | null;
|
|
41
|
+
/** thread to reply in. */
|
|
42
|
+
threadTs?: string;
|
|
43
|
+
}
|
|
44
|
+
/** Allowlist check: empty/unset or containing "*" = allow everyone. */
|
|
45
|
+
export declare function isUserAllowed(userId: string | undefined, allowed?: string[] | null): boolean;
|
|
46
|
+
/** Strip a `<@BOTID>` mention (and tidy whitespace) from message text. */
|
|
47
|
+
export declare function stripMention(text: string, botUserId?: string): string;
|
|
48
|
+
export declare function handleSlackMessage(input: SlackMessageInput, deps: SlackHandlerDeps): Promise<SlackReply>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
function errMsg(err) {
|
|
2
|
+
return err instanceof Error ? err.message : String(err);
|
|
3
|
+
}
|
|
4
|
+
/** Allowlist check: empty/unset or containing "*" = allow everyone. */
|
|
5
|
+
export function isUserAllowed(userId, allowed) {
|
|
6
|
+
if (!allowed || allowed.length === 0)
|
|
7
|
+
return true;
|
|
8
|
+
if (allowed.includes("*"))
|
|
9
|
+
return true;
|
|
10
|
+
return userId != null && allowed.includes(userId);
|
|
11
|
+
}
|
|
12
|
+
/** Strip a `<@BOTID>` mention (and tidy whitespace) from message text. */
|
|
13
|
+
export function stripMention(text, botUserId) {
|
|
14
|
+
let out = text ?? "";
|
|
15
|
+
if (botUserId) {
|
|
16
|
+
// Literal replace (no RegExp) — botUserId is external; avoid regex injection.
|
|
17
|
+
out = out.split(`<@${botUserId}>`).join(" ");
|
|
18
|
+
}
|
|
19
|
+
return out.replace(/\s+/g, " ").trim();
|
|
20
|
+
}
|
|
21
|
+
export async function handleSlackMessage(input, deps) {
|
|
22
|
+
const threadTs = input.threadTs;
|
|
23
|
+
// 1. Authorization — silently ignore non-allowlisted users.
|
|
24
|
+
if (!isUserAllowed(input.userId, deps.allowedUsers)) {
|
|
25
|
+
return { reply: null, threadTs };
|
|
26
|
+
}
|
|
27
|
+
// 2. Respond gate — DMs always; channels only on @mention (unless disabled).
|
|
28
|
+
const requireMention = deps.requireMention ?? true;
|
|
29
|
+
if (input.channelType === "channel" && requireMention && !input.isMention) {
|
|
30
|
+
return { reply: null, threadTs };
|
|
31
|
+
}
|
|
32
|
+
// 3. Clean the text.
|
|
33
|
+
const text = stripMention(input.text, input.botUserId);
|
|
34
|
+
if (!text) {
|
|
35
|
+
return { reply: null, threadTs };
|
|
36
|
+
}
|
|
37
|
+
// 4. Resolve the Copilot session. A request we accepted must never reject
|
|
38
|
+
// silently — turn thrown errors into a friendly reply.
|
|
39
|
+
let resolved;
|
|
40
|
+
try {
|
|
41
|
+
resolved = deps.resolve({ env: deps.sessionEnv });
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
return { reply: `:warning: could not resolve copilot session: ${errMsg(err)}`, threadTs };
|
|
45
|
+
}
|
|
46
|
+
if (!resolved.ok) {
|
|
47
|
+
return { reply: `:warning: ${resolved.error}`, threadTs };
|
|
48
|
+
}
|
|
49
|
+
// 5. Ask Copilot.
|
|
50
|
+
let result;
|
|
51
|
+
try {
|
|
52
|
+
result = await deps.ask(resolved.session, text);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
return { reply: `:warning: copilot request failed: ${errMsg(err)}`, threadTs };
|
|
56
|
+
}
|
|
57
|
+
if (!result.ok) {
|
|
58
|
+
return { reply: `:warning: ${result.error ?? "copilot error"}`, threadTs };
|
|
59
|
+
}
|
|
60
|
+
if (result.timedOut) {
|
|
61
|
+
const partial = (result.text ?? "").trim();
|
|
62
|
+
const note = ":hourglass: Copilot is still working — ask again in a moment.";
|
|
63
|
+
return { reply: partial ? `${note}\n\n${partial}` : note, threadTs };
|
|
64
|
+
}
|
|
65
|
+
const reply = (result.text ?? "").trim() || "_(no output)_";
|
|
66
|
+
return { reply, threadTs };
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/slack/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin wrapper that runs ONLY the Slack connector via the gateway runtime.
|
|
3
|
+
* Kept so `omp slack serve` (CLI alias) and any external callers of
|
|
4
|
+
* `runSlackBot()` keep working after the gateway refactor. All real lifecycle
|
|
5
|
+
* logic now lives in src/gateway/runtime.ts + src/gateway/connectors/slack.ts.
|
|
6
|
+
*/
|
|
7
|
+
import type { SlackConfig } from "./config.js";
|
|
8
|
+
export declare function runSlackBot(config: SlackConfig): Promise<void>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createSlackConnector } from "../gateway/connectors/slack.js";
|
|
2
|
+
import { runGateway } from "../gateway/runtime.js";
|
|
3
|
+
export async function runSlackBot(config) {
|
|
4
|
+
const connector = createSlackConnector({ config });
|
|
5
|
+
await runGateway({ connectors: [connector] });
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/slack/serve.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB;IACnD,MAAM,SAAS,GAAG,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/src/team/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from "./outbox.js";
|
|
|
6
6
|
export * from "./task-store.js";
|
|
7
7
|
export * from "./tmux.js";
|
|
8
8
|
export * from "./idle-nudge.js";
|
|
9
|
+
export * from "./pane-monitor.js";
|
|
9
10
|
export * from "./worker-bootstrap.js";
|
|
10
11
|
export * from "./api.js";
|
|
11
12
|
export * from "./runtime.js";
|
package/dist/src/team/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export * from "./outbox.js";
|
|
|
6
6
|
export * from "./task-store.js";
|
|
7
7
|
export * from "./tmux.js";
|
|
8
8
|
export * from "./idle-nudge.js";
|
|
9
|
+
export * from "./pane-monitor.js";
|
|
9
10
|
export * from "./worker-bootstrap.js";
|
|
10
11
|
export * from "./api.js";
|
|
11
12
|
export * from "./runtime.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/team/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/team/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type TmuxApi } from "./tmux.js";
|
|
2
|
+
export interface PaneMonitorConfig {
|
|
3
|
+
pollIntervalMs: number;
|
|
4
|
+
readySamples: number;
|
|
5
|
+
minObservationMs: number;
|
|
6
|
+
timeoutMs: number;
|
|
7
|
+
captureLines: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const DEFAULT_PANE_MONITOR_CONFIG: PaneMonitorConfig;
|
|
10
|
+
export interface PaneMonitorState {
|
|
11
|
+
firstSeenAt: number;
|
|
12
|
+
readyStreak: number;
|
|
13
|
+
activeSeen: boolean;
|
|
14
|
+
done: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface PaneAttentionEvent {
|
|
17
|
+
paneId: string;
|
|
18
|
+
kind: "ready" | "dead";
|
|
19
|
+
message: string;
|
|
20
|
+
at: number;
|
|
21
|
+
}
|
|
22
|
+
export interface PaneMonitorResult {
|
|
23
|
+
ok: boolean;
|
|
24
|
+
reason: "all-done" | "timeout";
|
|
25
|
+
events: PaneAttentionEvent[];
|
|
26
|
+
}
|
|
27
|
+
export interface MonitorPanesOptions {
|
|
28
|
+
leaderPaneId: string;
|
|
29
|
+
workerPaneIds: string[];
|
|
30
|
+
sessionLabel?: string;
|
|
31
|
+
tmux?: TmuxApi;
|
|
32
|
+
config?: Partial<PaneMonitorConfig>;
|
|
33
|
+
}
|
|
34
|
+
export declare function createInitialPaneState(now: number): PaneMonitorState;
|
|
35
|
+
export declare function evaluatePaneState(state: PaneMonitorState, captured: string, paneDead: boolean, paneId: string, now: number, config: Pick<PaneMonitorConfig, "readySamples" | "minObservationMs">, sessionLabel?: string): {
|
|
36
|
+
state: PaneMonitorState;
|
|
37
|
+
event?: PaneAttentionEvent;
|
|
38
|
+
};
|
|
39
|
+
export declare function monitorPanes(opts: MonitorPanesOptions): Promise<PaneMonitorResult>;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { makeTmux, paneHasActiveTask, paneLooksReady, sendToWorker } from "./tmux.js";
|
|
2
|
+
export const DEFAULT_PANE_MONITOR_CONFIG = {
|
|
3
|
+
pollIntervalMs: 3_000,
|
|
4
|
+
readySamples: 2,
|
|
5
|
+
minObservationMs: 10_000,
|
|
6
|
+
timeoutMs: 30 * 60_000,
|
|
7
|
+
captureLines: 120,
|
|
8
|
+
};
|
|
9
|
+
function sleep(ms) {
|
|
10
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
11
|
+
}
|
|
12
|
+
function paneLabel(sessionLabel, paneId) {
|
|
13
|
+
return sessionLabel ? `${sessionLabel} ${paneId}` : paneId;
|
|
14
|
+
}
|
|
15
|
+
export function createInitialPaneState(now) {
|
|
16
|
+
return {
|
|
17
|
+
firstSeenAt: now,
|
|
18
|
+
readyStreak: 0,
|
|
19
|
+
activeSeen: false,
|
|
20
|
+
done: false,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function evaluatePaneState(state, captured, paneDead, paneId, now, config, sessionLabel) {
|
|
24
|
+
if (state.done)
|
|
25
|
+
return { state };
|
|
26
|
+
if (paneDead) {
|
|
27
|
+
const event = {
|
|
28
|
+
paneId,
|
|
29
|
+
kind: "dead",
|
|
30
|
+
at: now,
|
|
31
|
+
message: `team ${paneLabel(sessionLabel, paneId)} exited; review that pane`,
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
state: { ...state, done: true, readyStreak: 0 },
|
|
35
|
+
event,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const active = paneHasActiveTask(captured);
|
|
39
|
+
const ready = paneLooksReady(captured) && !active;
|
|
40
|
+
const observedLongEnough = now - state.firstSeenAt >= config.minObservationMs;
|
|
41
|
+
if (active) {
|
|
42
|
+
return {
|
|
43
|
+
state: {
|
|
44
|
+
...state,
|
|
45
|
+
activeSeen: true,
|
|
46
|
+
readyStreak: 0,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (!ready) {
|
|
51
|
+
return {
|
|
52
|
+
state: {
|
|
53
|
+
...state,
|
|
54
|
+
readyStreak: 0,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const nextReadyStreak = state.readyStreak + 1;
|
|
59
|
+
const shouldNotify = nextReadyStreak >= config.readySamples && (state.activeSeen || observedLongEnough);
|
|
60
|
+
if (!shouldNotify) {
|
|
61
|
+
return {
|
|
62
|
+
state: {
|
|
63
|
+
...state,
|
|
64
|
+
readyStreak: nextReadyStreak,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const event = {
|
|
69
|
+
paneId,
|
|
70
|
+
kind: "ready",
|
|
71
|
+
at: now,
|
|
72
|
+
message: `team ${paneLabel(sessionLabel, paneId)} is ready for review`,
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
state: {
|
|
76
|
+
...state,
|
|
77
|
+
readyStreak: nextReadyStreak,
|
|
78
|
+
done: true,
|
|
79
|
+
},
|
|
80
|
+
event,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export async function monitorPanes(opts) {
|
|
84
|
+
const tmux = opts.tmux ?? makeTmux();
|
|
85
|
+
const config = {
|
|
86
|
+
pollIntervalMs: opts.config?.pollIntervalMs ?? DEFAULT_PANE_MONITOR_CONFIG.pollIntervalMs,
|
|
87
|
+
readySamples: opts.config?.readySamples ?? DEFAULT_PANE_MONITOR_CONFIG.readySamples,
|
|
88
|
+
minObservationMs: opts.config?.minObservationMs ?? DEFAULT_PANE_MONITOR_CONFIG.minObservationMs,
|
|
89
|
+
timeoutMs: opts.config?.timeoutMs ?? DEFAULT_PANE_MONITOR_CONFIG.timeoutMs,
|
|
90
|
+
captureLines: opts.config?.captureLines ?? DEFAULT_PANE_MONITOR_CONFIG.captureLines,
|
|
91
|
+
};
|
|
92
|
+
const states = new Map();
|
|
93
|
+
const events = [];
|
|
94
|
+
const start = Date.now();
|
|
95
|
+
for (const paneId of opts.workerPaneIds) {
|
|
96
|
+
states.set(paneId, createInitialPaneState(start));
|
|
97
|
+
}
|
|
98
|
+
while (Date.now() - start < config.timeoutMs) {
|
|
99
|
+
let remaining = 0;
|
|
100
|
+
for (const paneId of opts.workerPaneIds) {
|
|
101
|
+
const current = states.get(paneId);
|
|
102
|
+
if (!current || current.done)
|
|
103
|
+
continue;
|
|
104
|
+
remaining++;
|
|
105
|
+
const now = Date.now();
|
|
106
|
+
const paneDead = tmux.paneDead(paneId);
|
|
107
|
+
const captured = paneDead ? "" : tmux.capturePane(paneId, config.captureLines).stdout;
|
|
108
|
+
const result = evaluatePaneState(current, captured, paneDead, paneId, now, config, opts.sessionLabel);
|
|
109
|
+
states.set(paneId, result.state);
|
|
110
|
+
if (result.event) {
|
|
111
|
+
events.push(result.event);
|
|
112
|
+
try {
|
|
113
|
+
await sendToWorker(tmux, opts.leaderPaneId, result.event.message, { rounds: 4, delayMs: 100 });
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
tmux.displayMessage(opts.leaderPaneId, result.event.message);
|
|
117
|
+
}
|
|
118
|
+
remaining--;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (remaining === 0) {
|
|
122
|
+
return { ok: true, reason: "all-done", events };
|
|
123
|
+
}
|
|
124
|
+
await sleep(config.pollIntervalMs);
|
|
125
|
+
}
|
|
126
|
+
return { ok: false, reason: "timeout", events };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=pane-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pane-monitor.js","sourceRoot":"","sources":["../../../src/team/pane-monitor.ts"],"names":[],"mappings":"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"}
|
package/dist/src/team/runtime.js
CHANGED
|
@@ -6,7 +6,7 @@ import { writeInbox } from "./inbox.js";
|
|
|
6
6
|
import { buildInboxMarkdown } from "./worker-bootstrap.js";
|
|
7
7
|
import { peekNewOutbox, readNewOutbox } from "./outbox.js";
|
|
8
8
|
import { isHeartbeatStale, readHeartbeat } from "./heartbeat.js";
|
|
9
|
-
import { makeTmux } from "./tmux.js";
|
|
9
|
+
import { makeTmux, sendToWorker, waitForReady } from "./tmux.js";
|
|
10
10
|
import { NudgeTracker } from "./idle-nudge.js";
|
|
11
11
|
import { loadTeamConfig } from "./config.js";
|
|
12
12
|
import { isLoopModeActive } from "../mode-state/paths.js";
|
|
@@ -14,6 +14,7 @@ const ROLE_BIN = {
|
|
|
14
14
|
claude: "claude",
|
|
15
15
|
codex: "codex",
|
|
16
16
|
gemini: "gemini",
|
|
17
|
+
copilot: "copilot --allow-all-tools",
|
|
17
18
|
};
|
|
18
19
|
export function resolveWorkerBin(role) {
|
|
19
20
|
return ROLE_BIN[role] ?? role;
|
|
@@ -72,6 +73,16 @@ export async function startTeam(opts) {
|
|
|
72
73
|
tmux.sendText(paneId, bin);
|
|
73
74
|
tmux.sendKeys(paneId, "C-m");
|
|
74
75
|
}
|
|
76
|
+
// Wait for all workers to be ready (handles trust dialog), then send prompts
|
|
77
|
+
for (let i = 0; i < opts.workerCount; i++) {
|
|
78
|
+
const w = workers[i];
|
|
79
|
+
const task = tasks[i];
|
|
80
|
+
if (!w.paneId)
|
|
81
|
+
continue;
|
|
82
|
+
await waitForReady(tmux, w.paneId);
|
|
83
|
+
const prompt = `Read your inbox at ${resolve(paths.workersDir, w.name, "inbox.md")} and follow the instructions exactly. Your task: ${task.description}`;
|
|
84
|
+
await sendToWorker(tmux, w.paneId, prompt);
|
|
85
|
+
}
|
|
75
86
|
const config = {
|
|
76
87
|
name: opts.name,
|
|
77
88
|
task: opts.task,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/team/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/team/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/src/team/tmux.d.ts
CHANGED
|
@@ -12,13 +12,26 @@ export interface TmuxApi {
|
|
|
12
12
|
splitWindow(target: string, cwd: string): TmuxResult;
|
|
13
13
|
sendKeys(target: string, ...keys: string[]): TmuxResult;
|
|
14
14
|
sendText(target: string, text: string): TmuxResult;
|
|
15
|
+
displayMessage(target: string, message: string): TmuxResult;
|
|
15
16
|
capturePane(target: string, lines?: number): TmuxResult;
|
|
16
17
|
killPane(target: string): TmuxResult;
|
|
17
18
|
killSession(session: string): TmuxResult;
|
|
18
19
|
paneDead(target: string): boolean;
|
|
19
20
|
sessionExists(session: string): boolean;
|
|
21
|
+
listSessions(): string[];
|
|
20
22
|
}
|
|
21
23
|
export declare function makeTmux(runner?: TmuxRunner): TmuxApi;
|
|
24
|
+
export interface WaitForReadyOptions {
|
|
25
|
+
/** Max time to wait in ms (default 60 000). */
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
/** Poll interval in ms (default 2 000). */
|
|
28
|
+
pollMs?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Block until the Copilot CLI in `target` pane is ready for input.
|
|
32
|
+
* Returns `true` if ready, `false` on timeout.
|
|
33
|
+
*/
|
|
34
|
+
export declare function waitForReady(api: TmuxApi, target: string, options?: WaitForReadyOptions): Promise<boolean>;
|
|
22
35
|
export interface SendToWorkerOptions {
|
|
23
36
|
rounds?: number;
|
|
24
37
|
delayMs?: number;
|
package/dist/src/team/tmux.js
CHANGED
|
@@ -14,6 +14,9 @@ const ACTIVE_HINTS = [
|
|
|
14
14
|
/background terminal/i,
|
|
15
15
|
/tool call in progress/i,
|
|
16
16
|
];
|
|
17
|
+
// Lines the Copilot CLI renders below the actual prompt — skip these when
|
|
18
|
+
// scanning backwards for the real prompt character.
|
|
19
|
+
const STATUS_BAR_RE = /^\s*[\/ ]?\s*commands\b|^\s*[─━═]{3,}/;
|
|
17
20
|
export function paneLooksReady(captured) {
|
|
18
21
|
if (!captured.trim())
|
|
19
22
|
return false;
|
|
@@ -22,6 +25,8 @@ export function paneLooksReady(captured) {
|
|
|
22
25
|
const line = lines[i];
|
|
23
26
|
if (line.trim().length === 0)
|
|
24
27
|
continue;
|
|
28
|
+
if (STATUS_BAR_RE.test(line))
|
|
29
|
+
continue;
|
|
25
30
|
return PROMPT_RE.test(line);
|
|
26
31
|
}
|
|
27
32
|
return false;
|
|
@@ -43,6 +48,9 @@ export function makeTmux(runner = tmuxExec) {
|
|
|
43
48
|
sendText(target, text) {
|
|
44
49
|
return runner(["send-keys", "-t", target, "-l", "--", text]);
|
|
45
50
|
},
|
|
51
|
+
displayMessage(target, message) {
|
|
52
|
+
return runner(["display-message", "-t", target, "--", message]);
|
|
53
|
+
},
|
|
46
54
|
capturePane(target, lines = 80) {
|
|
47
55
|
return runner(["capture-pane", "-t", target, "-p", "-S", `-${lines}`]);
|
|
48
56
|
},
|
|
@@ -60,11 +68,50 @@ export function makeTmux(runner = tmuxExec) {
|
|
|
60
68
|
const r = runner(["has-session", "-t", session]);
|
|
61
69
|
return r.status === 0;
|
|
62
70
|
},
|
|
71
|
+
listSessions() {
|
|
72
|
+
const r = runner(["list-sessions", "-F", "#{session_name}"]);
|
|
73
|
+
if (r.status !== 0)
|
|
74
|
+
return [];
|
|
75
|
+
return r.stdout
|
|
76
|
+
.split("\n")
|
|
77
|
+
.map((l) => l.trim())
|
|
78
|
+
.filter((l) => l.length > 0);
|
|
79
|
+
},
|
|
63
80
|
};
|
|
64
81
|
}
|
|
65
82
|
function sleep(ms) {
|
|
66
83
|
return new Promise((r) => setTimeout(r, ms));
|
|
67
84
|
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// waitForReady — poll a pane until the Copilot CLI is idle at its input
|
|
87
|
+
// prompt, auto-accepting the folder-trust dialog if it appears.
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
const TRUST_RE = /Do you trust/;
|
|
90
|
+
const CLI_READY_RE = /\/\s*commands/;
|
|
91
|
+
/**
|
|
92
|
+
* Block until the Copilot CLI in `target` pane is ready for input.
|
|
93
|
+
* Returns `true` if ready, `false` on timeout.
|
|
94
|
+
*/
|
|
95
|
+
export async function waitForReady(api, target, options = {}) {
|
|
96
|
+
const timeout = options.timeoutMs ?? 60_000;
|
|
97
|
+
const poll = options.pollMs ?? 2_000;
|
|
98
|
+
let elapsed = 0;
|
|
99
|
+
let acceptedTrust = false;
|
|
100
|
+
while (elapsed < timeout) {
|
|
101
|
+
const captured = api.capturePane(target, 25).stdout;
|
|
102
|
+
// Ready: the '/ commands' status bar means the CLI input prompt is active
|
|
103
|
+
if (CLI_READY_RE.test(captured))
|
|
104
|
+
return true;
|
|
105
|
+
// Auto-accept the folder trust dialog (send Enter = accept default)
|
|
106
|
+
if (!acceptedTrust && TRUST_RE.test(captured)) {
|
|
107
|
+
api.sendKeys(target, "C-m");
|
|
108
|
+
acceptedTrust = true;
|
|
109
|
+
}
|
|
110
|
+
await sleep(poll);
|
|
111
|
+
elapsed += poll;
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
68
115
|
export async function sendToWorker(api, target, text, options = {}) {
|
|
69
116
|
const rounds = options.rounds ?? 6;
|
|
70
117
|
const delayMs = options.delayMs ?? 150;
|