oh-my-codex 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +17 -10
  2. package/dist/agents/definitions.d.ts.map +1 -1
  3. package/dist/agents/definitions.js +7 -13
  4. package/dist/agents/definitions.js.map +1 -1
  5. package/dist/agents/native-config.d.ts +20 -0
  6. package/dist/agents/native-config.d.ts.map +1 -0
  7. package/dist/agents/native-config.js +84 -0
  8. package/dist/agents/native-config.js.map +1 -0
  9. package/dist/catalog/__tests__/generator.test.d.ts +2 -0
  10. package/dist/catalog/__tests__/generator.test.d.ts.map +1 -0
  11. package/dist/catalog/__tests__/generator.test.js +42 -0
  12. package/dist/catalog/__tests__/generator.test.js.map +1 -0
  13. package/dist/catalog/__tests__/schema.test.d.ts +2 -0
  14. package/dist/catalog/__tests__/schema.test.d.ts.map +1 -0
  15. package/dist/catalog/__tests__/schema.test.js +33 -0
  16. package/dist/catalog/__tests__/schema.test.js.map +1 -0
  17. package/dist/catalog/reader.d.ts +19 -0
  18. package/dist/catalog/reader.d.ts.map +1 -0
  19. package/dist/catalog/reader.js +63 -0
  20. package/dist/catalog/reader.js.map +1 -0
  21. package/dist/catalog/schema.d.ts +32 -0
  22. package/dist/catalog/schema.d.ts.map +1 -0
  23. package/dist/catalog/schema.js +101 -0
  24. package/dist/catalog/schema.js.map +1 -0
  25. package/dist/cli/__tests__/index.test.js +109 -1
  26. package/dist/cli/__tests__/index.test.js.map +1 -1
  27. package/dist/cli/__tests__/setup-scope.test.d.ts +2 -0
  28. package/dist/cli/__tests__/setup-scope.test.d.ts.map +1 -0
  29. package/dist/cli/__tests__/setup-scope.test.js +164 -0
  30. package/dist/cli/__tests__/setup-scope.test.js.map +1 -0
  31. package/dist/cli/catalog-contract.d.ts +10 -0
  32. package/dist/cli/catalog-contract.d.ts.map +1 -0
  33. package/dist/cli/catalog-contract.js +24 -0
  34. package/dist/cli/catalog-contract.js.map +1 -0
  35. package/dist/cli/doctor.d.ts.map +1 -1
  36. package/dist/cli/doctor.js +7 -4
  37. package/dist/cli/doctor.js.map +1 -1
  38. package/dist/cli/index.d.ts +10 -0
  39. package/dist/cli/index.d.ts.map +1 -1
  40. package/dist/cli/index.js +124 -99
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/cli/setup.d.ts +3 -0
  43. package/dist/cli/setup.d.ts.map +1 -1
  44. package/dist/cli/setup.js +208 -47
  45. package/dist/cli/setup.js.map +1 -1
  46. package/dist/config/__tests__/generator-notify.test.js +28 -0
  47. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  48. package/dist/config/generator.d.ts +1 -0
  49. package/dist/config/generator.d.ts.map +1 -1
  50. package/dist/config/generator.js +34 -2
  51. package/dist/config/generator.js.map +1 -1
  52. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts +2 -0
  53. package/dist/hooks/code-simplifier/__tests__/index.test.d.ts.map +1 -0
  54. package/dist/hooks/code-simplifier/__tests__/index.test.js +135 -0
  55. package/dist/hooks/code-simplifier/__tests__/index.test.js.map +1 -0
  56. package/dist/hooks/code-simplifier/index.d.ts +74 -0
  57. package/dist/hooks/code-simplifier/index.d.ts.map +1 -0
  58. package/dist/hooks/code-simplifier/index.js +145 -0
  59. package/dist/hooks/code-simplifier/index.js.map +1 -0
  60. package/dist/hooks/emulator.d.ts.map +1 -1
  61. package/dist/hooks/emulator.js +0 -1
  62. package/dist/hooks/emulator.js.map +1 -1
  63. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  64. package/dist/hooks/keyword-detector.js +0 -3
  65. package/dist/hooks/keyword-detector.js.map +1 -1
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +1 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/notifications/__tests__/tmux.test.js +61 -1
  71. package/dist/notifications/__tests__/tmux.test.js.map +1 -1
  72. package/dist/notifications/__tests__/verbosity.test.d.ts +2 -0
  73. package/dist/notifications/__tests__/verbosity.test.d.ts.map +1 -0
  74. package/dist/notifications/__tests__/verbosity.test.js +202 -0
  75. package/dist/notifications/__tests__/verbosity.test.js.map +1 -0
  76. package/dist/notifications/config.d.ts +14 -1
  77. package/dist/notifications/config.d.ts.map +1 -1
  78. package/dist/notifications/config.js +52 -0
  79. package/dist/notifications/config.js.map +1 -1
  80. package/dist/notifications/formatter.d.ts.map +1 -1
  81. package/dist/notifications/formatter.js +14 -0
  82. package/dist/notifications/formatter.js.map +1 -1
  83. package/dist/notifications/index.d.ts +3 -3
  84. package/dist/notifications/index.d.ts.map +1 -1
  85. package/dist/notifications/index.js +14 -4
  86. package/dist/notifications/index.js.map +1 -1
  87. package/dist/notifications/tmux.d.ts +6 -0
  88. package/dist/notifications/tmux.d.ts.map +1 -1
  89. package/dist/notifications/tmux.js +31 -1
  90. package/dist/notifications/tmux.js.map +1 -1
  91. package/dist/notifications/types.d.ts +13 -0
  92. package/dist/notifications/types.d.ts.map +1 -1
  93. package/dist/team/__tests__/model-contract.test.d.ts +2 -0
  94. package/dist/team/__tests__/model-contract.test.d.ts.map +1 -0
  95. package/dist/team/__tests__/model-contract.test.js +47 -0
  96. package/dist/team/__tests__/model-contract.test.js.map +1 -0
  97. package/dist/team/__tests__/phase-controller.test.d.ts +2 -0
  98. package/dist/team/__tests__/phase-controller.test.d.ts.map +1 -0
  99. package/dist/team/__tests__/phase-controller.test.js +36 -0
  100. package/dist/team/__tests__/phase-controller.test.js.map +1 -0
  101. package/dist/team/__tests__/runtime.test.js +112 -8
  102. package/dist/team/__tests__/runtime.test.js.map +1 -1
  103. package/dist/team/__tests__/tmux-session.test.js +71 -1
  104. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  105. package/dist/team/model-contract.d.ts +19 -0
  106. package/dist/team/model-contract.d.ts.map +1 -0
  107. package/dist/team/model-contract.js +123 -0
  108. package/dist/team/model-contract.js.map +1 -0
  109. package/dist/team/orchestrator.d.ts.map +1 -1
  110. package/dist/team/orchestrator.js +0 -1
  111. package/dist/team/orchestrator.js.map +1 -1
  112. package/dist/team/phase-controller.d.ts +10 -0
  113. package/dist/team/phase-controller.d.ts.map +1 -0
  114. package/dist/team/phase-controller.js +128 -0
  115. package/dist/team/phase-controller.js.map +1 -0
  116. package/dist/team/runtime.d.ts +3 -3
  117. package/dist/team/runtime.d.ts.map +1 -1
  118. package/dist/team/runtime.js +40 -74
  119. package/dist/team/runtime.js.map +1 -1
  120. package/dist/team/state.d.ts +15 -0
  121. package/dist/team/state.d.ts.map +1 -1
  122. package/dist/team/state.js +35 -0
  123. package/dist/team/state.js.map +1 -1
  124. package/dist/team/team-ops.d.ts +3 -1
  125. package/dist/team/team-ops.d.ts.map +1 -1
  126. package/dist/team/team-ops.js +2 -0
  127. package/dist/team/team-ops.js.map +1 -1
  128. package/dist/team/tmux-session.d.ts +12 -0
  129. package/dist/team/tmux-session.d.ts.map +1 -1
  130. package/dist/team/tmux-session.js +33 -1
  131. package/dist/team/tmux-session.js.map +1 -1
  132. package/dist/utils/paths.d.ts +2 -0
  133. package/dist/utils/paths.d.ts.map +1 -1
  134. package/dist/utils/paths.js +4 -0
  135. package/dist/utils/paths.js.map +1 -1
  136. package/package.json +2 -2
  137. package/prompts/code-simplifier.md +91 -0
  138. package/prompts/product-analyst.md +7 -7
  139. package/scripts/generate-catalog-docs.js +111 -0
  140. package/scripts/notify-hook.js +36 -1
  141. package/skills/build-fix/SKILL.md +3 -3
  142. package/skills/code-review/SKILL.md +3 -3
  143. package/skills/help/SKILL.md +4 -4
  144. package/skills/omx-setup/SKILL.md +24 -15
  145. package/skills/research/SKILL.md +28 -28
  146. package/skills/security-review/SKILL.md +3 -3
  147. package/templates/AGENTS.md +1 -8
  148. package/templates/catalog-manifest.json +397 -0
  149. package/prompts/deep-executor.md +0 -19
  150. package/prompts/scientist.md +0 -89
  151. package/skills/deepinit/SKILL.md +0 -320
  152. package/skills/learn-about-omx/SKILL.md +0 -37
  153. package/skills/learner/SKILL.md +0 -135
  154. package/skills/pipeline/SKILL.md +0 -407
  155. package/skills/project-session-manager/SKILL.md +0 -560
  156. package/skills/psm/SKILL.md +0 -20
  157. package/skills/release/SKILL.md +0 -83
  158. package/skills/ultrapilot/SKILL.md +0 -627
  159. package/skills/writer-memory/SKILL.md +0 -443
@@ -0,0 +1,19 @@
1
+ export declare const TEAM_LOW_COMPLEXITY_DEFAULT_MODEL = "gpt-5.3-codex-spark";
2
+ export interface ParsedTeamWorkerLaunchArgs {
3
+ passthrough: string[];
4
+ wantsBypass: boolean;
5
+ reasoningOverride: string | null;
6
+ modelOverride: string | null;
7
+ }
8
+ export interface ResolveTeamWorkerLaunchArgsOptions {
9
+ existingRaw?: string;
10
+ inheritedArgs?: string[];
11
+ fallbackModel?: string;
12
+ }
13
+ export declare function splitWorkerLaunchArgs(raw: string | undefined): string[];
14
+ export declare function parseTeamWorkerLaunchArgs(args: string[]): ParsedTeamWorkerLaunchArgs;
15
+ export declare function collectInheritableTeamWorkerArgs(codexArgs: string[]): string[];
16
+ export declare function normalizeTeamWorkerLaunchArgs(args: string[], preferredModel?: string): string[];
17
+ export declare function resolveTeamWorkerLaunchArgs(options: ResolveTeamWorkerLaunchArgsOptions): string[];
18
+ export declare function isLowComplexityAgentType(agentType?: string): boolean;
19
+ //# sourceMappingURL=model-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-contract.d.ts","sourceRoot":"","sources":["../../src/team/model-contract.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iCAAiC,wBAAwB,CAAC;AAEvE,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,kCAAkC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAgBD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAMvE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,0BAA0B,CAoDpF;AAED,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQ9E;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAW/F;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kCAAkC,GAAG,MAAM,EAAE,CAWjG;AAED,wBAAgB,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAMpE"}
@@ -0,0 +1,123 @@
1
+ const MADMAX_FLAG = '--madmax';
2
+ const CODEX_BYPASS_FLAG = '--dangerously-bypass-approvals-and-sandbox';
3
+ const MODEL_FLAG = '--model';
4
+ const CONFIG_FLAG = '-c';
5
+ const REASONING_KEY = 'model_reasoning_effort';
6
+ const LOW_COMPLEXITY_AGENT_TYPES = new Set([
7
+ 'explore',
8
+ 'explorer',
9
+ 'style-reviewer',
10
+ 'writer',
11
+ ]);
12
+ export const TEAM_LOW_COMPLEXITY_DEFAULT_MODEL = 'gpt-5.3-codex-spark';
13
+ function isReasoningOverride(value) {
14
+ return new RegExp(`^${REASONING_KEY}\\s*=`).test(value.trim());
15
+ }
16
+ function isValidModelValue(value) {
17
+ return value.trim().length > 0 && !value.startsWith('-');
18
+ }
19
+ function normalizeOptionalModel(model) {
20
+ if (typeof model !== 'string')
21
+ return undefined;
22
+ const trimmed = model.trim();
23
+ return trimmed.length > 0 ? trimmed : undefined;
24
+ }
25
+ export function splitWorkerLaunchArgs(raw) {
26
+ if (!raw || raw.trim() === '')
27
+ return [];
28
+ return raw
29
+ .split(/\s+/)
30
+ .map((s) => s.trim())
31
+ .filter(Boolean);
32
+ }
33
+ export function parseTeamWorkerLaunchArgs(args) {
34
+ const passthrough = [];
35
+ let wantsBypass = false;
36
+ let reasoningOverride = null;
37
+ let modelOverride = null;
38
+ for (let i = 0; i < args.length; i++) {
39
+ const arg = args[i];
40
+ if (arg === CODEX_BYPASS_FLAG || arg === MADMAX_FLAG) {
41
+ wantsBypass = true;
42
+ continue;
43
+ }
44
+ if (arg === MODEL_FLAG) {
45
+ const maybeValue = args[i + 1];
46
+ if (typeof maybeValue === 'string' && isValidModelValue(maybeValue)) {
47
+ modelOverride = maybeValue.trim();
48
+ i += 1;
49
+ continue;
50
+ }
51
+ passthrough.push(arg);
52
+ continue;
53
+ }
54
+ if (arg.startsWith(`${MODEL_FLAG}=`)) {
55
+ const inlineValue = arg.slice(`${MODEL_FLAG}=`.length).trim();
56
+ if (isValidModelValue(inlineValue)) {
57
+ modelOverride = inlineValue;
58
+ continue;
59
+ }
60
+ passthrough.push(arg);
61
+ continue;
62
+ }
63
+ if (arg === CONFIG_FLAG) {
64
+ const maybeValue = args[i + 1];
65
+ if (typeof maybeValue === 'string' && isReasoningOverride(maybeValue)) {
66
+ reasoningOverride = maybeValue;
67
+ i += 1;
68
+ continue;
69
+ }
70
+ }
71
+ passthrough.push(arg);
72
+ }
73
+ return {
74
+ passthrough,
75
+ wantsBypass,
76
+ reasoningOverride,
77
+ modelOverride,
78
+ };
79
+ }
80
+ export function collectInheritableTeamWorkerArgs(codexArgs) {
81
+ const parsed = parseTeamWorkerLaunchArgs(codexArgs);
82
+ const inherited = [];
83
+ if (parsed.wantsBypass)
84
+ inherited.push(CODEX_BYPASS_FLAG);
85
+ if (parsed.reasoningOverride)
86
+ inherited.push(CONFIG_FLAG, parsed.reasoningOverride);
87
+ if (parsed.modelOverride)
88
+ inherited.push(MODEL_FLAG, parsed.modelOverride);
89
+ return inherited;
90
+ }
91
+ export function normalizeTeamWorkerLaunchArgs(args, preferredModel) {
92
+ const parsed = parseTeamWorkerLaunchArgs(args);
93
+ const normalized = [...parsed.passthrough];
94
+ if (parsed.wantsBypass)
95
+ normalized.push(CODEX_BYPASS_FLAG);
96
+ if (parsed.reasoningOverride)
97
+ normalized.push(CONFIG_FLAG, parsed.reasoningOverride);
98
+ const selectedModel = normalizeOptionalModel(preferredModel) ?? normalizeOptionalModel(parsed.modelOverride);
99
+ if (selectedModel)
100
+ normalized.push(MODEL_FLAG, selectedModel);
101
+ return normalized;
102
+ }
103
+ export function resolveTeamWorkerLaunchArgs(options) {
104
+ const envArgs = splitWorkerLaunchArgs(options.existingRaw);
105
+ const inheritedArgs = options.inheritedArgs ?? [];
106
+ const allArgs = [...envArgs, ...inheritedArgs];
107
+ const envModel = normalizeOptionalModel(parseTeamWorkerLaunchArgs(envArgs).modelOverride);
108
+ const inheritedModel = normalizeOptionalModel(parseTeamWorkerLaunchArgs(inheritedArgs).modelOverride);
109
+ const fallbackModel = normalizeOptionalModel(options.fallbackModel);
110
+ const selectedModel = envModel ?? inheritedModel ?? fallbackModel;
111
+ return normalizeTeamWorkerLaunchArgs(allArgs, selectedModel);
112
+ }
113
+ export function isLowComplexityAgentType(agentType) {
114
+ if (!agentType)
115
+ return false;
116
+ const normalized = agentType.trim().toLowerCase();
117
+ if (normalized === '')
118
+ return false;
119
+ if (normalized.endsWith('-low'))
120
+ return true;
121
+ return LOW_COMPLEXITY_AGENT_TYPES.has(normalized);
122
+ }
123
+ //# sourceMappingURL=model-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-contract.js","sourceRoot":"","sources":["../../src/team/model-contract.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/team/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;AAC5F,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAIhE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,SAAS,GAAG,aAAa,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,aAAa,GAAG,OAAO,CAGzF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,GAAG,KAAK,IAAI,aAAa,CAExF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,GAAE,MAAU,GAAG,SAAS,CAW9F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,SAAS,GAAG,aAAa,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,CA4CX;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAczD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAa7D"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/team/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;AAC5F,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAIhE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,SAAS,GAAG,aAAa,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,aAAa,GAAG,OAAO,CAGzF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,GAAG,KAAK,IAAI,aAAa,CAExF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,cAAc,GAAE,MAAU,GAAG,SAAS,CAW9F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,SAAS,GAAG,aAAa,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,CA4CX;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAazD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAa7D"}
@@ -96,7 +96,6 @@ export function getPhaseAgents(phase) {
96
96
  case 'team-prd':
97
97
  return ['product-manager', 'analyst'];
98
98
  case 'team-exec':
99
- // deep-executor is maintained as a backward-compatible alias of executor.
100
99
  return ['executor', 'designer', 'test-engineer'];
101
100
  case 'team-verify':
102
101
  return ['verifier', 'quality-reviewer', 'security-reviewer'];
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/team/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/team/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type TeamPhase, type TerminalPhase } from './orchestrator.js';
2
+ import { type TeamPhaseState } from './state.js';
3
+ export declare function inferPhaseTargetFromTaskCounts(taskCounts: {
4
+ pending: number;
5
+ blocked: number;
6
+ in_progress: number;
7
+ failed: number;
8
+ }): TeamPhase | TerminalPhase;
9
+ export declare function reconcilePhaseStateForMonitor(persisted: TeamPhaseState | null, target: TeamPhase | TerminalPhase): TeamPhaseState;
10
+ //# sourceMappingURL=phase-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-controller.d.ts","sourceRoot":"","sources":["../../src/team/phase-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpF,SAAS,GAAG,aAAa,CAK3B;AAwED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,cAAc,GAAG,IAAI,EAChC,MAAM,EAAE,SAAS,GAAG,aAAa,GAChC,cAAc,CAsChB"}
@@ -0,0 +1,128 @@
1
+ import { createTeamState, isTerminalPhase, transitionPhase, } from './orchestrator.js';
2
+ export function inferPhaseTargetFromTaskCounts(taskCounts) {
3
+ const allTasksTerminal = taskCounts.pending === 0 && taskCounts.blocked === 0 && taskCounts.in_progress === 0;
4
+ if (allTasksTerminal && taskCounts.failed === 0)
5
+ return 'complete';
6
+ if (allTasksTerminal && taskCounts.failed > 0)
7
+ return 'team-fix';
8
+ return 'team-exec';
9
+ }
10
+ function defaultPersistedPhaseState() {
11
+ return {
12
+ current_phase: 'team-exec',
13
+ max_fix_attempts: 3,
14
+ current_fix_attempt: 0,
15
+ transitions: [],
16
+ updated_at: new Date().toISOString(),
17
+ };
18
+ }
19
+ function toTeamState(phaseState) {
20
+ const state = createTeamState('team-runtime-monitor', phaseState.max_fix_attempts);
21
+ return {
22
+ ...state,
23
+ active: !isTerminalPhase(phaseState.current_phase),
24
+ phase: phaseState.current_phase,
25
+ current_fix_attempt: phaseState.current_fix_attempt,
26
+ phase_transitions: [...phaseState.transitions],
27
+ };
28
+ }
29
+ function toPhaseState(state) {
30
+ return {
31
+ current_phase: state.phase,
32
+ max_fix_attempts: state.max_fix_attempts,
33
+ current_fix_attempt: state.current_fix_attempt,
34
+ transitions: [...state.phase_transitions],
35
+ updated_at: new Date().toISOString(),
36
+ };
37
+ }
38
+ function buildTransitionPath(from, to) {
39
+ if (from === to)
40
+ return [];
41
+ if (to === 'team-exec') {
42
+ if (from === 'team-plan')
43
+ return ['team-prd', 'team-exec'];
44
+ if (from === 'team-prd')
45
+ return ['team-exec'];
46
+ if (from === 'team-fix')
47
+ return ['team-exec'];
48
+ return [];
49
+ }
50
+ if (to === 'team-fix') {
51
+ if (from === 'team-plan')
52
+ return ['team-prd', 'team-exec', 'team-verify', 'team-fix'];
53
+ if (from === 'team-prd')
54
+ return ['team-exec', 'team-verify', 'team-fix'];
55
+ if (from === 'team-exec')
56
+ return ['team-verify', 'team-fix'];
57
+ if (from === 'team-verify')
58
+ return ['team-fix'];
59
+ return [];
60
+ }
61
+ if (to === 'complete') {
62
+ if (from === 'team-plan')
63
+ return ['team-prd', 'team-exec', 'team-verify', 'complete'];
64
+ if (from === 'team-prd')
65
+ return ['team-exec', 'team-verify', 'complete'];
66
+ if (from === 'team-exec')
67
+ return ['team-verify', 'complete'];
68
+ if (from === 'team-verify')
69
+ return ['complete'];
70
+ if (from === 'team-fix')
71
+ return ['complete'];
72
+ return [];
73
+ }
74
+ if (to === 'failed') {
75
+ if (from === 'team-plan')
76
+ return ['team-prd', 'team-exec', 'team-verify', 'failed'];
77
+ if (from === 'team-prd')
78
+ return ['team-exec', 'team-verify', 'failed'];
79
+ if (from === 'team-exec')
80
+ return ['team-verify', 'failed'];
81
+ if (from === 'team-verify')
82
+ return ['failed'];
83
+ if (from === 'team-fix')
84
+ return ['failed'];
85
+ return [];
86
+ }
87
+ return [];
88
+ }
89
+ export function reconcilePhaseStateForMonitor(persisted, target) {
90
+ const now = new Date().toISOString();
91
+ const base = persisted ?? defaultPersistedPhaseState();
92
+ if (base.current_phase === target) {
93
+ return {
94
+ ...base,
95
+ updated_at: now,
96
+ };
97
+ }
98
+ if (isTerminalPhase(base.current_phase)) {
99
+ if (isTerminalPhase(target))
100
+ return base;
101
+ return {
102
+ current_phase: target,
103
+ max_fix_attempts: base.max_fix_attempts,
104
+ current_fix_attempt: 0,
105
+ transitions: [
106
+ ...base.transitions,
107
+ {
108
+ from: base.current_phase,
109
+ to: target,
110
+ at: now,
111
+ reason: 'tasks_reopened',
112
+ },
113
+ ],
114
+ updated_at: now,
115
+ };
116
+ }
117
+ let state = toTeamState(base);
118
+ const transitionPath = buildTransitionPath(state.phase, target);
119
+ for (const next of transitionPath) {
120
+ if (state.phase === next)
121
+ continue;
122
+ if (isTerminalPhase(state.phase))
123
+ break;
124
+ state = transitionPhase(state, next);
125
+ }
126
+ return toPhaseState(state);
127
+ }
128
+ //# sourceMappingURL=phase-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-controller.js","sourceRoot":"","sources":["../../src/team/phase-controller.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type TeamConfig, type WorkerHeartbeat, type WorkerStatus, type TeamTask } from './team-ops.js';
2
2
  import { type TeamPhase, type TerminalPhase } from './orchestrator.js';
3
+ import { TEAM_LOW_COMPLEXITY_DEFAULT_MODEL } from './model-contract.js';
3
4
  /** Snapshot of the team state at a point in time */
4
5
  export interface TeamSnapshot {
5
6
  teamName: string;
@@ -37,8 +38,8 @@ export interface TeamRuntime {
37
38
  interface ShutdownOptions {
38
39
  force?: boolean;
39
40
  }
40
- export declare const TEAM_LOW_COMPLEXITY_DEFAULT_MODEL = "gpt-5.3-codex";
41
- export declare function resolveWorkerLaunchArgsFromEnv(env: NodeJS.ProcessEnv, agentType: string, configuredModel?: string): string[];
41
+ export { TEAM_LOW_COMPLEXITY_DEFAULT_MODEL };
42
+ export declare function resolveWorkerLaunchArgsFromEnv(env: NodeJS.ProcessEnv, agentType: string, inheritedLeaderModel?: string): string[];
42
43
  /**
43
44
  * Start a new team: init state, create tmux session, bootstrap workers.
44
45
  */
@@ -70,5 +71,4 @@ export declare function shutdownTeam(teamName: string, cwd: string, options?: Sh
70
71
  export declare function resumeTeam(teamName: string, cwd: string): Promise<TeamRuntime | null>;
71
72
  export declare function sendWorkerMessage(teamName: string, fromWorker: string, toWorker: string, body: string, cwd: string): Promise<void>;
72
73
  export declare function broadcastWorkerMessage(teamName: string, fromWorker: string, body: string, cwd: string): Promise<void>;
73
- export {};
74
74
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/team/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/team/runtime.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,13 @@
1
1
  import { join } from 'path';
2
2
  import { existsSync } from 'fs';
3
3
  import { readdir, readFile } from 'fs/promises';
4
- import { getModelForMode } from '../config/models.js';
5
4
  import { sanitizeTeamName, isTmuxAvailable, createTeamSession, waitForWorkerReady, sendToWorker, notifyLeaderStatus, isWorkerAlive, getWorkerPanePid, killWorker, killWorkerByPaneId, destroyTeamSession, listTeamSessions, } from './tmux-session.js';
6
- import { teamInit as initTeamState, DEFAULT_MAX_WORKERS, teamReadConfig as readTeamConfig, teamWriteWorkerIdentity as writeWorkerIdentity, teamReadWorkerHeartbeat as readWorkerHeartbeat, teamReadWorkerStatus as readWorkerStatus, teamWriteWorkerInbox as writeWorkerInbox, teamCreateTask as createStateTask, teamReadTask as readTask, teamListTasks as listTasks, teamReadManifest as readTeamManifestV2, teamClaimTask as claimTask, teamReleaseTaskClaim as releaseTaskClaim, teamAppendEvent as appendTeamEvent, teamReadTaskApproval as readTaskApproval, teamListMailbox as listMailboxMessages, teamMarkMessageNotified as markMessageNotified, teamCleanup as cleanupTeamState, teamSaveConfig as saveTeamConfig, teamWriteShutdownRequest as writeShutdownRequest, teamReadShutdownAck as readShutdownAck, teamReadMonitorSnapshot as readMonitorSnapshot, teamWriteMonitorSnapshot as writeMonitorSnapshot, } from './team-ops.js';
5
+ import { teamInit as initTeamState, DEFAULT_MAX_WORKERS, teamReadConfig as readTeamConfig, teamWriteWorkerIdentity as writeWorkerIdentity, teamReadWorkerHeartbeat as readWorkerHeartbeat, teamReadWorkerStatus as readWorkerStatus, teamWriteWorkerInbox as writeWorkerInbox, teamCreateTask as createStateTask, teamReadTask as readTask, teamListTasks as listTasks, teamReadManifest as readTeamManifestV2, teamClaimTask as claimTask, teamReleaseTaskClaim as releaseTaskClaim, teamAppendEvent as appendTeamEvent, teamReadTaskApproval as readTaskApproval, teamListMailbox as listMailboxMessages, teamMarkMessageNotified as markMessageNotified, teamCleanup as cleanupTeamState, teamSaveConfig as saveTeamConfig, teamWriteShutdownRequest as writeShutdownRequest, teamReadShutdownAck as readShutdownAck, teamReadMonitorSnapshot as readMonitorSnapshot, teamWriteMonitorSnapshot as writeMonitorSnapshot, teamReadPhase as readTeamPhaseState, teamWritePhase as writeTeamPhaseState, } from './team-ops.js';
7
6
  import { queueInboxInstruction, queueDirectMailboxMessage, queueBroadcastMailboxMessage, } from './mcp-comm.js';
8
7
  import { generateWorkerOverlay, writeTeamWorkerInstructionsFile, removeTeamWorkerInstructionsFile, generateInitialInbox, generateTaskAssignmentInbox, generateShutdownInbox, generateTriggerMessage, generateMailboxTriggerMessage, } from './worker-bootstrap.js';
9
- const MODEL_FLAG = '--model';
8
+ import { isLowComplexityAgentType, resolveTeamWorkerLaunchArgs, TEAM_LOW_COMPLEXITY_DEFAULT_MODEL, } from './model-contract.js';
9
+ import { inferPhaseTargetFromTaskCounts, reconcilePhaseStateForMonitor } from './phase-controller.js';
10
10
  const MODEL_INSTRUCTIONS_FILE_ENV = 'OMX_MODEL_INSTRUCTIONS_FILE';
11
- export const TEAM_LOW_COMPLEXITY_DEFAULT_MODEL = 'gpt-5.3-codex';
12
11
  const previousModelInstructionsFileByTeam = new Map();
13
12
  function resolveWorkerReadyTimeoutMs(env) {
14
13
  const raw = env.OMX_TEAM_READY_TIMEOUT_MS;
@@ -20,24 +19,6 @@ function resolveWorkerReadyTimeoutMs(env) {
20
19
  function shouldSkipWorkerReadyWait(env) {
21
20
  return env.OMX_TEAM_SKIP_READY_WAIT === '1';
22
21
  }
23
- function hasExplicitModelArg(args) {
24
- for (let i = 0; i < args.length; i++) {
25
- const arg = args[i];
26
- if (arg === MODEL_FLAG) {
27
- const maybeValue = args[i + 1];
28
- if (typeof maybeValue === 'string' && maybeValue.trim() !== '' && !maybeValue.startsWith('-')) {
29
- return true;
30
- }
31
- continue;
32
- }
33
- if (arg.startsWith(`${MODEL_FLAG}=`)) {
34
- const inline = arg.slice(`${MODEL_FLAG}=`.length).trim();
35
- if (inline !== '')
36
- return true;
37
- }
38
- }
39
- return false;
40
- }
41
22
  function setTeamModelInstructionsFile(teamName, filePath) {
42
23
  if (!previousModelInstructionsFileByTeam.has(teamName)) {
43
24
  previousModelInstructionsFileByTeam.set(teamName, process.env[MODEL_INSTRUCTIONS_FILE_ENV]);
@@ -55,24 +36,19 @@ function restoreTeamModelInstructionsFile(teamName) {
55
36
  }
56
37
  delete process.env[MODEL_INSTRUCTIONS_FILE_ENV];
57
38
  }
58
- export function resolveWorkerLaunchArgsFromEnv(env, agentType, configuredModel) {
59
- // Keep it intentionally simple: whitespace split, no quoting/escaping support.
60
- // Primary use is passing stable Codex flags like `--no-alt-screen`.
61
- const raw = env.OMX_TEAM_WORKER_LAUNCH_ARGS;
62
- const args = (!raw || raw.trim() === '')
63
- ? []
64
- : raw
65
- .split(/\s+/)
66
- .map((s) => s.trim())
67
- .filter(Boolean);
68
- if (hasExplicitModelArg(args))
69
- return args;
70
- // Use configured model (from .omx-config.json "models" section) for all agent types
71
- if (typeof configuredModel === 'string' && configuredModel.trim() !== '') {
72
- return [...args, MODEL_FLAG, configuredModel.trim()];
73
- }
74
- // Hardcoded fallback: all agent types get the default model
75
- return [...args, MODEL_FLAG, TEAM_LOW_COMPLEXITY_DEFAULT_MODEL];
39
+ export { TEAM_LOW_COMPLEXITY_DEFAULT_MODEL };
40
+ export function resolveWorkerLaunchArgsFromEnv(env, agentType, inheritedLeaderModel) {
41
+ const inheritedArgs = (typeof inheritedLeaderModel === 'string' && inheritedLeaderModel.trim() !== '')
42
+ ? ['--model', inheritedLeaderModel.trim()]
43
+ : [];
44
+ const fallbackModel = isLowComplexityAgentType(agentType)
45
+ ? TEAM_LOW_COMPLEXITY_DEFAULT_MODEL
46
+ : undefined;
47
+ return resolveTeamWorkerLaunchArgs({
48
+ existingRaw: env.OMX_TEAM_WORKER_LAUNCH_ARGS,
49
+ inheritedArgs,
50
+ fallbackModel,
51
+ });
76
52
  }
77
53
  /**
78
54
  * Start a new team: init state, create tmux session, bootstrap workers.
@@ -103,8 +79,7 @@ export async function startTeam(teamName, task, agentType, workerCount, tasks, c
103
79
  let sessionCreated = false;
104
80
  const createdWorkerPaneIds = [];
105
81
  let createdLeaderPaneId;
106
- const configuredModel = getModelForMode('team');
107
- const workerLaunchArgs = resolveWorkerLaunchArgsFromEnv(process.env, agentType, configuredModel);
82
+ const workerLaunchArgs = resolveWorkerLaunchArgsFromEnv(process.env, agentType);
108
83
  const workerReadyTimeoutMs = resolveWorkerReadyTimeoutMs(process.env);
109
84
  const skipWorkerReadyWait = shouldSkipWorkerReadyWait(process.env);
110
85
  try {
@@ -306,13 +281,11 @@ export async function monitorTeam(teamName, cwd) {
306
281
  failed: allTasks.filter(t => t.status === 'failed').length,
307
282
  };
308
283
  const allTasksTerminal = taskCounts.pending === 0 && taskCounts.blocked === 0 && taskCounts.in_progress === 0;
309
- // Determine phase from state file (simplified -- read from mode state if available)
310
- // For now use a heuristic based on task statuses
311
- let phase = 'team-exec';
312
- if (allTasksTerminal && taskCounts.failed === 0)
313
- phase = 'complete';
314
- else if (allTasksTerminal && taskCounts.failed > 0)
315
- phase = 'team-fix';
284
+ const persistedPhase = await readTeamPhaseState(sanitized, cwd);
285
+ const targetPhase = inferPhaseTargetFromTaskCounts(taskCounts);
286
+ const phaseState = reconcilePhaseStateForMonitor(persistedPhase, targetPhase);
287
+ await writeTeamPhaseState(sanitized, phaseState, cwd);
288
+ const phase = phaseState.current_phase;
316
289
  await emitMonitorDerivedEvents(sanitized, allTasks, workers, previousSnapshot, cwd);
317
290
  const mailboxNotifiedByMessageId = await deliverPendingMailboxMessages(sanitized, config, workers, previousSnapshot?.mailboxNotifiedByMessageId ?? {}, cwd);
318
291
  await writeMonitorSnapshot(sanitized, {
@@ -645,10 +618,7 @@ function notifyLeader(config, message) {
645
618
  async function deliverPendingMailboxMessages(teamName, config, workers, previousNotifications, cwd) {
646
619
  const nextNotifications = {};
647
620
  const pendingIdsAcrossTeam = new Set();
648
- const retryAfterMs = 15_000;
649
621
  for (const worker of workers) {
650
- if (!worker.alive)
651
- continue;
652
622
  const workerInfo = config.workers.find((w) => w.name === worker.name);
653
623
  if (!workerInfo)
654
624
  continue;
@@ -659,32 +629,28 @@ async function deliverPendingMailboxMessages(teamName, config, workers, previous
659
629
  const pendingIds = pending.map((m) => m.message_id);
660
630
  for (const id of pendingIds)
661
631
  pendingIdsAcrossTeam.add(id);
632
+ // Preserve already-tracked notification timestamps in the next snapshot.
662
633
  for (const msg of pending) {
663
634
  nextNotifications[msg.message_id] = msg.notified_at || previousNotifications[msg.message_id] || '';
664
635
  }
665
- const nowMs = Date.now();
666
- const alreadyNotified = pending.every((m) => Boolean(m.notified_at) || typeof previousNotifications[m.message_id] === 'string');
667
- const shouldRetry = pending.some((m) => {
668
- const lastNotifiedIso = m.notified_at || previousNotifications[m.message_id];
669
- if (!lastNotifiedIso)
670
- return true;
671
- const lastNotifiedMs = Date.parse(lastNotifiedIso);
672
- if (!Number.isFinite(lastNotifiedMs))
673
- return true;
674
- return nowMs - lastNotifiedMs >= retryAfterMs;
675
- });
676
- let notifiedNow = false;
677
- if (!alreadyNotified || shouldRetry) {
678
- notifiedNow = notifyWorker(config, workerInfo.index, generateMailboxTriggerMessage(worker.name, teamName, pending.length), workerInfo.pane_id);
679
- }
680
- if ((!alreadyNotified || shouldRetry) && !notifiedNow)
636
+ // Only notify for messages that have never been successfully notified.
637
+ // Using a message-ID set prevents re-notification on every monitor poll
638
+ // (issue #116). A message is considered notified when either:
639
+ // - notified_at is set in the mailbox file (persisted by markMessageNotified), or
640
+ // - the message_id exists in previousNotifications from the last snapshot.
641
+ // Both checks use Boolean() so an empty-string value is treated as unnotified.
642
+ const unnotified = pending.filter((m) => !m.notified_at && !previousNotifications[m.message_id]);
643
+ if (unnotified.length === 0)
681
644
  continue;
682
- if (!alreadyNotified || shouldRetry) {
683
- for (const msg of pending) {
684
- const notified = await markMessageNotified(teamName, worker.name, msg.message_id, cwd);
685
- if (notified) {
686
- nextNotifications[msg.message_id] = new Date().toISOString();
687
- }
645
+ if (!worker.alive)
646
+ continue;
647
+ const notifiedNow = notifyWorker(config, workerInfo.index, generateMailboxTriggerMessage(worker.name, teamName, unnotified.length), workerInfo.pane_id);
648
+ if (!notifiedNow)
649
+ continue;
650
+ for (const msg of unnotified) {
651
+ const notified = await markMessageNotified(teamName, worker.name, msg.message_id, cwd);
652
+ if (notified) {
653
+ nextNotifications[msg.message_id] = new Date().toISOString();
688
654
  }
689
655
  }
690
656
  }