@damian87/omp 0.1.0 → 0.3.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/copilot-instructions.md +15 -0
- package/.github/skills/caveman/SKILL.md +22 -11
- package/.github/skills/code-review/SKILL.md +27 -13
- package/.github/skills/debug/SKILL.md +29 -13
- package/.github/skills/grill-me/SKILL.md +19 -7
- package/.github/skills/jira-ticket/SKILL.md +34 -12
- package/.github/skills/omp-autopilot/SKILL.md +67 -12
- package/.github/skills/prototype/SKILL.md +30 -12
- package/.github/skills/ralph/SKILL.md +62 -13
- package/.github/skills/ralplan/SKILL.md +21 -12
- package/.github/skills/research-codebase/SKILL.md +58 -0
- package/.github/skills/research-codebase/reference/agent-prompts.md +38 -0
- package/.github/skills/research-codebase/reference/follow-up.md +21 -0
- package/.github/skills/research-codebase/reference/permalink.md +26 -0
- package/.github/skills/research-codebase/reference/template.md +75 -0
- package/.github/skills/tdd/SKILL.md +27 -10
- package/.github/skills/team/SKILL.md +95 -13
- package/.github/skills/team/scripts/team-launch.sh +132 -0
- package/.github/skills/ultraqa/SKILL.md +55 -11
- package/.github/skills/ultrawork/SKILL.md +66 -13
- package/.github/skills/verify/SKILL.md +29 -11
- package/.github/skills/worktree/SKILL.md +51 -0
- package/README.md +28 -14
- package/catalog/capabilities.json +104 -12
- package/catalog/skills-general.json +62 -10
- package/dist/src/cli.js +30 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/copilot/launch.js +42 -2
- package/dist/src/copilot/launch.js.map +1 -1
- package/dist/src/mode-state/paths.d.ts +6 -0
- package/dist/src/mode-state/paths.js +12 -0
- package/dist/src/mode-state/paths.js.map +1 -1
- package/dist/src/team/api.d.ts +60 -1
- package/dist/src/team/api.js +101 -0
- package/dist/src/team/api.js.map +1 -1
- package/dist/src/team/config.d.ts +7 -0
- package/dist/src/team/config.js +16 -0
- package/dist/src/team/config.js.map +1 -0
- package/dist/src/team/mailbox.d.ts +30 -0
- package/dist/src/team/mailbox.js +188 -0
- package/dist/src/team/mailbox.js.map +1 -0
- package/dist/src/team/runtime.d.ts +9 -1
- package/dist/src/team/runtime.js +18 -12
- package/dist/src/team/runtime.js.map +1 -1
- package/dist/src/team/types.d.ts +25 -0
- package/dist/src/team/worker-bootstrap.js +29 -0
- package/dist/src/team/worker-bootstrap.js.map +1 -1
- package/dist/test/catalog.test.d.ts +1 -0
- package/dist/test/catalog.test.js +21 -0
- package/dist/test/catalog.test.js.map +1 -0
- package/dist/test/jira.test.d.ts +1 -0
- package/dist/test/jira.test.js +26 -0
- package/dist/test/jira.test.js.map +1 -0
- package/dist/test/lint.test.d.ts +1 -0
- package/dist/test/lint.test.js +9 -0
- package/dist/test/lint.test.js.map +1 -0
- package/dist/test/sync.test.d.ts +1 -0
- package/dist/test/sync.test.js +15 -0
- package/dist/test/sync.test.js.map +1 -0
- package/docs/general-skills.md +5 -4
- package/docs/plans/2026-05-29-team-messaging-and-nudge-gating-design.md +170 -0
- package/docs/self-evolve.md +2 -2
- package/package.json +1 -1
- package/scripts/lib/version-check.mjs +82 -0
- package/scripts/session-start.mjs +8 -2
- package/.github/skills/codebase-research/SKILL.md +0 -20
|
@@ -26,4 +26,16 @@ export function clearModeState(cwd, mode) {
|
|
|
26
26
|
if (existsSync(p))
|
|
27
27
|
unlinkSync(p);
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* True when any loop mode (ralph/ultrawork/ultraqa) is currently active.
|
|
31
|
+
* Single source of truth for mode-gated behaviour (e.g. team idle-nudge).
|
|
32
|
+
* Pure, side-effect-free read.
|
|
33
|
+
*/
|
|
34
|
+
export function isLoopModeActive(cwd) {
|
|
35
|
+
const modes = ["ralph", "ultrawork", "ultraqa"];
|
|
36
|
+
return modes.some((mode) => {
|
|
37
|
+
const state = readModeStateJson(cwd, mode);
|
|
38
|
+
return state?.active === true;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
29
41
|
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/mode-state/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAInD,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAc;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,GAAW,EAAE,IAAc;IAC9D,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAM,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,GAAW,EAAE,IAAc,EAAE,KAAQ;IACzE,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACpD,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3D,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,IAAc;IACxD,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/mode-state/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAInD,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,IAAc;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,GAAW,EAAE,IAAc;IAC9D,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAM,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,GAAW,EAAE,IAAc,EAAE,KAAQ;IACzE,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACpD,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC3D,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,IAAc;IACxD,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAe,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,iBAAiB,CAAuB,GAAG,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/src/team/api.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ClaimResult, type TransitionResult } from "./task-store.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type TmuxApi } from "./tmux.js";
|
|
3
|
+
import type { MailboxMessageView, TaskStatus } from "./types.js";
|
|
3
4
|
export interface ClaimInput {
|
|
4
5
|
team_name: string;
|
|
5
6
|
task_id: string;
|
|
@@ -18,3 +19,61 @@ export interface TransitionInput {
|
|
|
18
19
|
cwd?: string;
|
|
19
20
|
}
|
|
20
21
|
export declare function apiTransitionTaskStatus(input: TransitionInput): TransitionResult;
|
|
22
|
+
export interface SendMessageInput {
|
|
23
|
+
team_name: string;
|
|
24
|
+
from: string;
|
|
25
|
+
to: string;
|
|
26
|
+
body: string;
|
|
27
|
+
cwd?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SendMessageResult {
|
|
30
|
+
ok: boolean;
|
|
31
|
+
messageId?: string;
|
|
32
|
+
nudged?: boolean;
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Send a message to the leader or any registered worker. Rejects path-traversal
|
|
37
|
+
* and unknown recipients before any file I/O. Best-effort nudges the recipient
|
|
38
|
+
* worker's tmux pane (never the leader — it has no tracked pane).
|
|
39
|
+
*/
|
|
40
|
+
export declare function apiSendMessage(input: SendMessageInput, tmux?: TmuxApi): Promise<SendMessageResult>;
|
|
41
|
+
export interface BroadcastInput {
|
|
42
|
+
team_name: string;
|
|
43
|
+
from: string;
|
|
44
|
+
body: string;
|
|
45
|
+
cwd?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface BroadcastResult {
|
|
48
|
+
ok: boolean;
|
|
49
|
+
recipients: string[];
|
|
50
|
+
messageIds: string[];
|
|
51
|
+
errors?: string[];
|
|
52
|
+
}
|
|
53
|
+
/** Broadcast to every worker (except the sender) AND the leader. */
|
|
54
|
+
export declare function apiBroadcast(input: BroadcastInput, tmux?: TmuxApi): Promise<BroadcastResult>;
|
|
55
|
+
export interface MailboxListInput {
|
|
56
|
+
team_name: string;
|
|
57
|
+
worker: string;
|
|
58
|
+
undelivered_only?: boolean;
|
|
59
|
+
cwd?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface MailboxListResult {
|
|
62
|
+
ok: boolean;
|
|
63
|
+
messages: MailboxMessageView[];
|
|
64
|
+
error?: string;
|
|
65
|
+
}
|
|
66
|
+
/** List a recipient's mailbox (merged with delivery receipts). */
|
|
67
|
+
export declare function apiMailboxList(input: MailboxListInput): MailboxListResult;
|
|
68
|
+
export interface MailboxMarkDeliveredInput {
|
|
69
|
+
team_name: string;
|
|
70
|
+
worker: string;
|
|
71
|
+
message_id: string;
|
|
72
|
+
cwd?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface MailboxMarkDeliveredResult {
|
|
75
|
+
ok: boolean;
|
|
76
|
+
error?: string;
|
|
77
|
+
}
|
|
78
|
+
/** Mark a mailbox message delivered (appends a delivery receipt). */
|
|
79
|
+
export declare function apiMailboxMarkDelivered(input: MailboxMarkDeliveredInput): MailboxMarkDeliveredResult;
|
package/dist/src/team/api.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
2
3
|
import { resolveTeamPaths, resolveWorkerPaths } from "./state-paths.js";
|
|
3
4
|
import { tryClaimTask, transitionTask } from "./task-store.js";
|
|
4
5
|
import { writeHeartbeat } from "./heartbeat.js";
|
|
5
6
|
import { appendOutbox } from "./outbox.js";
|
|
7
|
+
import { loadTeamConfig } from "./config.js";
|
|
8
|
+
import { appendMailbox, listMailbox, markDelivered, validateRecipientName } from "./mailbox.js";
|
|
9
|
+
import { makeTmux, sendToWorker } from "./tmux.js";
|
|
10
|
+
/** Reserved recipient name for the team leader. */
|
|
11
|
+
const LEADER = "leader";
|
|
6
12
|
export function apiClaimTask(input) {
|
|
7
13
|
const cwd = resolve(input.cwd ?? process.cwd());
|
|
8
14
|
const team = resolveTeamPaths(cwd, input.team_name);
|
|
@@ -52,4 +58,99 @@ export function apiTransitionTaskStatus(input) {
|
|
|
52
58
|
}
|
|
53
59
|
return transition;
|
|
54
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Send a message to the leader or any registered worker. Rejects path-traversal
|
|
63
|
+
* and unknown recipients before any file I/O. Best-effort nudges the recipient
|
|
64
|
+
* worker's tmux pane (never the leader — it has no tracked pane).
|
|
65
|
+
*/
|
|
66
|
+
export async function apiSendMessage(input, tmux) {
|
|
67
|
+
const cwd = resolve(input.cwd ?? process.cwd());
|
|
68
|
+
// Path-traversal guard BEFORE config lookup — hard gate regardless of config.
|
|
69
|
+
if (!validateRecipientName(input.to)) {
|
|
70
|
+
return { ok: false, error: "invalid_recipient_name" };
|
|
71
|
+
}
|
|
72
|
+
if (!input.from || !input.body) {
|
|
73
|
+
return { ok: false, error: "invalid_input" };
|
|
74
|
+
}
|
|
75
|
+
const team = resolveTeamPaths(cwd, input.team_name);
|
|
76
|
+
const config = loadTeamConfig(team);
|
|
77
|
+
const isLeader = input.to === LEADER;
|
|
78
|
+
const recipient = config?.workers.find((w) => w.name === input.to);
|
|
79
|
+
if (!isLeader && !recipient) {
|
|
80
|
+
return { ok: false, error: "unknown_recipient" };
|
|
81
|
+
}
|
|
82
|
+
const message = {
|
|
83
|
+
type: "message",
|
|
84
|
+
id: randomUUID(),
|
|
85
|
+
from: input.from,
|
|
86
|
+
to: input.to,
|
|
87
|
+
body: input.body,
|
|
88
|
+
timestamp: new Date().toISOString(),
|
|
89
|
+
};
|
|
90
|
+
appendMailbox(team.mailboxDir, message);
|
|
91
|
+
// Best-effort nudge: only workers have a tracked pane; never nudge the leader.
|
|
92
|
+
let nudged = false;
|
|
93
|
+
const paneId = recipient?.paneId;
|
|
94
|
+
if (!isLeader && paneId) {
|
|
95
|
+
const undelivered = listMailbox(team.mailboxDir, input.to).filter((m) => !m.deliveredAt).length;
|
|
96
|
+
const trigger = `You have ${undelivered} new message(s). Read your mailbox: omp team api mailbox-list --input '{"team_name":"${input.team_name}","worker":"${input.to}"}' --json`;
|
|
97
|
+
try {
|
|
98
|
+
const api = tmux ?? makeTmux();
|
|
99
|
+
nudged = await sendToWorker(api, paneId, trigger, { rounds: 4, delayMs: 100 });
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
nudged = false; // nudge is best-effort; persistence already succeeded
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { ok: true, messageId: message.id, nudged };
|
|
106
|
+
}
|
|
107
|
+
/** Broadcast to every worker (except the sender) AND the leader. */
|
|
108
|
+
export async function apiBroadcast(input, tmux) {
|
|
109
|
+
const cwd = resolve(input.cwd ?? process.cwd());
|
|
110
|
+
const team = resolveTeamPaths(cwd, input.team_name);
|
|
111
|
+
const config = loadTeamConfig(team);
|
|
112
|
+
const recipientNames = [
|
|
113
|
+
...(config?.workers.map((w) => w.name) ?? []),
|
|
114
|
+
LEADER,
|
|
115
|
+
].filter((name) => name !== input.from);
|
|
116
|
+
const recipients = [];
|
|
117
|
+
const messageIds = [];
|
|
118
|
+
const errors = [];
|
|
119
|
+
for (const to of recipientNames) {
|
|
120
|
+
const result = await apiSendMessage({ team_name: input.team_name, from: input.from, to, body: input.body, cwd }, tmux);
|
|
121
|
+
if (result.ok && result.messageId) {
|
|
122
|
+
recipients.push(to);
|
|
123
|
+
messageIds.push(result.messageId);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
errors.push(`${to}: ${result.error ?? "unknown_error"}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return errors.length > 0
|
|
130
|
+
? { ok: true, recipients, messageIds, errors }
|
|
131
|
+
: { ok: true, recipients, messageIds };
|
|
132
|
+
}
|
|
133
|
+
/** List a recipient's mailbox (merged with delivery receipts). */
|
|
134
|
+
export function apiMailboxList(input) {
|
|
135
|
+
const cwd = resolve(input.cwd ?? process.cwd());
|
|
136
|
+
if (!validateRecipientName(input.worker)) {
|
|
137
|
+
return { ok: false, messages: [], error: "invalid_recipient_name" };
|
|
138
|
+
}
|
|
139
|
+
const team = resolveTeamPaths(cwd, input.team_name);
|
|
140
|
+
let messages = listMailbox(team.mailboxDir, input.worker);
|
|
141
|
+
if (input.undelivered_only) {
|
|
142
|
+
messages = messages.filter((m) => !m.deliveredAt);
|
|
143
|
+
}
|
|
144
|
+
return { ok: true, messages };
|
|
145
|
+
}
|
|
146
|
+
/** Mark a mailbox message delivered (appends a delivery receipt). */
|
|
147
|
+
export function apiMailboxMarkDelivered(input) {
|
|
148
|
+
const cwd = resolve(input.cwd ?? process.cwd());
|
|
149
|
+
if (!validateRecipientName(input.worker)) {
|
|
150
|
+
return { ok: false, error: "invalid_recipient_name" };
|
|
151
|
+
}
|
|
152
|
+
const team = resolveTeamPaths(cwd, input.team_name);
|
|
153
|
+
const ok = markDelivered(team.mailboxDir, input.worker, input.message_id);
|
|
154
|
+
return ok ? { ok: true } : { ok: false, error: "message_not_found" };
|
|
155
|
+
}
|
|
55
156
|
//# sourceMappingURL=api.js.map
|
package/dist/src/team/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/team/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/team/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TeamStatePaths } from "./state-paths.js";
|
|
2
|
+
import type { TeamConfig } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Read a team's config.json. Pure leaf read (no orchestration dependency) so
|
|
5
|
+
* both the runtime and the api layer can import it without a cycle.
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadTeamConfig(paths: TeamStatePaths): TeamConfig | undefined;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
/**
|
|
3
|
+
* Read a team's config.json. Pure leaf read (no orchestration dependency) so
|
|
4
|
+
* both the runtime and the api layer can import it without a cycle.
|
|
5
|
+
*/
|
|
6
|
+
export function loadTeamConfig(paths) {
|
|
7
|
+
if (!existsSync(paths.configFile))
|
|
8
|
+
return undefined;
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(readFileSync(paths.configFile, "utf8"));
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/team/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAInD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAqB;IAClD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAe,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MailboxMessage, MailboxMessageView } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Recipient names are used to build `<mailboxDir>/<recipient>.jsonl` paths and
|
|
4
|
+
* come from external CLI `--input` JSON. Reject anything that could escape the
|
|
5
|
+
* mailbox directory. Hard guard — call before constructing any file path.
|
|
6
|
+
*/
|
|
7
|
+
export declare function validateRecipientName(name: string): boolean;
|
|
8
|
+
export declare function mailboxFilePath(mailboxDir: string, recipient: string): string;
|
|
9
|
+
export declare function mailboxOffsetPath(mailboxDir: string, recipient: string): string;
|
|
10
|
+
/** Append a message to its recipient's mailbox (keyed by msg.to). */
|
|
11
|
+
export declare function appendMailbox(mailboxDir: string, msg: MailboxMessage): void;
|
|
12
|
+
/**
|
|
13
|
+
* Mark a message delivered by APPENDING a DeliveryReceipt line (never rewrites
|
|
14
|
+
* the file, so active byte cursors stay valid). Returns false if no message
|
|
15
|
+
* with `messageId` exists (no receipt written).
|
|
16
|
+
*/
|
|
17
|
+
export declare function markDelivered(mailboxDir: string, recipient: string, messageId: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Read new messages via byte cursor and advance it. The cursor advances past
|
|
20
|
+
* ALL lines (including delivery-receipt lines), but only `type: "message"`
|
|
21
|
+
* lines are returned — receipts are consumed but filtered from the result.
|
|
22
|
+
*/
|
|
23
|
+
export declare function readNewMailbox(mailboxDir: string, recipient: string): MailboxMessage[];
|
|
24
|
+
/** Same filtering as readNewMailbox but does NOT advance the cursor. */
|
|
25
|
+
export declare function peekMailbox(mailboxDir: string, recipient: string): MailboxMessage[];
|
|
26
|
+
/**
|
|
27
|
+
* Full-file scan (no cursor). Returns every message merged with delivery info
|
|
28
|
+
* from any matching DeliveryReceipt line.
|
|
29
|
+
*/
|
|
30
|
+
export declare function listMailbox(mailboxDir: string, recipient: string): MailboxMessageView[];
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, statSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Recipient name validation (path-traversal guard)
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
/**
|
|
7
|
+
* Recipient names are used to build `<mailboxDir>/<recipient>.jsonl` paths and
|
|
8
|
+
* come from external CLI `--input` JSON. Reject anything that could escape the
|
|
9
|
+
* mailbox directory. Hard guard — call before constructing any file path.
|
|
10
|
+
*/
|
|
11
|
+
export function validateRecipientName(name) {
|
|
12
|
+
if (!name || name === "." || name === "..")
|
|
13
|
+
return false;
|
|
14
|
+
if (name.includes("/") || name.includes("\\"))
|
|
15
|
+
return false;
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Paths
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
export function mailboxFilePath(mailboxDir, recipient) {
|
|
22
|
+
if (!validateRecipientName(recipient)) {
|
|
23
|
+
throw new Error(`invalid_recipient_name: ${recipient}`);
|
|
24
|
+
}
|
|
25
|
+
return join(mailboxDir, `${recipient}.jsonl`);
|
|
26
|
+
}
|
|
27
|
+
export function mailboxOffsetPath(mailboxDir, recipient) {
|
|
28
|
+
if (!validateRecipientName(recipient)) {
|
|
29
|
+
throw new Error(`invalid_recipient_name: ${recipient}`);
|
|
30
|
+
}
|
|
31
|
+
return join(mailboxDir, `.${recipient}.offset`);
|
|
32
|
+
}
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
// Byte-cursor scanner (copied verbatim from outbox.ts to mirror the pattern)
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
function readCursorBytes(offsetPath) {
|
|
37
|
+
if (!existsSync(offsetPath))
|
|
38
|
+
return 0;
|
|
39
|
+
try {
|
|
40
|
+
const data = JSON.parse(readFileSync(offsetPath, "utf8"));
|
|
41
|
+
return Number(data.bytesRead) || 0;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function writeCursorBytes(offsetPath, bytes) {
|
|
48
|
+
mkdirSync(dirname(offsetPath), { recursive: true });
|
|
49
|
+
writeFileSync(offsetPath, JSON.stringify({ bytesRead: bytes }), "utf8");
|
|
50
|
+
}
|
|
51
|
+
function scanFromCursor(filePath, offsetPath) {
|
|
52
|
+
if (!existsSync(filePath))
|
|
53
|
+
return undefined;
|
|
54
|
+
const stats = statSync(filePath);
|
|
55
|
+
const cursor = readCursorBytes(offsetPath);
|
|
56
|
+
if (cursor >= stats.size)
|
|
57
|
+
return { lines: [], newCursor: cursor, cursor };
|
|
58
|
+
const remaining = stats.size - cursor;
|
|
59
|
+
const fd = openSync(filePath, "r");
|
|
60
|
+
const buf = Buffer.alloc(remaining);
|
|
61
|
+
try {
|
|
62
|
+
readSync(fd, buf, 0, remaining, cursor);
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
closeSync(fd);
|
|
66
|
+
}
|
|
67
|
+
const text = buf.toString("utf8");
|
|
68
|
+
const lastNewline = text.lastIndexOf("\n");
|
|
69
|
+
if (lastNewline === -1)
|
|
70
|
+
return { lines: [], newCursor: cursor, cursor }; // no complete line yet
|
|
71
|
+
const consumed = text.slice(0, lastNewline + 1);
|
|
72
|
+
const newCursor = cursor + Buffer.byteLength(consumed, "utf8");
|
|
73
|
+
const lines = [];
|
|
74
|
+
for (const line of consumed.split("\n")) {
|
|
75
|
+
if (!line.trim())
|
|
76
|
+
continue;
|
|
77
|
+
try {
|
|
78
|
+
lines.push(JSON.parse(line));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// ignore unparseable line; advance past it anyway
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return { lines, newCursor, cursor };
|
|
85
|
+
}
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
// Writes (append-only)
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
/** Append a message to its recipient's mailbox (keyed by msg.to). */
|
|
90
|
+
export function appendMailbox(mailboxDir, msg) {
|
|
91
|
+
const filePath = mailboxFilePath(mailboxDir, msg.to);
|
|
92
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
93
|
+
appendFileSync(filePath, `${JSON.stringify(msg)}\n`, "utf8");
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Mark a message delivered by APPENDING a DeliveryReceipt line (never rewrites
|
|
97
|
+
* the file, so active byte cursors stay valid). Returns false if no message
|
|
98
|
+
* with `messageId` exists (no receipt written).
|
|
99
|
+
*/
|
|
100
|
+
export function markDelivered(mailboxDir, recipient, messageId) {
|
|
101
|
+
const filePath = mailboxFilePath(mailboxDir, recipient);
|
|
102
|
+
if (!existsSync(filePath))
|
|
103
|
+
return false;
|
|
104
|
+
let found = false;
|
|
105
|
+
for (const raw of readFileSync(filePath, "utf8").split("\n")) {
|
|
106
|
+
if (!raw.trim())
|
|
107
|
+
continue;
|
|
108
|
+
try {
|
|
109
|
+
const line = JSON.parse(raw);
|
|
110
|
+
if (line.type === "message" && line.id === messageId) {
|
|
111
|
+
found = true;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// skip unparseable line
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (!found)
|
|
120
|
+
return false;
|
|
121
|
+
const receipt = {
|
|
122
|
+
type: "delivery-receipt",
|
|
123
|
+
messageId,
|
|
124
|
+
deliveredAt: new Date().toISOString(),
|
|
125
|
+
};
|
|
126
|
+
appendFileSync(filePath, `${JSON.stringify(receipt)}\n`, "utf8");
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Reads
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Read new messages via byte cursor and advance it. The cursor advances past
|
|
134
|
+
* ALL lines (including delivery-receipt lines), but only `type: "message"`
|
|
135
|
+
* lines are returned — receipts are consumed but filtered from the result.
|
|
136
|
+
*/
|
|
137
|
+
export function readNewMailbox(mailboxDir, recipient) {
|
|
138
|
+
const filePath = mailboxFilePath(mailboxDir, recipient);
|
|
139
|
+
const offsetPath = mailboxOffsetPath(mailboxDir, recipient);
|
|
140
|
+
const scan = scanFromCursor(filePath, offsetPath);
|
|
141
|
+
if (!scan)
|
|
142
|
+
return [];
|
|
143
|
+
if (scan.newCursor !== scan.cursor)
|
|
144
|
+
writeCursorBytes(offsetPath, scan.newCursor);
|
|
145
|
+
return scan.lines.filter((l) => l.type === "message");
|
|
146
|
+
}
|
|
147
|
+
/** Same filtering as readNewMailbox but does NOT advance the cursor. */
|
|
148
|
+
export function peekMailbox(mailboxDir, recipient) {
|
|
149
|
+
const filePath = mailboxFilePath(mailboxDir, recipient);
|
|
150
|
+
const offsetPath = mailboxOffsetPath(mailboxDir, recipient);
|
|
151
|
+
const scan = scanFromCursor(filePath, offsetPath);
|
|
152
|
+
if (!scan)
|
|
153
|
+
return [];
|
|
154
|
+
return scan.lines.filter((l) => l.type === "message");
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Full-file scan (no cursor). Returns every message merged with delivery info
|
|
158
|
+
* from any matching DeliveryReceipt line.
|
|
159
|
+
*/
|
|
160
|
+
export function listMailbox(mailboxDir, recipient) {
|
|
161
|
+
const filePath = mailboxFilePath(mailboxDir, recipient);
|
|
162
|
+
if (!existsSync(filePath))
|
|
163
|
+
return [];
|
|
164
|
+
const messages = [];
|
|
165
|
+
const deliveredAt = new Map();
|
|
166
|
+
for (const raw of readFileSync(filePath, "utf8").split("\n")) {
|
|
167
|
+
if (!raw.trim())
|
|
168
|
+
continue;
|
|
169
|
+
let line;
|
|
170
|
+
try {
|
|
171
|
+
line = JSON.parse(raw);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (line.type === "message") {
|
|
177
|
+
messages.push(line);
|
|
178
|
+
}
|
|
179
|
+
else if (line.type === "delivery-receipt") {
|
|
180
|
+
deliveredAt.set(line.messageId, line.deliveredAt);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return messages.map((m) => {
|
|
184
|
+
const delivered = deliveredAt.get(m.id);
|
|
185
|
+
return delivered ? { ...m, deliveredAt: delivered } : { ...m };
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=mailbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../../src/team/mailbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type TeamStatePaths } from "./state-paths.js";
|
|
2
2
|
import { type TmuxApi } from "./tmux.js";
|
|
3
3
|
import { type NudgeAttempt, type NudgeConfig, type NudgeSummaryEntry } from "./idle-nudge.js";
|
|
4
|
+
import { loadTeamConfig } from "./config.js";
|
|
4
5
|
import type { Task, TeamConfig, WorkerRole } from "./types.js";
|
|
5
6
|
export declare function resolveWorkerBin(role: WorkerRole): string;
|
|
6
7
|
export interface StartTeamOptions {
|
|
@@ -51,11 +52,18 @@ export interface MonitorResult {
|
|
|
51
52
|
nudges: NudgeSummaryEntry[];
|
|
52
53
|
nudgeAttempts: NudgeAttempt[];
|
|
53
54
|
}
|
|
54
|
-
export
|
|
55
|
+
export { loadTeamConfig };
|
|
55
56
|
export interface PollSnapshotOptions {
|
|
56
57
|
consumeOutbox?: boolean;
|
|
57
58
|
}
|
|
58
59
|
export declare function pollSnapshot(paths: TeamStatePaths, config: TeamConfig, tmux: TmuxApi, options?: PollSnapshotOptions): MonitorSnapshot;
|
|
60
|
+
/**
|
|
61
|
+
* Resolve whether idle-nudge should run for this monitor session.
|
|
62
|
+
* OFF by default. ON when explicitly enabled (the `/team` orchestration monitor
|
|
63
|
+
* passes `nudge: { enabled: true }`) OR when a loop mode (ralph/ultrawork/ultraqa)
|
|
64
|
+
* is active. Read-only polling (`team status`) passes neither signal → OFF.
|
|
65
|
+
*/
|
|
66
|
+
export declare function resolveNudgeEnabled(opts: MonitorOptions, cwd: string): boolean;
|
|
59
67
|
export declare function monitorTeam(opts: MonitorOptions): Promise<MonitorResult>;
|
|
60
68
|
export interface ShutdownOptions {
|
|
61
69
|
cwd?: string;
|
package/dist/src/team/runtime.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync,
|
|
1
|
+
import { existsSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { ensureTeamDirs, ensureWorkerDirs, resolveTeamPaths, resolveWorkerPaths, } from "./state-paths.js";
|
|
4
4
|
import { clearAllLocks, listTasks, taskFilePath, writeTask } from "./task-store.js";
|
|
@@ -8,6 +8,8 @@ import { peekNewOutbox, readNewOutbox } from "./outbox.js";
|
|
|
8
8
|
import { isHeartbeatStale, readHeartbeat } from "./heartbeat.js";
|
|
9
9
|
import { makeTmux } from "./tmux.js";
|
|
10
10
|
import { NudgeTracker } from "./idle-nudge.js";
|
|
11
|
+
import { loadTeamConfig } from "./config.js";
|
|
12
|
+
import { isLoopModeActive } from "../mode-state/paths.js";
|
|
11
13
|
const ROLE_BIN = {
|
|
12
14
|
claude: "claude",
|
|
13
15
|
codex: "codex",
|
|
@@ -93,16 +95,9 @@ export async function startTeam(opts) {
|
|
|
93
95
|
throw err;
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
try {
|
|
100
|
-
return JSON.parse(readFileSync(paths.configFile, "utf8"));
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
return undefined;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
98
|
+
// loadTeamConfig now lives in ./config.js (leaf module) so api.ts can import it
|
|
99
|
+
// without depending on this orchestration module. Re-exported for back-compat.
|
|
100
|
+
export { loadTeamConfig };
|
|
106
101
|
export function pollSnapshot(paths, config, tmux, options = {}) {
|
|
107
102
|
const reader = options.consumeOutbox === true ? readNewOutbox : peekNewOutbox;
|
|
108
103
|
const tasks = listTasks(paths.tasksDir);
|
|
@@ -122,6 +117,17 @@ export function pollSnapshot(paths, config, tmux, options = {}) {
|
|
|
122
117
|
const allDone = tasks.length > 0 && tasks.every((t) => t.status === "completed" || t.status === "failed");
|
|
123
118
|
return { tasks, workers, allDone };
|
|
124
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Resolve whether idle-nudge should run for this monitor session.
|
|
122
|
+
* OFF by default. ON when explicitly enabled (the `/team` orchestration monitor
|
|
123
|
+
* passes `nudge: { enabled: true }`) OR when a loop mode (ralph/ultrawork/ultraqa)
|
|
124
|
+
* is active. Read-only polling (`team status`) passes neither signal → OFF.
|
|
125
|
+
*/
|
|
126
|
+
export function resolveNudgeEnabled(opts, cwd) {
|
|
127
|
+
if (opts.nudge?.enabled === true)
|
|
128
|
+
return true;
|
|
129
|
+
return isLoopModeActive(cwd);
|
|
130
|
+
}
|
|
125
131
|
export async function monitorTeam(opts) {
|
|
126
132
|
const cwd = resolve(opts.cwd ?? process.cwd());
|
|
127
133
|
const tmux = opts.tmux ?? makeTmux();
|
|
@@ -132,7 +138,7 @@ export async function monitorTeam(opts) {
|
|
|
132
138
|
const pollInterval = opts.pollIntervalMs ?? 1000;
|
|
133
139
|
const timeoutMs = opts.timeoutMs ?? 600_000;
|
|
134
140
|
const deadline = Date.now() + timeoutMs;
|
|
135
|
-
const nudgeEnabled = opts
|
|
141
|
+
const nudgeEnabled = resolveNudgeEnabled(opts, cwd);
|
|
136
142
|
const nudgeTracker = nudgeEnabled ? new NudgeTracker(opts.nudge) : undefined;
|
|
137
143
|
const nudgeAttempts = [];
|
|
138
144
|
let snapshot = pollSnapshot(paths, config, tmux, { consumeOutbox: true });
|
|
@@ -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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"}
|