oh-my-codex 0.17.0 → 0.17.2

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 (178) hide show
  1. package/Cargo.lock +5 -5
  2. package/Cargo.toml +1 -1
  3. package/dist/cli/__tests__/question.test.js +2 -0
  4. package/dist/cli/__tests__/question.test.js.map +1 -1
  5. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js +3 -0
  6. package/dist/cli/__tests__/ralph-goal-mode-contract.test.js.map +1 -1
  7. package/dist/cli/__tests__/ralph.test.js +0 -124
  8. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  9. package/dist/cli/__tests__/setup-install-mode.test.js +156 -3
  10. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -1
  11. package/dist/cli/__tests__/setup-refresh.test.js +3 -3
  12. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  13. package/dist/cli/__tests__/team.test.js +166 -42
  14. package/dist/cli/__tests__/team.test.js.map +1 -1
  15. package/dist/cli/doctor.js +9 -4
  16. package/dist/cli/doctor.js.map +1 -1
  17. package/dist/cli/plugin-marketplace.d.ts +5 -1
  18. package/dist/cli/plugin-marketplace.d.ts.map +1 -1
  19. package/dist/cli/plugin-marketplace.js +31 -2
  20. package/dist/cli/plugin-marketplace.js.map +1 -1
  21. package/dist/cli/question.d.ts +1 -1
  22. package/dist/cli/question.d.ts.map +1 -1
  23. package/dist/cli/question.js +98 -4
  24. package/dist/cli/question.js.map +1 -1
  25. package/dist/cli/ralph.d.ts.map +1 -1
  26. package/dist/cli/ralph.js +1 -49
  27. package/dist/cli/ralph.js.map +1 -1
  28. package/dist/cli/setup.d.ts +1 -0
  29. package/dist/cli/setup.d.ts.map +1 -1
  30. package/dist/cli/setup.js +75 -9
  31. package/dist/cli/setup.js.map +1 -1
  32. package/dist/cli/team.d.ts.map +1 -1
  33. package/dist/cli/team.js +21 -29
  34. package/dist/cli/team.js.map +1 -1
  35. package/dist/config/generator.d.ts +4 -0
  36. package/dist/config/generator.d.ts.map +1 -1
  37. package/dist/config/generator.js +58 -0
  38. package/dist/config/generator.js.map +1 -1
  39. package/dist/hooks/__tests__/agents-overlay.test.js +29 -0
  40. package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
  41. package/dist/hooks/__tests__/session.test.js +126 -1
  42. package/dist/hooks/__tests__/session.test.js.map +1 -1
  43. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  44. package/dist/hooks/agents-overlay.js +6 -3
  45. package/dist/hooks/agents-overlay.js.map +1 -1
  46. package/dist/hooks/session.d.ts +11 -3
  47. package/dist/hooks/session.d.ts.map +1 -1
  48. package/dist/hooks/session.js +68 -6
  49. package/dist/hooks/session.js.map +1 -1
  50. package/dist/hud/__tests__/reconcile.test.js +63 -0
  51. package/dist/hud/__tests__/reconcile.test.js.map +1 -1
  52. package/dist/hud/__tests__/tmux.test.d.ts +2 -0
  53. package/dist/hud/__tests__/tmux.test.d.ts.map +1 -0
  54. package/dist/hud/__tests__/tmux.test.js +92 -0
  55. package/dist/hud/__tests__/tmux.test.js.map +1 -0
  56. package/dist/hud/reconcile.d.ts +2 -0
  57. package/dist/hud/reconcile.d.ts.map +1 -1
  58. package/dist/hud/reconcile.js +14 -1
  59. package/dist/hud/reconcile.js.map +1 -1
  60. package/dist/hud/tmux.d.ts +12 -0
  61. package/dist/hud/tmux.d.ts.map +1 -1
  62. package/dist/hud/tmux.js +88 -0
  63. package/dist/hud/tmux.js.map +1 -1
  64. package/dist/mcp/__tests__/hermes-bridge.test.js +82 -1
  65. package/dist/mcp/__tests__/hermes-bridge.test.js.map +1 -1
  66. package/dist/mcp/hermes-bridge.d.ts +34 -1
  67. package/dist/mcp/hermes-bridge.d.ts.map +1 -1
  68. package/dist/mcp/hermes-bridge.js +75 -0
  69. package/dist/mcp/hermes-bridge.js.map +1 -1
  70. package/dist/mcp/hermes-server.d.ts +111 -6
  71. package/dist/mcp/hermes-server.d.ts.map +1 -1
  72. package/dist/mcp/hermes-server.js +38 -1
  73. package/dist/mcp/hermes-server.js.map +1 -1
  74. package/dist/pipeline/__tests__/stages.test.js +18 -9
  75. package/dist/pipeline/__tests__/stages.test.js.map +1 -1
  76. package/dist/pipeline/stages/team-exec.d.ts.map +1 -1
  77. package/dist/pipeline/stages/team-exec.js +2 -7
  78. package/dist/pipeline/stages/team-exec.js.map +1 -1
  79. package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js +111 -269
  80. package/dist/planning/__tests__/approved-execution-lifecycle-matrix.test.js.map +1 -1
  81. package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js +31 -72
  82. package/dist/planning/__tests__/approved-launch-hint-lineage-matrix.test.js.map +1 -1
  83. package/dist/planning/__tests__/artifacts.test.js +27 -372
  84. package/dist/planning/__tests__/artifacts.test.js.map +1 -1
  85. package/dist/planning/artifacts.d.ts +1 -14
  86. package/dist/planning/artifacts.d.ts.map +1 -1
  87. package/dist/planning/artifacts.js +11 -31
  88. package/dist/planning/artifacts.js.map +1 -1
  89. package/dist/question/__tests__/state.test.js +349 -1
  90. package/dist/question/__tests__/state.test.js.map +1 -1
  91. package/dist/question/__tests__/ui.test.js +6 -6
  92. package/dist/question/__tests__/ui.test.js.map +1 -1
  93. package/dist/question/events.d.ts +53 -0
  94. package/dist/question/events.d.ts.map +1 -0
  95. package/dist/question/events.js +201 -0
  96. package/dist/question/events.js.map +1 -0
  97. package/dist/question/state.d.ts +30 -2
  98. package/dist/question/state.d.ts.map +1 -1
  99. package/dist/question/state.js +276 -5
  100. package/dist/question/state.js.map +1 -1
  101. package/dist/question/types.d.ts +1 -0
  102. package/dist/question/types.d.ts.map +1 -1
  103. package/dist/question/types.js.map +1 -1
  104. package/dist/question/ui.d.ts.map +1 -1
  105. package/dist/question/ui.js +3 -18
  106. package/dist/question/ui.js.map +1 -1
  107. package/dist/ralph/__tests__/completion-audit.test.js +39 -0
  108. package/dist/ralph/__tests__/completion-audit.test.js.map +1 -1
  109. package/dist/scripts/__tests__/codex-native-hook.test.js +111 -1
  110. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  111. package/dist/scripts/__tests__/run-test-files.test.js +22 -0
  112. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -1
  113. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  114. package/dist/scripts/codex-native-hook.js +93 -1
  115. package/dist/scripts/codex-native-hook.js.map +1 -1
  116. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  117. package/dist/scripts/codex-native-pre-post.js +12 -6
  118. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  119. package/dist/scripts/run-test-files.js +12 -1
  120. package/dist/scripts/run-test-files.js.map +1 -1
  121. package/dist/team/__tests__/approved-execution.test.js +25 -24
  122. package/dist/team/__tests__/approved-execution.test.js.map +1 -1
  123. package/dist/team/__tests__/runtime.test.js +173 -26
  124. package/dist/team/__tests__/runtime.test.js.map +1 -1
  125. package/dist/team/__tests__/scaling.test.js +66 -17
  126. package/dist/team/__tests__/scaling.test.js.map +1 -1
  127. package/dist/team/__tests__/tmux-session.test.js +42 -0
  128. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  129. package/dist/team/__tests__/worker-bootstrap.test.js +205 -0
  130. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  131. package/dist/team/approved-execution.d.ts +13 -0
  132. package/dist/team/approved-execution.d.ts.map +1 -1
  133. package/dist/team/approved-execution.js +65 -30
  134. package/dist/team/approved-execution.js.map +1 -1
  135. package/dist/team/runtime.d.ts.map +1 -1
  136. package/dist/team/runtime.js +28 -24
  137. package/dist/team/runtime.js.map +1 -1
  138. package/dist/team/scaling.d.ts.map +1 -1
  139. package/dist/team/scaling.js +7 -8
  140. package/dist/team/scaling.js.map +1 -1
  141. package/dist/team/tmux-session.d.ts.map +1 -1
  142. package/dist/team/tmux-session.js +48 -2
  143. package/dist/team/tmux-session.js.map +1 -1
  144. package/dist/team/ultragoal-context.d.ts +35 -0
  145. package/dist/team/ultragoal-context.d.ts.map +1 -0
  146. package/dist/team/ultragoal-context.js +191 -0
  147. package/dist/team/ultragoal-context.js.map +1 -0
  148. package/dist/ultragoal/__tests__/docs-contract.test.js +19 -0
  149. package/dist/ultragoal/__tests__/docs-contract.test.js.map +1 -1
  150. package/package.json +1 -1
  151. package/plugins/oh-my-codex/.codex-plugin/plugin.json +1 -1
  152. package/plugins/oh-my-codex/skills/plan/SKILL.md +3 -3
  153. package/plugins/oh-my-codex/skills/ralph/SKILL.md +2 -2
  154. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +1 -1
  155. package/plugins/oh-my-codex/skills/team/SKILL.md +6 -0
  156. package/plugins/oh-my-codex/skills/ultragoal/SKILL.md +11 -0
  157. package/skills/plan/SKILL.md +3 -3
  158. package/skills/ralph/SKILL.md +2 -2
  159. package/skills/ralplan/SKILL.md +1 -1
  160. package/skills/team/SKILL.md +6 -0
  161. package/skills/ultragoal/SKILL.md +11 -0
  162. package/src/scripts/__tests__/codex-native-hook.test.ts +133 -1
  163. package/src/scripts/__tests__/run-test-files.test.ts +32 -0
  164. package/src/scripts/codex-native-hook.ts +121 -2
  165. package/src/scripts/codex-native-pre-post.ts +12 -6
  166. package/src/scripts/run-test-files.ts +13 -2
  167. package/dist/planning/__tests__/context-pack-status.test.d.ts +0 -2
  168. package/dist/planning/__tests__/context-pack-status.test.d.ts.map +0 -1
  169. package/dist/planning/__tests__/context-pack-status.test.js +0 -795
  170. package/dist/planning/__tests__/context-pack-status.test.js.map +0 -1
  171. package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts +0 -2
  172. package/dist/planning/__tests__/ready-context-pack-role-refs.test.d.ts.map +0 -1
  173. package/dist/planning/__tests__/ready-context-pack-role-refs.test.js +0 -612
  174. package/dist/planning/__tests__/ready-context-pack-role-refs.test.js.map +0 -1
  175. package/dist/planning/context-pack-status.d.ts +0 -73
  176. package/dist/planning/context-pack-status.d.ts.map +0 -1
  177. package/dist/planning/context-pack-status.js +0 -745
  178. package/dist/planning/context-pack-status.js.map +0 -1
@@ -0,0 +1,201 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { appendFile, mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { sleep } from '../utils/sleep.js';
5
+ import { getBaseStateDir } from '../mcp/state-paths.js';
6
+ const QUESTION_EVENT_LOCK_STALE_MS = 30_000;
7
+ const QUESTION_EVENT_LOCK_TIMEOUT_MS = 10_000;
8
+ export function getQuestionEventsPath(cwd) {
9
+ return join(getBaseStateDir(cwd), 'question-events.jsonl');
10
+ }
11
+ function questionEventLockOwnerToken() {
12
+ return `${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}`;
13
+ }
14
+ async function maybeRecoverStaleQuestionEventLock(lockDir) {
15
+ try {
16
+ const info = await stat(lockDir);
17
+ if (Date.now() - info.mtimeMs > QUESTION_EVENT_LOCK_STALE_MS) {
18
+ await rm(lockDir, { recursive: true, force: true });
19
+ return true;
20
+ }
21
+ }
22
+ catch {
23
+ }
24
+ return false;
25
+ }
26
+ async function withQuestionEventLock(eventsPath, lockName, fn) {
27
+ const lockDir = `${eventsPath}.${lockName}.lock`;
28
+ const ownerPath = join(lockDir, 'owner');
29
+ const ownerToken = questionEventLockOwnerToken();
30
+ const deadline = Date.now() + QUESTION_EVENT_LOCK_TIMEOUT_MS;
31
+ await mkdir(dirname(lockDir), { recursive: true });
32
+ while (true) {
33
+ try {
34
+ await mkdir(lockDir);
35
+ try {
36
+ await writeFile(ownerPath, ownerToken, 'utf8');
37
+ }
38
+ catch (error) {
39
+ await rm(lockDir, { recursive: true, force: true });
40
+ throw error;
41
+ }
42
+ break;
43
+ }
44
+ catch (error) {
45
+ const err = error;
46
+ if (err.code !== 'EEXIST')
47
+ throw error;
48
+ if (await maybeRecoverStaleQuestionEventLock(lockDir))
49
+ continue;
50
+ if (Date.now() > deadline) {
51
+ throw new Error(`Timed out acquiring question event lock for ${eventsPath}`);
52
+ }
53
+ await sleep(25);
54
+ }
55
+ }
56
+ try {
57
+ return await fn();
58
+ }
59
+ finally {
60
+ try {
61
+ const currentOwner = await readFile(ownerPath, 'utf8');
62
+ if (currentOwner.trim() === ownerToken) {
63
+ await rm(lockDir, { recursive: true, force: true });
64
+ }
65
+ }
66
+ catch {
67
+ }
68
+ }
69
+ }
70
+ function parseQuestionEventLines(contents, options = {}) {
71
+ const lines = contents.split(/\r?\n/).filter(Boolean);
72
+ return lines.flatMap((line) => {
73
+ try {
74
+ const parsed = JSON.parse(line);
75
+ if (options.type && parsed.type !== options.type)
76
+ return [];
77
+ return [parsed];
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ });
83
+ }
84
+ async function readAllQuestionEventsFromPath(path, options = {}) {
85
+ if (!existsSync(path))
86
+ return [];
87
+ return parseQuestionEventLines(await readFile(path, 'utf-8'), options);
88
+ }
89
+ function safeString(value) {
90
+ return typeof value === 'string' ? value.trim() : '';
91
+ }
92
+ export function resolveQuestionRunId(env = process.env) {
93
+ return safeString(env.OMX_RUN_ID) || safeString(env.OMX_RUN_ID_OVERRIDE) || safeString(env.OMX_CURRENT_RUN_ID) || undefined;
94
+ }
95
+ function truncateSummary(value, max = 600) {
96
+ const normalized = value.replace(/\s+/g, ' ').trim();
97
+ return normalized.length > max ? `${normalized.slice(0, max - 1)}…` : normalized;
98
+ }
99
+ export function summarizeQuestionContext(record) {
100
+ const parts = [];
101
+ if (record.header)
102
+ parts.push(record.header);
103
+ if (record.question)
104
+ parts.push(record.question);
105
+ const questions = record.questions ?? [];
106
+ if (questions.length > 1)
107
+ parts.push(`${questions.length} structured questions`);
108
+ return truncateSummary(parts.join(' — ') || record.question_id);
109
+ }
110
+ export function buildQuestionEvent(type, record, options = {}) {
111
+ const now = options.now ?? new Date();
112
+ const answerCount = record.answers?.length ?? (record.answer ? 1 : 0);
113
+ const runId = options.runId ?? record.run_id ?? resolveQuestionRunId();
114
+ return {
115
+ kind: 'omx.question-event/v1',
116
+ event_id: `${type}-${record.question_id}-${now.toISOString().replace(/[:.]/g, '-')}`,
117
+ type,
118
+ question_id: record.question_id,
119
+ ...(record.session_id ? { session_id: record.session_id } : {}),
120
+ ...(runId ? { run_id: runId } : {}),
121
+ created_at: now.toISOString(),
122
+ question_created_at: record.created_at,
123
+ status: record.status,
124
+ ...(record.source ? { source: record.source } : {}),
125
+ context_summary: summarizeQuestionContext(record),
126
+ option_schema: record.questions,
127
+ state: {
128
+ ...(options.recordPath ? { record_path: options.recordPath } : {}),
129
+ ...(record.renderer ? { renderer: record.renderer } : {}),
130
+ ...(typeof options.timeoutMs === 'number' ? { timeout_ms: options.timeoutMs } : {}),
131
+ ...(record.error ? { error: record.error } : {}),
132
+ ...(answerCount ? { answer_count: answerCount } : {}),
133
+ },
134
+ };
135
+ }
136
+ export async function appendQuestionEvent(cwd, type, record, options = {}) {
137
+ const event = buildQuestionEvent(type, record, options);
138
+ const path = getQuestionEventsPath(cwd);
139
+ await mkdir(dirname(path), { recursive: true });
140
+ await appendFile(path, `${JSON.stringify(event)}\n`);
141
+ return event;
142
+ }
143
+ export async function appendQuestionAnsweredEventOnce(cwd, record, options = {}) {
144
+ const path = getQuestionEventsPath(cwd);
145
+ return await withQuestionEventLock(path, `answered-${record.question_id}`, async () => {
146
+ const existing = (await readAllQuestionEventsFromPath(path, { type: 'question-answered' }))
147
+ .find((event) => event.question_id === record.question_id);
148
+ if (existing)
149
+ return { event: existing, appended: false };
150
+ const event = await appendQuestionEvent(cwd, 'question-answered', record, options);
151
+ return { event, appended: true };
152
+ });
153
+ }
154
+ export async function readQuestionEvents(cwd, options = {}) {
155
+ const path = getQuestionEventsPath(cwd);
156
+ const limit = Math.max(1, Math.min(options.limit ?? 100, 1000));
157
+ const events = await readAllQuestionEventsFromPath(path, { type: options.type });
158
+ return events.slice(-limit);
159
+ }
160
+ export function normalizeSubmittedAnswers(record, raw) {
161
+ const rawAnswers = Array.isArray(raw)
162
+ ? raw
163
+ : raw && typeof raw === 'object' && Array.isArray(raw.answers)
164
+ ? raw.answers
165
+ : raw && typeof raw === 'object' && raw.answer
166
+ ? [{ question_id: record.questions?.[0]?.id ?? 'q-1', index: 0, answer: raw.answer }]
167
+ : [];
168
+ if (rawAnswers.length === 0)
169
+ throw new Error('answer payload must include answer or answers[]');
170
+ const validQuestionIds = new Set((record.questions ?? []).map((question) => question.id));
171
+ if (validQuestionIds.size === 0)
172
+ validQuestionIds.add('q-1');
173
+ const seen = new Set();
174
+ return rawAnswers.map((entry, index) => {
175
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry))
176
+ throw new Error(`answers[${index}] must be an object`);
177
+ const object = entry;
178
+ const questionId = safeString(object.question_id) || (record.questions?.[index]?.id ?? (index === 0 ? 'q-1' : ''));
179
+ if (!questionId || !validQuestionIds.has(questionId))
180
+ throw new Error(`answers[${index}].question_id is unknown for this question: ${questionId || '<missing>'}`);
181
+ if (seen.has(questionId))
182
+ throw new Error(`answers question_id must be unique: ${questionId}`);
183
+ seen.add(questionId);
184
+ const answer = object.answer;
185
+ if (!answer || typeof answer !== 'object' || Array.isArray(answer))
186
+ throw new Error(`answers[${index}].answer must be an object`);
187
+ const answerObject = answer;
188
+ const kind = safeString(answerObject.kind);
189
+ if (!['option', 'other', 'multi'].includes(kind))
190
+ throw new Error(`answers[${index}].answer.kind must be option, other, or multi`);
191
+ if (!Array.isArray(answerObject.selected_labels) || !Array.isArray(answerObject.selected_values)) {
192
+ throw new Error(`answers[${index}].answer must include selected_labels[] and selected_values[]`);
193
+ }
194
+ return {
195
+ question_id: questionId,
196
+ index: Number.isInteger(object.index) ? object.index : index,
197
+ answer: answerObject,
198
+ };
199
+ });
200
+ }
201
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/question/events.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,43 @@
1
1
  import type { QuestionAnswer, QuestionAnswerEntry, QuestionInput, QuestionRecord, QuestionRendererState, QuestionStatus } from './types.js';
2
+ export type InjectQuestionAnswersToPane = (paneId: string, answers: QuestionAnswerEntry[]) => boolean;
3
+ export type QuestionSubmitFailureCode = 'question_unknown' | 'question_not_open' | 'question_invalid_answer';
4
+ export declare class QuestionSubmitError extends Error {
5
+ readonly code: QuestionSubmitFailureCode;
6
+ constructor(code: QuestionSubmitFailureCode, message: string);
7
+ }
2
8
  export declare function getQuestionStateDir(cwd: string, sessionId?: string): string;
3
9
  export declare function getQuestionRecordPath(cwd: string, questionId: string, sessionId?: string): string;
4
10
  export declare function writeQuestionRecord(recordPath: string, record: QuestionRecord): Promise<void>;
5
11
  export declare function readQuestionRecord(recordPath: string): Promise<QuestionRecord | null>;
6
- export declare function createQuestionRecord(cwd: string, input: QuestionInput, sessionId?: string, now?: Date): Promise<{
12
+ export declare function createQuestionRecord(cwd: string, input: QuestionInput, sessionId?: string, now?: Date, options?: {
13
+ emitEvent?: boolean;
14
+ timeoutMs?: number;
15
+ runId?: string;
16
+ }): Promise<{
7
17
  recordPath: string;
8
18
  record: QuestionRecord;
9
19
  }>;
10
20
  export declare function updateQuestionRecord(recordPath: string, updater: (record: QuestionRecord) => QuestionRecord): Promise<QuestionRecord>;
11
21
  export declare function markQuestionPrompting(recordPath: string, renderer: QuestionRendererState): Promise<QuestionRecord>;
12
- export declare function markQuestionAnswered(recordPath: string, answerOrAnswers: QuestionAnswer | QuestionAnswerEntry[]): Promise<QuestionRecord>;
22
+ export declare function markQuestionAnswered(recordPath: string, answerOrAnswers: QuestionAnswer | QuestionAnswerEntry[], options?: {
23
+ injectAnswersToPane?: InjectQuestionAnswersToPane;
24
+ }): Promise<QuestionRecord>;
25
+ export declare function listQuestionRecords(cwd: string, options?: {
26
+ sessionId?: string;
27
+ status?: QuestionStatus | 'open';
28
+ limit?: number;
29
+ }): Promise<Array<{
30
+ recordPath: string;
31
+ record: QuestionRecord;
32
+ }>>;
33
+ export declare function submitQuestionAnswerById(cwd: string, questionId: string, answerPayload: unknown, options?: {
34
+ sessionId?: string;
35
+ runId?: string;
36
+ injectAnswersToPane?: InjectQuestionAnswersToPane;
37
+ }): Promise<{
38
+ recordPath: string;
39
+ record: QuestionRecord;
40
+ }>;
13
41
  export declare function markQuestionTerminalError(recordPath: string, status: Extract<QuestionStatus, 'aborted' | 'error'>, code: string, message: string): Promise<QuestionRecord>;
14
42
  export declare function isTerminalQuestionStatus(status: QuestionStatus): boolean;
15
43
  export declare function waitForQuestionTerminalState(recordPath: string, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/question/state.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,cAAc,EACf,MAAM,YAAY,CAAC;AASpB,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjG;AAED,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnG;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAI3F;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,aAAa,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,GAAG,OAAa,GACf,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC,CAwBzD;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,cAAc,GAClD,OAAO,CAAC,cAAc,CAAC,CAMzB;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,cAAc,CAAC,CAOzB;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,cAAc,GAAG,mBAAmB,EAAE,GACtD,OAAO,CAAC,cAAc,CAAC,CAezB;AAED,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,GAAG,OAAO,CAAC,EACpD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAWzB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAExE;AAED,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC;IACpD,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,MAAM,CAAC;CACtD,GACL,OAAO,CAAC,cAAc,CAAC,CAoBzB"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/question/state.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,24 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { mkdir, readFile } from 'node:fs/promises';
2
+ import { mkdir, readFile, readdir, rm, stat, writeFile } from 'node:fs/promises';
3
3
  import { dirname, join } from 'node:path';
4
4
  import { getStateDir } from '../mcp/state-paths.js';
5
5
  import { writeAtomic } from '../team/state.js';
6
6
  import { sleep } from '../utils/sleep.js';
7
- import { getNormalizedQuestionType, normalizeQuestionInput } from './types.js';
7
+ import { appendQuestionAnsweredEventOnce, appendQuestionEvent, normalizeSubmittedAnswers, resolveQuestionRunId } from './events.js';
8
+ import { injectQuestionAnswersToPane as defaultInjectQuestionAnswersToPane } from './renderer.js';
9
+ import { getNormalizedQuestionType, isMultiAnswerableQuestion, normalizeQuestionInput } from './types.js';
8
10
  const QUESTION_NAMESPACE = 'questions';
9
11
  const DEFAULT_POLL_INTERVAL_MS = 100;
12
+ const QUESTION_SUBMIT_LOCK_STALE_MS = 30_000;
13
+ const QUESTION_SUBMIT_LOCK_TIMEOUT_MS = 10_000;
14
+ export class QuestionSubmitError extends Error {
15
+ code;
16
+ constructor(code, message) {
17
+ super(message);
18
+ this.name = 'QuestionSubmitError';
19
+ this.code = code;
20
+ }
21
+ }
10
22
  function buildQuestionId(now = new Date()) {
11
23
  return `question-${now.toISOString().replace(/[:.]/g, '-')}-$${Math.random().toString(16).slice(2, 10)}`.replace('$', '');
12
24
  }
@@ -26,10 +38,11 @@ export async function readQuestionRecord(recordPath) {
26
38
  const parsed = JSON.parse(await readFile(recordPath, 'utf-8'));
27
39
  return parsed;
28
40
  }
29
- export async function createQuestionRecord(cwd, input, sessionId, now = new Date()) {
41
+ export async function createQuestionRecord(cwd, input, sessionId, now = new Date(), options = {}) {
30
42
  const normalizedInput = normalizeQuestionInput(input);
31
43
  const questionId = buildQuestionId(now);
32
44
  const nowIso = now.toISOString();
45
+ const runId = options.runId ?? resolveQuestionRunId();
33
46
  const record = {
34
47
  kind: 'omx.question/v1',
35
48
  question_id: questionId,
@@ -37,6 +50,7 @@ export async function createQuestionRecord(cwd, input, sessionId, now = new Date
37
50
  created_at: nowIso,
38
51
  updated_at: nowIso,
39
52
  status: 'pending',
53
+ ...(runId ? { run_id: runId } : {}),
40
54
  ...(normalizedInput.header ? { header: normalizedInput.header } : {}),
41
55
  question: normalizedInput.question,
42
56
  options: normalizedInput.options,
@@ -49,6 +63,14 @@ export async function createQuestionRecord(cwd, input, sessionId, now = new Date
49
63
  };
50
64
  const recordPath = getQuestionRecordPath(cwd, questionId, sessionId);
51
65
  await writeQuestionRecord(recordPath, record);
66
+ if (options.emitEvent) {
67
+ await appendQuestionEvent(cwd, 'question-created', record, {
68
+ recordPath,
69
+ timeoutMs: options.timeoutMs,
70
+ runId: options.runId,
71
+ now,
72
+ });
73
+ }
52
74
  return { recordPath, record };
53
75
  }
54
76
  export async function updateQuestionRecord(recordPath, updater) {
@@ -67,8 +89,8 @@ export async function markQuestionPrompting(recordPath, renderer) {
67
89
  renderer,
68
90
  }));
69
91
  }
70
- export async function markQuestionAnswered(recordPath, answerOrAnswers) {
71
- return updateQuestionRecord(recordPath, (record) => {
92
+ export async function markQuestionAnswered(recordPath, answerOrAnswers, options = {}) {
93
+ const updated = await updateQuestionRecord(recordPath, (record) => {
72
94
  const answers = Array.isArray(answerOrAnswers)
73
95
  ? answerOrAnswers
74
96
  : [{ question_id: record.questions?.[0]?.id ?? 'q-1', index: 0, answer: answerOrAnswers }];
@@ -82,6 +104,255 @@ export async function markQuestionAnswered(recordPath, answerOrAnswers) {
82
104
  error: undefined,
83
105
  };
84
106
  });
107
+ maybeInjectQuestionAnswersToReturnPane(updated, options.injectAnswersToPane);
108
+ return updated;
109
+ }
110
+ function maybeInjectQuestionAnswersToReturnPane(record, injectAnswersToPane = defaultInjectQuestionAnswersToPane) {
111
+ const returnTarget = record.renderer?.return_target;
112
+ if (record.renderer?.return_transport !== 'tmux-send-keys')
113
+ return false;
114
+ if (typeof returnTarget !== 'string' || !/^%\d+$/.test(returnTarget.trim()))
115
+ return false;
116
+ if (!record.answers?.length)
117
+ return false;
118
+ return injectAnswersToPane(returnTarget.trim(), record.answers);
119
+ }
120
+ function isValidQuestionId(questionId) {
121
+ return /^question-[A-Za-z0-9_.-]+$/.test(questionId) && !questionId.includes('..');
122
+ }
123
+ async function listQuestionRecordsInDir(dir) {
124
+ if (!existsSync(dir))
125
+ return [];
126
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
127
+ const records = [];
128
+ for (const entry of entries) {
129
+ if (!entry.isFile() || !entry.name.endsWith('.json'))
130
+ continue;
131
+ const recordPath = join(dir, entry.name);
132
+ const record = await readQuestionRecord(recordPath).catch(() => null);
133
+ if (record?.kind === 'omx.question/v1')
134
+ records.push({ recordPath, record });
135
+ }
136
+ return records;
137
+ }
138
+ function lockOwnerToken() {
139
+ return `${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}`;
140
+ }
141
+ async function maybeRecoverStaleQuestionLock(lockDir) {
142
+ try {
143
+ const info = await stat(lockDir);
144
+ if (Date.now() - info.mtimeMs > QUESTION_SUBMIT_LOCK_STALE_MS) {
145
+ await rm(lockDir, { recursive: true, force: true });
146
+ return true;
147
+ }
148
+ }
149
+ catch {
150
+ }
151
+ return false;
152
+ }
153
+ async function withQuestionSubmitLock(recordPath, fn) {
154
+ const lockDir = `${recordPath}.submit.lock`;
155
+ const ownerPath = join(lockDir, 'owner');
156
+ const ownerToken = lockOwnerToken();
157
+ const deadline = Date.now() + QUESTION_SUBMIT_LOCK_TIMEOUT_MS;
158
+ await mkdir(dirname(lockDir), { recursive: true });
159
+ while (true) {
160
+ try {
161
+ await mkdir(lockDir);
162
+ try {
163
+ await writeFile(ownerPath, ownerToken, 'utf8');
164
+ }
165
+ catch (error) {
166
+ await rm(lockDir, { recursive: true, force: true });
167
+ throw error;
168
+ }
169
+ break;
170
+ }
171
+ catch (error) {
172
+ const err = error;
173
+ if (err.code !== 'EEXIST')
174
+ throw error;
175
+ if (await maybeRecoverStaleQuestionLock(lockDir))
176
+ continue;
177
+ if (Date.now() > deadline) {
178
+ throw new QuestionSubmitError('question_not_open', `Timed out acquiring submit lock for ${recordPath}`);
179
+ }
180
+ await sleep(25);
181
+ }
182
+ }
183
+ try {
184
+ return await fn();
185
+ }
186
+ finally {
187
+ try {
188
+ const currentOwner = await readFile(ownerPath, 'utf8');
189
+ if (currentOwner.trim() === ownerToken) {
190
+ await rm(lockDir, { recursive: true, force: true });
191
+ }
192
+ }
193
+ catch {
194
+ }
195
+ }
196
+ }
197
+ function validateStringArray(value, path) {
198
+ if (!Array.isArray(value) || !value.every((item) => typeof item === 'string' && item.trim().length > 0)) {
199
+ throw new Error(`${path} must be a non-empty string array`);
200
+ }
201
+ return value;
202
+ }
203
+ function assertNoDuplicateValues(values, path) {
204
+ const seen = new Set();
205
+ for (const value of values) {
206
+ if (seen.has(value))
207
+ throw new Error(`${path} must not contain duplicate values: ${value}`);
208
+ seen.add(value);
209
+ }
210
+ }
211
+ function expectedSelectedLabelsForValues(question, selectedValues, otherText) {
212
+ const optionLabelsByValue = new Map(question.options.map((option) => [option.value, option.label]));
213
+ return selectedValues.map((value) => {
214
+ const optionLabel = optionLabelsByValue.get(value);
215
+ if (optionLabel)
216
+ return optionLabel;
217
+ if (question.allow_other && otherText && value === otherText)
218
+ return question.other_label;
219
+ throw new Error(`selected value is not in the option schema: ${value}`);
220
+ });
221
+ }
222
+ function assertSelectedLabelsMatch(selectedLabels, expectedLabels, path) {
223
+ if (selectedLabels.length !== expectedLabels.length) {
224
+ throw new Error(`${path} cardinality must match selected values`);
225
+ }
226
+ const mismatchIndex = selectedLabels.findIndex((label, index) => label !== expectedLabels[index]);
227
+ if (mismatchIndex !== -1) {
228
+ throw new Error(`${path}[${mismatchIndex}] must match the selected value label`);
229
+ }
230
+ }
231
+ function questionForAnswer(record, entry) {
232
+ const question = (record.questions ?? []).find((item) => item.id === entry.question_id);
233
+ if (question)
234
+ return question;
235
+ if (entry.question_id === 'q-1') {
236
+ return {
237
+ id: 'q-1',
238
+ ...(record.header ? { header: record.header } : {}),
239
+ question: record.question,
240
+ options: record.options,
241
+ allow_other: record.allow_other,
242
+ other_label: record.other_label,
243
+ multi_select: record.multi_select,
244
+ type: getNormalizedQuestionType(record),
245
+ };
246
+ }
247
+ throw new Error(`answers[${entry.index}].question_id is unknown for this question: ${entry.question_id}`);
248
+ }
249
+ function validateAnswerAgainstQuestion(question, entry) {
250
+ const { answer } = entry;
251
+ const selectedValues = validateStringArray(answer.selected_values, `answers[${entry.index}].answer.selected_values`);
252
+ const selectedLabels = validateStringArray(answer.selected_labels, `answers[${entry.index}].answer.selected_labels`);
253
+ assertNoDuplicateValues(selectedValues, `answers[${entry.index}].answer.selected_values`);
254
+ const optionValues = new Set(question.options.map((option) => option.value));
255
+ const multi = isMultiAnswerableQuestion(question);
256
+ const hasOtherText = typeof answer.other_text === 'string' && answer.other_text.trim().length > 0;
257
+ const otherText = hasOtherText ? answer.other_text.trim() : undefined;
258
+ const outOfSchemaValues = selectedValues.filter((value) => !optionValues.has(value));
259
+ if (answer.kind === 'other') {
260
+ if (!question.allow_other)
261
+ throw new Error(`answers[${entry.index}].answer.kind=other is not allowed for this question`);
262
+ if (multi)
263
+ throw new Error(`answers[${entry.index}].answer.kind=other is only valid for single-answerable questions`);
264
+ if (!otherText)
265
+ throw new Error(`answers[${entry.index}].answer.other_text must be a non-empty string`);
266
+ if (selectedValues.length !== 1 || selectedValues[0] !== otherText || answer.value !== otherText) {
267
+ throw new Error(`answers[${entry.index}].answer other value must match selected_values[0] and other_text`);
268
+ }
269
+ assertSelectedLabelsMatch(selectedLabels, [question.other_label], `answers[${entry.index}].answer.selected_labels`);
270
+ return;
271
+ }
272
+ if (answer.kind === 'option') {
273
+ if (multi)
274
+ throw new Error(`answers[${entry.index}].answer.kind=option is only valid for single-answerable questions`);
275
+ if (selectedValues.length !== 1 || selectedLabels.length !== 1) {
276
+ throw new Error(`answers[${entry.index}].answer must select exactly one option`);
277
+ }
278
+ const selectedValue = selectedValues[0];
279
+ if (!optionValues.has(selectedValue)) {
280
+ throw new Error(`answers[${entry.index}].answer selected value is not in the option schema: ${selectedValue}`);
281
+ }
282
+ if (answer.value !== selectedValue) {
283
+ throw new Error(`answers[${entry.index}].answer.value must match selected_values[0]`);
284
+ }
285
+ assertSelectedLabelsMatch(selectedLabels, expectedSelectedLabelsForValues(question, selectedValues, undefined), `answers[${entry.index}].answer.selected_labels`);
286
+ return;
287
+ }
288
+ if (!multi)
289
+ throw new Error(`answers[${entry.index}].answer.kind=multi is only valid for multi-answerable questions`);
290
+ if (!Array.isArray(answer.value))
291
+ throw new Error(`answers[${entry.index}].answer.value must be an array for multi answers`);
292
+ if (answer.value.length !== selectedValues.length || answer.value.some((value, index) => value !== selectedValues[index])) {
293
+ throw new Error(`answers[${entry.index}].answer.value must match selected_values`);
294
+ }
295
+ if (outOfSchemaValues.length > 0) {
296
+ if (!question.allow_other) {
297
+ throw new Error(`answers[${entry.index}].answer selected value is not in the option schema: ${outOfSchemaValues[0]}`);
298
+ }
299
+ if (!otherText || outOfSchemaValues.length !== 1 || outOfSchemaValues[0] !== otherText) {
300
+ throw new Error(`answers[${entry.index}].answer out-of-schema selection must match a single other_text value`);
301
+ }
302
+ }
303
+ assertSelectedLabelsMatch(selectedLabels, expectedSelectedLabelsForValues(question, selectedValues, otherText), `answers[${entry.index}].answer.selected_labels`);
304
+ }
305
+ function validateSubmittedAnswersAgainstSchema(record, answers) {
306
+ const expectedQuestionIds = new Set((record.questions ?? []).map((question) => question.id));
307
+ if (expectedQuestionIds.size > 0 && answers.length !== expectedQuestionIds.size) {
308
+ throw new Error(`answer payload must include exactly one answer for each question (${expectedQuestionIds.size})`);
309
+ }
310
+ for (const entry of answers) {
311
+ validateAnswerAgainstQuestion(questionForAnswer(record, entry), entry);
312
+ }
313
+ }
314
+ export async function listQuestionRecords(cwd, options = {}) {
315
+ const dirs = [getQuestionStateDir(cwd, options.sessionId)];
316
+ const records = (await Promise.all(dirs.map((dir) => listQuestionRecordsInDir(dir)))).flat();
317
+ const filtered = records.filter(({ record }) => {
318
+ if (!options.status)
319
+ return true;
320
+ if (options.status === 'open')
321
+ return record.status === 'pending' || record.status === 'prompting';
322
+ return record.status === options.status;
323
+ });
324
+ const limit = Math.max(1, Math.min(options.limit ?? 100, 1000));
325
+ return filtered
326
+ .sort((left, right) => left.record.created_at.localeCompare(right.record.created_at))
327
+ .slice(-limit);
328
+ }
329
+ export async function submitQuestionAnswerById(cwd, questionId, answerPayload, options = {}) {
330
+ const normalizedQuestionId = questionId.trim();
331
+ if (!isValidQuestionId(normalizedQuestionId)) {
332
+ throw new QuestionSubmitError('question_unknown', `Unknown question id: ${questionId}`);
333
+ }
334
+ const recordPath = getQuestionRecordPath(cwd, normalizedQuestionId, options.sessionId);
335
+ return await withQuestionSubmitLock(recordPath, async () => {
336
+ const current = await readQuestionRecord(recordPath);
337
+ if (!current)
338
+ throw new QuestionSubmitError('question_unknown', `Unknown question id: ${normalizedQuestionId}`);
339
+ if (current.status !== 'pending' && current.status !== 'prompting') {
340
+ throw new QuestionSubmitError('question_not_open', `Question ${normalizedQuestionId} is ${current.status}; only pending or prompting questions can be answered.`);
341
+ }
342
+ let answers;
343
+ try {
344
+ answers = normalizeSubmittedAnswers(current, answerPayload);
345
+ validateSubmittedAnswersAgainstSchema(current, answers);
346
+ }
347
+ catch (error) {
348
+ throw new QuestionSubmitError('question_invalid_answer', error instanceof Error ? error.message : String(error));
349
+ }
350
+ const record = await markQuestionAnswered(recordPath, answers, {
351
+ injectAnswersToPane: options.injectAnswersToPane,
352
+ });
353
+ await appendQuestionAnsweredEventOnce(cwd, record, { recordPath, runId: options.runId });
354
+ return { recordPath, record };
355
+ });
85
356
  }
86
357
  export async function markQuestionTerminalError(recordPath, status, code, message) {
87
358
  return updateQuestionRecord(recordPath, (record) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/question/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/question/state.ts"],"names":[],"mappings":"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"}