# Files changed · PR \#22827 · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/pull/22827/diffs)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

[fix\(terminal\): identify T3 Code to integrated shells](https://git.cafe/pingdotgg/t3code/pull/22827.md)

Version: 14

Head commit: acaee8879d3a9bc55bce3d7ce205bff688688bcb

Base commit: 8d3b061121fe65669d5d43d011b48cd3027a4108

Comparison base: 8d3b061121fe65669d5d43d011b48cd3027a4108

Showing up to 20 entries from this revision. If the pull request changes, reopen the first page before continuing.

## apps/server/src/terminal/Manager.test.ts

Status: modified; +27; −0

```diff
@@ -29,6 +29,7 @@
 
 import * as ServerSecretStore from "../auth/ServerSecretStore.ts";
 import * as ServerConfig from "../config.ts";
+import packageJson from "../../package.json" with { type: "json" };
 import * as SqlitePersistence from "../persistence/Sqlite.ts";
 import * as ProcessRunner from "../processRunner.ts";
 import * as ServerSettings from "../serverSettings.ts";
@@ -1091,6 +1092,32 @@
     }),
   );
 
+  it.effect("identifies T3 Code to shells on open and restart", () =>
+    Effect.gen(function* () {
+      const { manager, ptyAdapter } = yield* createManager(5, {
+        env: {
+          TERM_PROGRAM: "parent-terminal",
+          TERM_PROGRAM_VERSION: "parent-version",
+          TEST_TERMINAL_KEEP: "keep-me",
+          T3CODE_PORT: "3773",
+        },
+      });
+      yield* manager.open(openInput());
+      yield* manager.restart(restartInput());
+
+      expect(ptyAdapter.spawnInputs).toHaveLength(2);
+      for (const { env } of ptyAdapter.spawnInputs) {
+        expect(env).toMatchObject({
+          TERM_PROGRAM: "t3code",
+          TERM_PROGRAM_VERSION: packageJson.version,
+          COLORTERM: "truecolor",
+          TEST_TERMINAL_KEEP: "keep-me",
+        });
+        expect(env.T3CODE_PORT).toBeUndefined();
+      }
+    }),
+  );
+
   it.effect("filters app runtime env variables from terminal sessions", () =>
     Effect.gen(function* () {
       const { manager, ptyAdapter } = yield* createManager(5, {
```

## apps/server/src/terminal/Manager.ts

Status: modified; +3; −0

```diff
@@ -61,6 +61,7 @@
 import * as SynchronizedRef from "effect/SynchronizedRef";
 
 import * as ServerConfig from "../config.ts";
+import packageJson from "../../package.json" with { type: "json" };
 import { mergeProviderInstanceEnvironment } from "@t3tools/provider-core/server/instanceEnvironment";
 import { resolveCodexHomeLayout } from "../provider/Drivers/CodexHomeLayout.ts";
 import { makeClaudeEnvironment } from "../provider/Drivers/ClaudeHome.ts";
@@ -1369,6 +1370,8 @@
   if (!spawnEnv.COLORTERM && runtimeEnv?.COLORTERM === undefined) {
     spawnEnv.COLORTERM = "truecolor";
   }
+  spawnEnv.TERM_PROGRAM = "t3code";
+  spawnEnv.TERM_PROGRAM_VERSION = packageJson.version;
   // fish 4.1+ can wait 10s at startup for a DA1 reply before a renderer can answer.
   // Skip the query unless the user or provider already chose `query-term` or `no-query-term`.
   const fishFeaturesKey =
```
