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.
@@ -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,CA2DtB"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sensorium-mcp",
3
- "version": "3.1.3-board.7",
3
+ "version": "3.1.3-board.8",
4
4
  "description": "MCP server for remote control of AI assistants via Telegram",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -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.