aicodeman 1.22.0 → 1.23.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/dist/config/dependency-registry.d.ts.map +1 -1
- package/dist/config/dependency-registry.js +27 -0
- package/dist/config/dependency-registry.js.map +1 -1
- package/dist/cron/cron-service.d.ts +3 -2
- package/dist/cron/cron-service.d.ts.map +1 -1
- package/dist/cron/cron-service.js +17 -3
- package/dist/cron/cron-service.js.map +1 -1
- package/dist/deepseek-status-shim.d.ts +77 -0
- package/dist/deepseek-status-shim.d.ts.map +1 -0
- package/dist/deepseek-status-shim.js +268 -0
- package/dist/deepseek-status-shim.js.map +1 -0
- package/dist/deepseek-transcript.d.ts +188 -0
- package/dist/deepseek-transcript.d.ts.map +1 -0
- package/dist/deepseek-transcript.js +633 -0
- package/dist/deepseek-transcript.js.map +1 -0
- package/dist/deepseek-web-server.d.ts +60 -0
- package/dist/deepseek-web-server.d.ts.map +1 -0
- package/dist/deepseek-web-server.js +249 -0
- package/dist/deepseek-web-server.js.map +1 -0
- package/dist/docker-hosts.d.ts.map +1 -1
- package/dist/docker-hosts.js +12 -0
- package/dist/docker-hosts.js.map +1 -1
- package/dist/mux-interface.d.ts +3 -1
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/remote-hosts.d.ts.map +1 -1
- package/dist/remote-hosts.js +4 -0
- package/dist/remote-hosts.js.map +1 -1
- package/dist/session.d.ts +27 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +47 -2
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts +23 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +134 -5
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tui/tui-app.d.ts.map +1 -1
- package/dist/tui/tui-app.js +1 -0
- package/dist/tui/tui-app.js.map +1 -1
- package/dist/tui/tui-client.d.ts +1 -1
- package/dist/tui/tui-client.d.ts.map +1 -1
- package/dist/types/api.d.ts +1 -1
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js.map +1 -1
- package/dist/types/session.d.ts +61 -4
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js +2 -1
- package/dist/types/session.js.map +1 -1
- package/dist/types/webview.d.ts +15 -0
- package/dist/types/webview.d.ts.map +1 -1
- package/dist/utils/deepseek-cli-resolver.d.ts +144 -0
- package/dist/utils/deepseek-cli-resolver.d.ts.map +1 -0
- package/dist/utils/deepseek-cli-resolver.js +339 -0
- package/dist/utils/deepseek-cli-resolver.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/web/public/admin-ui.js.gz +0 -0
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/app.360ece48.js +36 -0
- package/dist/web/public/app.360ece48.js.br +0 -0
- package/dist/web/public/app.360ece48.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/{constants.189c7bff.js → constants.f4ea0a19.js} +8 -1
- package/dist/web/public/constants.f4ea0a19.js.br +0 -0
- package/dist/web/public/constants.f4ea0a19.js.gz +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/entrance-animations.js.gz +0 -0
- package/dist/web/public/home-sessions.js +1 -0
- package/dist/web/public/home-sessions.js.br +0 -0
- package/dist/web/public/home-sessions.js.gz +0 -0
- package/dist/web/public/i18n.9ae15b51.js +1 -0
- package/dist/web/public/i18n.9ae15b51.js.br +0 -0
- package/dist/web/public/i18n.9ae15b51.js.gz +0 -0
- package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
- package/dist/web/public/index.html +46 -13
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.87f14251.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.0454a3e9.js.gz +0 -0
- package/dist/web/public/mobile-handlers.0f83a608.js.gz +0 -0
- package/dist/web/public/mobile-overview.js +6 -0
- package/dist/web/public/mobile-overview.js.br +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.cab92e3f.css +1 -0
- package/dist/web/public/mobile.cab92e3f.css.br +0 -0
- package/dist/web/public/mobile.cab92e3f.css.gz +0 -0
- package/dist/web/public/notification-manager.5d229063.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/{panels-ui.7c667123.js → panels-ui.50200a8d.js} +1 -1
- package/dist/web/public/panels-ui.50200a8d.js.br +0 -0
- package/dist/web/public/panels-ui.50200a8d.js.gz +0 -0
- package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
- package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
- package/dist/web/public/readmymind-ui.js.gz +0 -0
- package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
- package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/session-ui.103656d3.js +68 -0
- package/dist/web/public/session-ui.103656d3.js.br +0 -0
- package/dist/web/public/session-ui.103656d3.js.gz +0 -0
- package/dist/web/public/settings-ui.45f311a7.js +67 -0
- package/dist/web/public/settings-ui.45f311a7.js.br +0 -0
- package/dist/web/public/settings-ui.45f311a7.js.gz +0 -0
- package/dist/web/public/styles.1938fd02.css +1 -0
- package/dist/web/public/styles.1938fd02.css.br +0 -0
- package/dist/web/public/styles.1938fd02.css.gz +0 -0
- package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.42c24949.js +1 -0
- package/dist/web/public/tab-rail-resize.42c24949.js.br +0 -0
- package/dist/web/public/tab-rail-resize.42c24949.js.gz +0 -0
- package/dist/web/public/terminal-ui.ef68a666.js.gz +0 -0
- package/dist/web/public/ultracode-panel.js.gz +0 -0
- package/dist/web/public/ultracode-windows.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
- package/dist/web/public/vendor/marked.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-predictive-echo.bd6882b8.js.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.4ec670b0.js.gz +0 -0
- package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
- package/dist/web/public/webview-tabs.js +4 -1
- package/dist/web/public/webview-tabs.js.br +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/response-viewer-transcript.js +1 -1
- package/dist/web/response-viewer-transcript.js.map +1 -1
- package/dist/web/routes/approval-routes.d.ts.map +1 -1
- package/dist/web/routes/approval-routes.js +12 -2
- package/dist/web/routes/approval-routes.js.map +1 -1
- package/dist/web/routes/hook-event-routes.d.ts.map +1 -1
- package/dist/web/routes/hook-event-routes.js +51 -7
- package/dist/web/routes/hook-event-routes.js.map +1 -1
- package/dist/web/routes/readmymind-routes.d.ts.map +1 -1
- package/dist/web/routes/readmymind-routes.js +5 -2
- package/dist/web/routes/readmymind-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +30 -2
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +158 -16
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +203 -2
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/routes/webview-routes.d.ts.map +1 -1
- package/dist/web/routes/webview-routes.js +1 -0
- package/dist/web/routes/webview-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +68 -0
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +107 -4
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +21 -3
- package/dist/web/server.js.map +1 -1
- package/dist/web/session-wait-registry.d.ts +63 -7
- package/dist/web/session-wait-registry.d.ts.map +1 -1
- package/dist/web/session-wait-registry.js +67 -9
- package/dist/web/session-wait-registry.js.map +1 -1
- package/dist/web/sse-events.d.ts +11 -2
- package/dist/web/sse-events.d.ts.map +1 -1
- package/dist/web/sse-events.js +11 -2
- package/dist/web/sse-events.js.map +1 -1
- package/package.json +2 -1
- package/skills/codeman/SKILL.md +121 -34
- package/skills/codeman/preamble.sh +81 -26
- package/skills/codeman/reference/endpoints.md +18 -10
- package/skills/codeman/reference/messaging.md +2 -2
- package/skills/codeman/reference/recipes.md +53 -0
- package/skills/codeman/reference/verbs.md +39 -8
- package/dist/web/public/app.84bf8955.js +0 -36
- package/dist/web/public/app.84bf8955.js.br +0 -0
- package/dist/web/public/app.84bf8955.js.gz +0 -0
- package/dist/web/public/constants.189c7bff.js.br +0 -0
- package/dist/web/public/constants.189c7bff.js.gz +0 -0
- package/dist/web/public/i18n.34016b89.js +0 -1
- package/dist/web/public/i18n.34016b89.js.br +0 -0
- package/dist/web/public/i18n.34016b89.js.gz +0 -0
- package/dist/web/public/mobile.983f064e.css +0 -1
- package/dist/web/public/mobile.983f064e.css.br +0 -0
- package/dist/web/public/mobile.983f064e.css.gz +0 -0
- package/dist/web/public/panels-ui.7c667123.js.br +0 -0
- package/dist/web/public/panels-ui.7c667123.js.gz +0 -0
- package/dist/web/public/session-ui.acd79900.js +0 -68
- package/dist/web/public/session-ui.acd79900.js.br +0 -0
- package/dist/web/public/session-ui.acd79900.js.gz +0 -0
- package/dist/web/public/settings-ui.115a2d1e.js +0 -67
- package/dist/web/public/settings-ui.115a2d1e.js.br +0 -0
- package/dist/web/public/settings-ui.115a2d1e.js.gz +0 -0
- package/dist/web/public/styles.64369ebd.css +0 -1
- package/dist/web/public/styles.64369ebd.css.br +0 -0
- package/dist/web/public/styles.64369ebd.css.gz +0 -0
- package/dist/web/public/tab-rail-resize.f3465ce1.js +0 -1
- package/dist/web/public/tab-rail-resize.f3465ce1.js.br +0 -0
- package/dist/web/public/tab-rail-resize.f3465ce1.js.gz +0 -0
package/dist/tmux-manager.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* @module tmux-manager
|
|
22
22
|
*/
|
|
23
23
|
import { EventEmitter } from 'node:events';
|
|
24
|
-
import { ProcessStats, PersistedRespawnConfig, type PaneInfo, type ClaudeMode, type SessionMode, type OpenCodeConfig, type CodexConfig, type EffortLevel, type GeminiConfig, type AntigravityConfig, type PiConfig, type GrokConfig, type SessionRemote, type SessionDocker } from './types.js';
|
|
24
|
+
import { ProcessStats, PersistedRespawnConfig, type PaneInfo, type ClaudeMode, type SessionMode, type OpenCodeConfig, type CodexConfig, type EffortLevel, type GeminiConfig, type AntigravityConfig, type PiConfig, type GrokConfig, type DeepSeekConfig, type SessionRemote, type SessionDocker } from './types.js';
|
|
25
25
|
import { type DockerCreateContext, type DockerSeedCopy } from './docker-hosts.js';
|
|
26
26
|
import type { TerminalMultiplexer, MuxSession, MuxSessionWithStats, CreateSessionOptions, RespawnPaneOptions, PaneCaptureOptions } from './mux-interface.js';
|
|
27
27
|
/** Claude Code native macOS recommendation for avoiding low nofile startup failures. */
|
|
@@ -95,6 +95,7 @@ export declare function buildSpawnCommand(options: {
|
|
|
95
95
|
antigravityConfig?: AntigravityConfig;
|
|
96
96
|
piConfig?: PiConfig;
|
|
97
97
|
grokConfig?: GrokConfig;
|
|
98
|
+
deepSeekConfig?: DeepSeekConfig;
|
|
98
99
|
resumeSessionId?: string;
|
|
99
100
|
effort?: EffortLevel;
|
|
100
101
|
/** Codeman session name, passed to claude as `--name` (version-gated, sanitized; local spawns only). */
|
|
@@ -337,6 +338,27 @@ export declare class TmuxManager extends EventEmitter implements TerminalMultipl
|
|
|
337
338
|
* Configure Gemini-specific environment on a tmux session.
|
|
338
339
|
*/
|
|
339
340
|
private _configureGemini;
|
|
341
|
+
/**
|
|
342
|
+
* Configure DeepSeek Harness environment on a tmux session.
|
|
343
|
+
*
|
|
344
|
+
* Two independent things, both via `tmux setenv` so they are inherited by the
|
|
345
|
+
* pane without appearing in `ps`:
|
|
346
|
+
*
|
|
347
|
+
* 1. `DSH_PERMISSION_MODE` — the harness's only permission input. Exported
|
|
348
|
+
* ONLY when the caller sent one, so an absent config lands on the harness's
|
|
349
|
+
* own `workspace-write` default (which asks) rather than on ours. That
|
|
350
|
+
* "only if sent" shape is what the multi-user clamp relies on.
|
|
351
|
+
* 2. The `HERDR_*` triple — the supervisor contract the terminal front door
|
|
352
|
+
* uses to report idle/working/blocked. Pointing `HERDR_BIN_PATH` at our own
|
|
353
|
+
* generated shim is what upgrades this mode from output-stabilization
|
|
354
|
+
* guessing to definitive hook events (see deepseek-status-shim.ts). The
|
|
355
|
+
* pane id IS the Codeman session id, which is how the shim attributes a
|
|
356
|
+
* report without trusting anything the agent could influence.
|
|
357
|
+
*
|
|
358
|
+
* Also forwards DEEPSEEK_API_KEY / DEEPSEEK_BASE_URL from the server env when
|
|
359
|
+
* present, matching the codex/gemini precedent for headless auth.
|
|
360
|
+
*/
|
|
361
|
+
private _configureDeepSeek;
|
|
340
362
|
/**
|
|
341
363
|
* Creates a new tmux session wrapping Claude CLI or a shell.
|
|
342
364
|
* In test mode: creates an in-memory session only (no real tmux session).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-manager.d.ts","sourceRoot":"","sources":["../src/tmux-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiB3C,OAAO,EACL,YAAY,EACZ,sBAAsB,EAGtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,aAAa,EAEnB,MAAM,YAAY,CAAC;AAQpB,OAAO,EASL,KAAK,mBAAmB,EAExB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tmux-manager.d.ts","sourceRoot":"","sources":["../src/tmux-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/tmux-manager.js
CHANGED
|
@@ -34,12 +34,13 @@ import { getErrorMessage, DEFAULT_NICE_CONFIG, } from './types.js';
|
|
|
34
34
|
import { buildEffortCliArgs, buildNameCliArgs } from './session-cli-builder.js';
|
|
35
35
|
import { buildSshConnectionArgs, defaultRemoteCommandForMode, remoteLoginShellCommand, remoteSshTarget, } from './remote-hosts.js';
|
|
36
36
|
import { buildDockerBaseArgs, buildDockerCreateArgs, containerApiUrl, CONTAINER_HOME, defaultDockerCommandForMode, hostGatewayAlias, resolveDockerClaudeArtifacts, resolveDockerCredentialArtifacts, } from './docker-hosts.js';
|
|
37
|
-
import { wrapWithNice, SAFE_PATH_PATTERN, findClaudeDir, getClaudeCliVersion, getClaudeNotFoundMessage, resolveOpenCodeDir, getOpenCodeNotFoundMessage, resolveCodexDir, getCodexNotFoundMessage, resolveGeminiDir, getGeminiNotFoundMessage, resolveAntigravityDir, getAntigravityNotFoundMessage, resolvePiDir, getPiNotFoundMessage, resolveGrokDir, getGrokNotFoundMessage, resolveLocalShell, loginShellArgs, } from './utils/index.js';
|
|
37
|
+
import { wrapWithNice, SAFE_PATH_PATTERN, findClaudeDir, getClaudeCliVersion, getClaudeNotFoundMessage, resolveOpenCodeDir, getOpenCodeNotFoundMessage, resolveCodexDir, getCodexNotFoundMessage, resolveGeminiDir, getGeminiNotFoundMessage, resolveAntigravityDir, getAntigravityNotFoundMessage, resolvePiDir, getPiNotFoundMessage, resolveGrokDir, getGrokNotFoundMessage, resolveDeepSeekDir, getDeepSeekNotFoundMessage, resolveDefaultDeepSeekProfile, resolveLocalShell, loginShellArgs, } from './utils/index.js';
|
|
38
38
|
import { decideReconnect, advanceBackoff, freshReconnectState, resetReconnectState, } from './remote-reconnect.js';
|
|
39
39
|
// ============================================================================
|
|
40
40
|
// Timing Constants
|
|
41
41
|
// ============================================================================
|
|
42
42
|
import { EXEC_TIMEOUT_MS } from './config/exec-timeout.js';
|
|
43
|
+
import { ensureDeepSeekStatusShim } from './deepseek-status-shim.js';
|
|
43
44
|
/** How long a cached process snapshot stays usable. */
|
|
44
45
|
const PROC_SNAPSHOT_TTL_MS = 2000;
|
|
45
46
|
/**
|
|
@@ -697,6 +698,47 @@ function buildGrokCommand(config) {
|
|
|
697
698
|
}
|
|
698
699
|
return parts.join(' ');
|
|
699
700
|
}
|
|
701
|
+
/**
|
|
702
|
+
* Build the DeepSeek Harness (`dsh`) command with appropriate flags.
|
|
703
|
+
*
|
|
704
|
+
* Unlike every sibling builder, the interesting decision here is not a flag but
|
|
705
|
+
* WHICH PROFILE to boot: `dsh` is a launcher over `$DSH_HOME/profiles/<name>`,
|
|
706
|
+
* and DeepSeek ships no interactive terminal profile of its own, so the agent a
|
|
707
|
+
* pane runs is always one the user installed. An absent `profile` resolves to
|
|
708
|
+
* the first pane-capable profile on the box; when there is none we still emit a
|
|
709
|
+
* bare `dsh --profile <default>` rather than inventing a name, because the
|
|
710
|
+
* availability gate in createSession() has already refused the spawn by then and
|
|
711
|
+
* this path only runs for a session that passed it.
|
|
712
|
+
*
|
|
713
|
+
* There is deliberately NO permission flag: the harness has none. The sandbox
|
|
714
|
+
* and approval rows read `DSH_PERMISSION_MODE`, exported through `tmux setenv`
|
|
715
|
+
* in buildEnvExports() so it never lands on this command line.
|
|
716
|
+
*
|
|
717
|
+
* Like the sibling builders, every user value is regex-allowlisted and silently
|
|
718
|
+
* DROPPED on failure: the result is interpolated into a `bash -c "..."` string.
|
|
719
|
+
*/
|
|
720
|
+
function buildDeepSeekCommand(config) {
|
|
721
|
+
const parts = ['dsh'];
|
|
722
|
+
// A profile name is a single path segment: it is both interpolated into the
|
|
723
|
+
// shell line and joined into a filesystem path.
|
|
724
|
+
const requested = config?.profile;
|
|
725
|
+
const safeProfile = requested && /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(requested)
|
|
726
|
+
? requested
|
|
727
|
+
: (resolveDefaultDeepSeekProfile() ?? undefined);
|
|
728
|
+
if (safeProfile)
|
|
729
|
+
parts.push('--profile', safeProfile);
|
|
730
|
+
// The launcher forwards everything after its own flags to the profile's app,
|
|
731
|
+
// which is where `--resume` is understood. An explicit id wins over the
|
|
732
|
+
// most-recent-session form, mirroring the sibling builders.
|
|
733
|
+
const safeSessionId = config?.resumeSessionId && /^[a-zA-Z0-9._-]+$/.test(config.resumeSessionId) ? config.resumeSessionId : undefined;
|
|
734
|
+
if (safeSessionId) {
|
|
735
|
+
parts.push('--resume', safeSessionId);
|
|
736
|
+
}
|
|
737
|
+
else if (config?.resumeSession) {
|
|
738
|
+
parts.push('--resume');
|
|
739
|
+
}
|
|
740
|
+
return parts.join(' ');
|
|
741
|
+
}
|
|
700
742
|
/**
|
|
701
743
|
* Build the spawn command for any session mode.
|
|
702
744
|
* Shared by createSession() and respawnPane() to avoid duplication.
|
|
@@ -764,6 +806,9 @@ export function buildSpawnCommand(options) {
|
|
|
764
806
|
if (options.mode === 'grok') {
|
|
765
807
|
return buildGrokCommand(options.grokConfig);
|
|
766
808
|
}
|
|
809
|
+
if (options.mode === 'deepseek') {
|
|
810
|
+
return buildDeepSeekCommand(options.deepSeekConfig);
|
|
811
|
+
}
|
|
767
812
|
// #208: NOT the literal '$SHELL'. This string is embedded in the `bash -c "…"`
|
|
768
813
|
// argument of the respawn-pane line, which execSync runs through `/bin/sh -c`,
|
|
769
814
|
// so a `$SHELL` here is expanded by the SERVER process's shell against the
|
|
@@ -964,6 +1009,8 @@ function appendResumeFlag(modeCommand, mode, resumeId) {
|
|
|
964
1009
|
return `${modeCommand} --session ${resumeId}`;
|
|
965
1010
|
case 'grok':
|
|
966
1011
|
return `${modeCommand} --resume ${resumeId}`;
|
|
1012
|
+
case 'deepseek':
|
|
1013
|
+
return `${modeCommand} --resume ${resumeId}`;
|
|
967
1014
|
default:
|
|
968
1015
|
return modeCommand; // shell / opencode: no resume
|
|
969
1016
|
}
|
|
@@ -1499,10 +1546,20 @@ export class TmuxManager extends EventEmitter {
|
|
|
1499
1546
|
const exports = [
|
|
1500
1547
|
'export LANG=en_US.UTF-8',
|
|
1501
1548
|
'export LC_ALL=en_US.UTF-8',
|
|
1502
|
-
mode === 'codex' ||
|
|
1549
|
+
mode === 'codex' ||
|
|
1550
|
+
mode === 'gemini' ||
|
|
1551
|
+
mode === 'antigravity' ||
|
|
1552
|
+
mode === 'pi' ||
|
|
1553
|
+
mode === 'grok' ||
|
|
1554
|
+
mode === 'deepseek'
|
|
1503
1555
|
? 'export COLORTERM=truecolor'
|
|
1504
1556
|
: 'unset COLORTERM',
|
|
1505
|
-
...(mode === 'codex' ||
|
|
1557
|
+
...(mode === 'codex' ||
|
|
1558
|
+
mode === 'gemini' ||
|
|
1559
|
+
mode === 'antigravity' ||
|
|
1560
|
+
mode === 'pi' ||
|
|
1561
|
+
mode === 'grok' ||
|
|
1562
|
+
mode === 'deepseek'
|
|
1506
1563
|
? ['unset NO_COLOR']
|
|
1507
1564
|
: []),
|
|
1508
1565
|
// Stamp each Codex pane with a unique originator so the response-viewer
|
|
@@ -1606,6 +1663,10 @@ export class TmuxManager extends EventEmitter {
|
|
|
1606
1663
|
const dir = resolveGrokDir();
|
|
1607
1664
|
return { pathExport: dir ? `export PATH="${dir}:$PATH" && ` : '', dir };
|
|
1608
1665
|
}
|
|
1666
|
+
if (mode === 'deepseek') {
|
|
1667
|
+
const dir = resolveDeepSeekDir();
|
|
1668
|
+
return { pathExport: dir ? `export PATH="${dir}:$PATH" && ` : '', dir };
|
|
1669
|
+
}
|
|
1609
1670
|
return { pathExport: '', dir: null };
|
|
1610
1671
|
}
|
|
1611
1672
|
/**
|
|
@@ -1632,12 +1693,67 @@ export class TmuxManager extends EventEmitter {
|
|
|
1632
1693
|
_configureGemini(muxName) {
|
|
1633
1694
|
setGeminiEnvVars(this.tmux(), muxName);
|
|
1634
1695
|
}
|
|
1696
|
+
/**
|
|
1697
|
+
* Configure DeepSeek Harness environment on a tmux session.
|
|
1698
|
+
*
|
|
1699
|
+
* Two independent things, both via `tmux setenv` so they are inherited by the
|
|
1700
|
+
* pane without appearing in `ps`:
|
|
1701
|
+
*
|
|
1702
|
+
* 1. `DSH_PERMISSION_MODE` — the harness's only permission input. Exported
|
|
1703
|
+
* ONLY when the caller sent one, so an absent config lands on the harness's
|
|
1704
|
+
* own `workspace-write` default (which asks) rather than on ours. That
|
|
1705
|
+
* "only if sent" shape is what the multi-user clamp relies on.
|
|
1706
|
+
* 2. The `HERDR_*` triple — the supervisor contract the terminal front door
|
|
1707
|
+
* uses to report idle/working/blocked. Pointing `HERDR_BIN_PATH` at our own
|
|
1708
|
+
* generated shim is what upgrades this mode from output-stabilization
|
|
1709
|
+
* guessing to definitive hook events (see deepseek-status-shim.ts). The
|
|
1710
|
+
* pane id IS the Codeman session id, which is how the shim attributes a
|
|
1711
|
+
* report without trusting anything the agent could influence.
|
|
1712
|
+
*
|
|
1713
|
+
* Also forwards DEEPSEEK_API_KEY / DEEPSEEK_BASE_URL from the server env when
|
|
1714
|
+
* present, matching the codex/gemini precedent for headless auth.
|
|
1715
|
+
*/
|
|
1716
|
+
_configureDeepSeek(muxName, sessionId, config) {
|
|
1717
|
+
const tmuxCmd = this.tmux();
|
|
1718
|
+
const setenv = (key, value) => {
|
|
1719
|
+
const escaped = value.replace(/'/g, "'\\''");
|
|
1720
|
+
try {
|
|
1721
|
+
execSync(`${tmuxCmd} setenv -t '${muxName}' ${key} '${escaped}'`, {
|
|
1722
|
+
encoding: 'utf8',
|
|
1723
|
+
timeout: EXEC_TIMEOUT_MS,
|
|
1724
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
1725
|
+
});
|
|
1726
|
+
}
|
|
1727
|
+
catch {
|
|
1728
|
+
/* Non-critical */
|
|
1729
|
+
}
|
|
1730
|
+
};
|
|
1731
|
+
for (const key of ['DEEPSEEK_API_KEY', 'DEEPSEEK_BASE_URL', 'DSH_HOME']) {
|
|
1732
|
+
const val = process.env[key];
|
|
1733
|
+
if (val)
|
|
1734
|
+
setenv(key, val);
|
|
1735
|
+
}
|
|
1736
|
+
// Enum-validated at the schema boundary; re-checked here because this value
|
|
1737
|
+
// reaches a shell line, and a builder must never trust its caller.
|
|
1738
|
+
if (config?.permissionMode &&
|
|
1739
|
+
['read-only', 'workspace-write', 'danger-full-access'].includes(config.permissionMode)) {
|
|
1740
|
+
setenv('DSH_PERMISSION_MODE', config.permissionMode);
|
|
1741
|
+
}
|
|
1742
|
+
if (config?.statusReporting !== false) {
|
|
1743
|
+
const shim = ensureDeepSeekStatusShim();
|
|
1744
|
+
if (shim) {
|
|
1745
|
+
setenv('HERDR_ENV', '1');
|
|
1746
|
+
setenv('HERDR_BIN_PATH', shim);
|
|
1747
|
+
setenv('HERDR_PANE_ID', sessionId);
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
}
|
|
1635
1751
|
/**
|
|
1636
1752
|
* Creates a new tmux session wrapping Claude CLI or a shell.
|
|
1637
1753
|
* In test mode: creates an in-memory session only (no real tmux session).
|
|
1638
1754
|
*/
|
|
1639
1755
|
async createSession(options) {
|
|
1640
|
-
const { sessionId, workingDir, mode, name, niceConfig, model, claudeMode, allowedTools, openCodeConfig, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, resumeSessionId, envOverrides, effort, historyLimit = DEFAULT_TMUX_HISTORY_LIMIT, remote, docker, owner, } = options;
|
|
1756
|
+
const { sessionId, workingDir, mode, name, niceConfig, model, claudeMode, allowedTools, openCodeConfig, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, deepSeekConfig, resumeSessionId, envOverrides, effort, historyLimit = DEFAULT_TMUX_HISTORY_LIMIT, remote, docker, owner, } = options;
|
|
1641
1757
|
const muxName = `codeman-${sessionId.slice(0, 8)}`;
|
|
1642
1758
|
if (!isValidMuxName(muxName)) {
|
|
1643
1759
|
throw new Error('Invalid session name: contains unsafe characters');
|
|
@@ -1687,6 +1803,9 @@ export class TmuxManager extends EventEmitter {
|
|
|
1687
1803
|
if (mode === 'pi' && !cliDir) {
|
|
1688
1804
|
throw new Error(getPiNotFoundMessage());
|
|
1689
1805
|
}
|
|
1806
|
+
if (mode === 'deepseek' && !cliDir) {
|
|
1807
|
+
throw new Error(getDeepSeekNotFoundMessage());
|
|
1808
|
+
}
|
|
1690
1809
|
if (mode === 'grok' && !cliDir) {
|
|
1691
1810
|
throw new Error(getGrokNotFoundMessage());
|
|
1692
1811
|
}
|
|
@@ -1703,6 +1822,7 @@ export class TmuxManager extends EventEmitter {
|
|
|
1703
1822
|
antigravityConfig,
|
|
1704
1823
|
piConfig,
|
|
1705
1824
|
grokConfig,
|
|
1825
|
+
deepSeekConfig,
|
|
1706
1826
|
resumeSessionId,
|
|
1707
1827
|
effort,
|
|
1708
1828
|
sessionName: name,
|
|
@@ -1767,6 +1887,10 @@ export class TmuxManager extends EventEmitter {
|
|
|
1767
1887
|
if (mode === 'gemini') {
|
|
1768
1888
|
this._configureGemini(muxName);
|
|
1769
1889
|
}
|
|
1890
|
+
// For DeepSeek: permission mode + the Herdr-compatible status bridge.
|
|
1891
|
+
if (mode === 'deepseek') {
|
|
1892
|
+
this._configureDeepSeek(muxName, sessionId, deepSeekConfig);
|
|
1893
|
+
}
|
|
1770
1894
|
// Apply user-supplied env overrides (e.g., CLAUDE_CODE_EFFORT_LEVEL) via tmux setenv
|
|
1771
1895
|
// so secret values stay off the bash command line. Must run before respawn-pane.
|
|
1772
1896
|
this.applyEnvOverrides(muxName, envOverrides);
|
|
@@ -1895,7 +2019,7 @@ export class TmuxManager extends EventEmitter {
|
|
|
1895
2019
|
* preserving the session and its scrollback buffer.
|
|
1896
2020
|
*/
|
|
1897
2021
|
async respawnPane(options) {
|
|
1898
|
-
const { sessionId, workingDir, mode, niceConfig, model, claudeMode, allowedTools, openCodeConfig, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, resumeSessionId, envOverrides, effort, remote, docker, name, } = options;
|
|
2022
|
+
const { sessionId, workingDir, mode, niceConfig, model, claudeMode, allowedTools, openCodeConfig, codexConfig, geminiConfig, antigravityConfig, piConfig, grokConfig, deepSeekConfig, resumeSessionId, envOverrides, effort, remote, docker, name, } = options;
|
|
1899
2023
|
const session = this.sessions.get(sessionId);
|
|
1900
2024
|
if (!session)
|
|
1901
2025
|
return null;
|
|
@@ -1917,6 +2041,7 @@ export class TmuxManager extends EventEmitter {
|
|
|
1917
2041
|
antigravityConfig,
|
|
1918
2042
|
piConfig,
|
|
1919
2043
|
grokConfig,
|
|
2044
|
+
deepSeekConfig,
|
|
1920
2045
|
resumeSessionId,
|
|
1921
2046
|
effort,
|
|
1922
2047
|
sessionName: name,
|
|
@@ -1941,6 +2066,10 @@ export class TmuxManager extends EventEmitter {
|
|
|
1941
2066
|
if (mode === 'gemini') {
|
|
1942
2067
|
this._configureGemini(muxName);
|
|
1943
2068
|
}
|
|
2069
|
+
// For DeepSeek: permission mode + the Herdr-compatible status bridge.
|
|
2070
|
+
if (mode === 'deepseek') {
|
|
2071
|
+
this._configureDeepSeek(muxName, sessionId, deepSeekConfig);
|
|
2072
|
+
}
|
|
1944
2073
|
// Re-apply user env overrides before respawn so the new shell inherits them.
|
|
1945
2074
|
this.applyEnvOverrides(muxName, envOverrides);
|
|
1946
2075
|
// -c /tmp + cd bounce — see createSession() for rationale (stale FUSE state).
|