sensorium-mcp 3.1.3-board.7 → 3.1.3-board.8
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/dist/services/codex-spawn.service.d.ts +5 -0
- package/dist/services/codex-spawn.service.d.ts.map +1 -1
- package/dist/services/codex-spawn.service.js +21 -15
- package/dist/services/codex-spawn.service.js.map +1 -1
- package/package.json +1 -1
- package/templates/board-quality-checklist.default.md +7 -0
|
@@ -5,5 +5,10 @@
|
|
|
5
5
|
import type { ThreadLifecycleService } from "./thread-lifecycle.service.js";
|
|
6
6
|
import { type SpawnResult } from "./spawn-common.js";
|
|
7
7
|
export declare const resolveCodexPath: () => string | null;
|
|
8
|
+
/**
|
|
9
|
+
* The Codex CLI argv for a spawned agent. Pure, so the flag order is assertable
|
|
10
|
+
* without launching a process.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildCodexCliArgs(model: string, mcpArgs: string[], workingDirectory?: string): string[];
|
|
8
13
|
export declare function spawnCodexProcess(codexPath: string, name: string, threadId: number, threadLifecycle: ThreadLifecycleService, workingDirectory?: string, memorySourceThreadId?: number, threadType?: "worker" | "branch", modelOverride?: string): Promise<SpawnResult>;
|
|
9
14
|
//# sourceMappingURL=codex-spawn.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-spawn.service.d.ts","sourceRoot":"","sources":["../../src/services/codex-spawn.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAwD3B,eAAO,MAAM,gBAAgB,QAAO,MAAM,GAAG,IACiC,CAAC;AAE/E,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,sBAAsB,EACvC,gBAAgB,CAAC,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,MAAM,EAC7B,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAChC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"codex-spawn.service.d.ts","sourceRoot":"","sources":["../../src/services/codex-spawn.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAQL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAwD3B,eAAO,MAAM,gBAAgB,QAAO,MAAM,GAAG,IACiC,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,EAAE,CAeV;AAED,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,sBAAsB,EACvC,gBAAgB,CAAC,EAAE,MAAM,EACzB,oBAAoB,CAAC,EAAE,MAAM,EAC7B,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAChC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,WAAW,CAAC,CA8CtB"}
|
|
@@ -62,6 +62,26 @@ const resolveCodexJsWin = () => {
|
|
|
62
62
|
// On Windows we return codex's bin/codex.js (launched via node.exe by
|
|
63
63
|
// spawnCodexProcess). Elsewhere codex is a real binary on PATH, spawned directly.
|
|
64
64
|
export const resolveCodexPath = () => process.platform === "win32" ? resolveCodexJsWin() : resolveCliPath("codex");
|
|
65
|
+
/**
|
|
66
|
+
* The Codex CLI argv for a spawned agent. Pure, so the flag order is assertable
|
|
67
|
+
* without launching a process.
|
|
68
|
+
*/
|
|
69
|
+
export function buildCodexCliArgs(model, mcpArgs, workingDirectory) {
|
|
70
|
+
return [
|
|
71
|
+
// Codex truncates MCP tool output retained in model context. Keep the
|
|
72
|
+
// bootstrap briefing intact instead of relying on its small default cap.
|
|
73
|
+
"--config",
|
|
74
|
+
`tool_output_token_limit=${CODEX_TOOL_OUTPUT_TOKEN_LIMIT}`,
|
|
75
|
+
"exec",
|
|
76
|
+
...(workingDirectory ? ["-C", workingDirectory] : []),
|
|
77
|
+
"--dangerously-bypass-approvals-and-sandbox",
|
|
78
|
+
"--skip-git-repo-check",
|
|
79
|
+
...(model ? ["-m", model] : []),
|
|
80
|
+
"--json",
|
|
81
|
+
...mcpArgs,
|
|
82
|
+
"-",
|
|
83
|
+
];
|
|
84
|
+
}
|
|
65
85
|
export async function spawnCodexProcess(codexPath, name, threadId, threadLifecycle, workingDirectory, memorySourceThreadId, threadType, modelOverride) {
|
|
66
86
|
const pre = checkSpawnPreconditions("Codex");
|
|
67
87
|
if ("error" in pre)
|
|
@@ -77,21 +97,7 @@ export async function spawnCodexProcess(codexPath, name, threadId, threadLifecyc
|
|
|
77
97
|
const roleModel = threadType === "worker" ? getCodexWorkerModel() : getCodexRootModel();
|
|
78
98
|
const model = modelOverride?.trim() || process.env.CODEX_MODEL || roleModel;
|
|
79
99
|
const { args: mcpArgs, env: mcpEnv } = buildCodexMcpArgs(pre.transport, threadId);
|
|
80
|
-
const cliArgs =
|
|
81
|
-
// Codex truncates MCP tool output retained in model context. Keep the
|
|
82
|
-
// bootstrap briefing intact instead of relying on its small default cap.
|
|
83
|
-
"--config",
|
|
84
|
-
`tool_output_token_limit=${CODEX_TOOL_OUTPUT_TOKEN_LIMIT}`,
|
|
85
|
-
"exec",
|
|
86
|
-
"--dangerously-bypass-approvals-and-sandbox",
|
|
87
|
-
"--skip-git-repo-check",
|
|
88
|
-
...(model ? ["-m", model] : []),
|
|
89
|
-
"--json",
|
|
90
|
-
...mcpArgs,
|
|
91
|
-
"-",
|
|
92
|
-
];
|
|
93
|
-
if (workingDirectory)
|
|
94
|
-
cliArgs.splice(1, 0, "-C", workingDirectory);
|
|
100
|
+
const cliArgs = buildCodexCliArgs(model, mcpArgs, workingDirectory);
|
|
95
101
|
const spawnEnv = sanitizeSpawnEnv({
|
|
96
102
|
...(memorySourceThreadId !== undefined
|
|
97
103
|
? { MEMORY_SOURCE_THREAD_ID: String(memorySourceThreadId) }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-spawn.service.js","sourceRoot":"","sources":["../../src/services/codex-spawn.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"codex-spawn.service.js","sourceRoot":"","sources":["../../src/services/codex-spawn.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -86,6 +86,13 @@ operator enforces on review — violating them gets the PR bounced. Be concise;
|
|
|
86
86
|
inline DB/state built up step-by-step. Push that into a small local Arrange helper (e.g. `openV6Board()`,
|
|
87
87
|
a programmable stub that replays an ordered list of responses/errors). The test body stays tiny.
|
|
88
88
|
- [ ] Shared Arrange is encouraged as a small local factory/helper; shared MUTABLE state across tests is not.
|
|
89
|
+
- [ ] NO DUPLICATED TEST CODE (mandatory, not a style preference). The same setup written in two tests →
|
|
90
|
+
one shared Arrange helper; a helper the file (or a sibling test file) already has is REUSED, never
|
|
91
|
+
redeclared. Cases that share one Arrange and one Act and differ only by input/expected value → ONE
|
|
92
|
+
table-driven test, each row its own subtest (`t.test` per row), so every row still fails on its own.
|
|
93
|
+
Measure it: a diff whose added test lines are more than ~1.5× its added production code is suspect —
|
|
94
|
+
name the repeated blocks and how many lines collapse. (inc66 / #153: 2054 test lines vs ~1030 code,
|
|
95
|
+
~half of it copy-pasted setup; two correctness rounds passed it.)
|
|
89
96
|
- [ ] NO resource management in the test body. Teardown (timers, polling, db close) is registered by the
|
|
90
97
|
Arrange helper via the test-context after hook (`t.after`) — the body must contain ZERO cleanup calls
|
|
91
98
|
(no `stopLogPolling()`, no `close()`). Managing resources inside a unit test is a bad practice.
|