@codeyam/codeyam-cli 0.1.18 → 0.1.19

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 (38) hide show
  1. package/analyzer-template/.build-info.json +6 -6
  2. package/analyzer-template/log.txt +3 -3
  3. package/codeyam-cli/src/cli.js +15 -0
  4. package/codeyam-cli/src/cli.js.map +1 -1
  5. package/codeyam-cli/src/commands/__tests__/editor.stepDispatch.test.js +9 -9
  6. package/codeyam-cli/src/commands/editor.js +334 -254
  7. package/codeyam-cli/src/commands/editor.js.map +1 -1
  8. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js +67 -0
  9. package/codeyam-cli/src/utils/__tests__/editorGuardMiddleware.test.js.map +1 -0
  10. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +16 -1
  11. package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -1
  12. package/codeyam-cli/src/utils/editorGuard.js +36 -0
  13. package/codeyam-cli/src/utils/editorGuard.js.map +1 -0
  14. package/codeyam-cli/src/utils/editorScenarios.js +1 -1
  15. package/codeyam-cli/src/utils/simulationGateMiddleware.js +9 -0
  16. package/codeyam-cli/src/utils/simulationGateMiddleware.js.map +1 -1
  17. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js +17 -6
  18. package/codeyam-cli/src/webserver/__tests__/idleDetector.test.js.map +1 -1
  19. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js +79 -0
  20. package/codeyam-cli/src/webserver/__tests__/stripClaudeCommand.test.js.map +1 -0
  21. package/codeyam-cli/src/webserver/build/client/assets/{editor.entity.(_sha)-Bnx7yUP0.js → editor.entity.(_sha)-CGzKlIHg.js} +13 -13
  22. package/codeyam-cli/src/webserver/build/client/assets/globals-Yn9W3zp3.css +1 -0
  23. package/codeyam-cli/src/webserver/build/client/assets/{manifest-b9d4d267.js → manifest-2ef99f38.js} +1 -1
  24. package/codeyam-cli/src/webserver/build/client/assets/{root-DB3O9_9j.js → root-BxUQigda.js} +5 -5
  25. package/codeyam-cli/src/webserver/build/server/assets/{analysisRunner-CGwTN3V2.js → analysisRunner-BPmOG9bE.js} +1 -1
  26. package/codeyam-cli/src/webserver/build/server/assets/{index-D4meMKy3.js → index-Cd-ufawF.js} +1 -1
  27. package/codeyam-cli/src/webserver/build/server/assets/{init-odGJ_c2-.js → init-CzeBGOto.js} +1 -1
  28. package/codeyam-cli/src/webserver/build/server/assets/{server-build-TmPfF7pT.js → server-build-Dht7CKXY.js} +102 -102
  29. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  30. package/codeyam-cli/src/webserver/build-info.json +5 -5
  31. package/codeyam-cli/src/webserver/terminalServer.js +85 -19
  32. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  33. package/codeyam-cli/templates/__tests__/editor-step-hook.prompt-capture.test.ts +118 -0
  34. package/codeyam-cli/templates/codeyam-editor-claude.md +2 -0
  35. package/codeyam-cli/templates/codeyam-editor-reference.md +1 -1
  36. package/codeyam-cli/templates/editor-step-hook.py +72 -46
  37. package/package.json +1 -1
  38. package/codeyam-cli/src/webserver/build/client/assets/globals-fAqOD9ex.css +0 -1
@@ -0,0 +1,67 @@
1
+ import { simulationGateMiddleware } from "../simulationGateMiddleware.js";
2
+ // We only need to test the editor guard logic — mock out the rest of the middleware
3
+ // so it doesn't try to load projects or databases.
4
+ jest.mock('../project', () => ({
5
+ findProjectRoot: () => null,
6
+ }));
7
+ jest.mock('../database', () => ({
8
+ initializeEnvironment: jest.fn(),
9
+ requireBranchAndProject: jest.fn(),
10
+ }));
11
+ jest.mock('../slugUtils', () => ({
12
+ generateProjectSlug: jest.fn(),
13
+ }));
14
+ describe('editor guard in simulationGateMiddleware', () => {
15
+ const originalEnv = process.env.CODEYAM_EDITOR_ACTIVE;
16
+ let exitSpy;
17
+ let errorSpy;
18
+ beforeEach(() => {
19
+ exitSpy = jest
20
+ .spyOn(process, 'exit')
21
+ .mockImplementation(() => undefined);
22
+ errorSpy = jest.spyOn(console, 'error').mockImplementation(() => { });
23
+ });
24
+ afterEach(() => {
25
+ process.env.CODEYAM_EDITOR_ACTIVE = originalEnv;
26
+ if (process.env.CODEYAM_EDITOR_ACTIVE === undefined) {
27
+ delete process.env.CODEYAM_EDITOR_ACTIVE;
28
+ }
29
+ exitSpy.mockRestore();
30
+ errorSpy.mockRestore();
31
+ });
32
+ it('allows `editor` command when CODEYAM_EDITOR_ACTIVE=1', async () => {
33
+ process.env.CODEYAM_EDITOR_ACTIVE = '1';
34
+ await simulationGateMiddleware({ _: ['editor'] });
35
+ expect(exitSpy).not.toHaveBeenCalled();
36
+ });
37
+ it.each(['analyze', 'init', 'verify', 'start', 'stop', 'memory', 'debug'])('blocks `%s` command when CODEYAM_EDITOR_ACTIVE=1', async (command) => {
38
+ process.env.CODEYAM_EDITOR_ACTIVE = '1';
39
+ await simulationGateMiddleware({ _: [command] });
40
+ expect(exitSpy).toHaveBeenCalledWith(1);
41
+ });
42
+ it('error message mentions `codeyam editor` subcommands', async () => {
43
+ process.env.CODEYAM_EDITOR_ACTIVE = '1';
44
+ await simulationGateMiddleware({ _: ['analyze'] });
45
+ const output = errorSpy.mock.calls.map((c) => c[0]).join('\n');
46
+ expect(output).toContain('codeyam editor');
47
+ });
48
+ it('error message mentions `codeyam editor steps`', async () => {
49
+ process.env.CODEYAM_EDITOR_ACTIVE = '1';
50
+ await simulationGateMiddleware({ _: ['analyze'] });
51
+ const output = errorSpy.mock.calls.map((c) => c[0]).join('\n');
52
+ expect(output).toContain('codeyam editor steps');
53
+ });
54
+ it('does not activate guard when CODEYAM_EDITOR_ACTIVE is not set', async () => {
55
+ delete process.env.CODEYAM_EDITOR_ACTIVE;
56
+ // A non-hidden command should pass through without exit
57
+ await simulationGateMiddleware({ _: ['editor'] });
58
+ expect(exitSpy).not.toHaveBeenCalled();
59
+ });
60
+ it('does not block non-hidden commands when env var is absent', async () => {
61
+ delete process.env.CODEYAM_EDITOR_ACTIVE;
62
+ // 'help' is not a hidden command and env var is absent — should pass through
63
+ await simulationGateMiddleware({ _: ['help'] });
64
+ expect(exitSpy).not.toHaveBeenCalled();
65
+ });
66
+ });
67
+ //# sourceMappingURL=editorGuardMiddleware.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorGuardMiddleware.test.js","sourceRoot":"","sources":["../../../../../src/utils/__tests__/editorGuardMiddleware.test.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,22 @@ import * as http from 'http';
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import * as os from 'os';
5
+ import { execSync } from 'child_process';
5
6
  import { runCaptureScript, resolveCaptureScript } from "../editorCapture.js";
7
+ // Skip when Playwright browsers aren't installed (CI unit test jobs
8
+ // may not have them — they're only installed for integration tests).
9
+ let hasPlaywright = false;
10
+ try {
11
+ // Playwright stores browsers in a platform-specific cache directory.
12
+ // Rather than guessing the path, try to resolve the chromium executable.
13
+ const result = execSync('node -e "const { chromium } = require(\'playwright\'); console.log(chromium.executablePath())"', { stdio: 'pipe', timeout: 10000 });
14
+ const execPath = result.toString().trim();
15
+ hasPlaywright = !!execPath && fs.existsSync(execPath);
16
+ }
17
+ catch {
18
+ hasPlaywright = false;
19
+ }
20
+ const describeIfPlaywright = hasPlaywright ? describe : describe.skip;
6
21
  /**
7
22
  * Integration test for journalCapture.ts page stabilization.
8
23
  *
@@ -18,7 +33,7 @@ import { runCaptureScript, resolveCaptureScript } from "../editorCapture.js";
18
33
  * journalCapture.ts logs the page title right before taking the screenshot.
19
34
  * If the stabilization logic works correctly, the title will be "LOADED".
20
35
  */
21
- describe('journalCapture page stabilization', () => {
36
+ describeIfPlaywright('journalCapture page stabilization', () => {
22
37
  let tempDir;
23
38
  let server;
24
39
  let port;
@@ -1 +1 @@
1
- {"version":3,"file":"journalCaptureStabilization.test.js","sourceRoot":"","sources":["../../../../../src/utils/__tests__/journalCaptureStabilization.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journalCaptureStabilization.test.js","sourceRoot":"","sources":["../../../../../src/utils/__tests__/journalCaptureStabilization.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Guard against running dangerous commands from inside the editor terminal.
3
+ *
4
+ * The editor runs Claude Code in a PTY with CODEYAM_EDITOR_ACTIVE=1.
5
+ * Commands like `codeyam stop` would kill the editor server (and the
6
+ * terminal session), so they must be blocked. Only `codeyam editor <subcommand>`
7
+ * commands are safe to run from inside the editor.
8
+ */
9
+ /** Commands that would break the editor session if run from inside it. */
10
+ const BLOCKED_COMMANDS = [
11
+ 'stop', // Kills the background server (and the editor terminal)
12
+ 'start', // Restarts the background server
13
+ 'init', // Reinitializes the project (rewrites DB, config)
14
+ 'editor', // Bare "codeyam editor" relaunches the editor (recursive)
15
+ 'wipe', // Wipes the database
16
+ 'setup-simulations', // Modifies project setup
17
+ ];
18
+ export function checkEditorGuard(command, additionalArgs) {
19
+ if (process.env.CODEYAM_EDITOR_ACTIVE !== '1') {
20
+ return { blocked: false };
21
+ }
22
+ // "codeyam editor <subcommand>" is fine — only bare "codeyam editor" is blocked
23
+ if (command === 'editor' && additionalArgs && additionalArgs.length > 0) {
24
+ return { blocked: false };
25
+ }
26
+ if (BLOCKED_COMMANDS.includes(command)) {
27
+ return {
28
+ blocked: true,
29
+ message: `"codeyam ${command}" cannot be run from inside the editor terminal — ` +
30
+ `it would kill the editor session.\n` +
31
+ `Use "codeyam editor <subcommand>" commands instead (e.g., codeyam editor dev-server, codeyam editor scenarios).`,
32
+ };
33
+ }
34
+ return { blocked: false };
35
+ }
36
+ //# sourceMappingURL=editorGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editorGuard.js","sourceRoot":"","sources":["../../../../src/utils/editorGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0EAA0E;AAC1E,MAAM,gBAAgB,GAAG;IACvB,MAAM,EAAE,wDAAwD;IAChE,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,kDAAkD;IAC1D,QAAQ,EAAE,0DAA0D;IACpE,MAAM,EAAE,qBAAqB;IAC7B,mBAAmB,EAAE,yBAAyB;CAC/C,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,cAAyB;IAEzB,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,EAAE,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,gFAAgF;IAChF,IAAI,OAAO,KAAK,QAAQ,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EACL,YAAY,OAAO,oDAAoD;gBACvE,qCAAqC;gBACrC,iHAAiH;SACpH,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC"}
@@ -99,7 +99,7 @@ export function readPreservedConfigProperties(configPath) {
99
99
  *
100
100
  * Rules:
101
101
  * - Step 1 is always allowed (starts a new feature).
102
- * - Steps 2–13 require the current state step to be at least (requestedStep - 1),
102
+ * - Steps 2–15 require the current state step to be at least (requestedStep - 1),
103
103
  * i.e. you can advance one step at a time or re-run the current step, but
104
104
  * you cannot skip ahead.
105
105
  *
@@ -90,6 +90,15 @@ export async function loadProjectForMiddleware(argv) {
90
90
  */
91
91
  export async function simulationGateMiddleware(argv) {
92
92
  const command = String(argv._[0] ?? '');
93
+ // In editor mode, only `codeyam editor` subcommands are allowed
94
+ if (process.env.CODEYAM_EDITOR_ACTIVE === '1') {
95
+ if (command !== 'editor') {
96
+ console.error(`\nPlease only use \`codeyam editor\` subcommands when building in the editor.`);
97
+ console.error(`Also please make sure you are following the \`codeyam editor steps\` if you are changing code.\n`);
98
+ process.exit(1);
99
+ }
100
+ return; // Skip simulation gate check entirely in editor mode
101
+ }
93
102
  if (!HIDDEN_COMMAND_NAMES.includes(command)) {
94
103
  return;
95
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"simulationGateMiddleware.js","sourceRoot":"","sources":["../../../../src/utils/simulationGateMiddleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simulationGateMiddleware.js","sourceRoot":"","sources":["../../../../src/utils/simulationGateMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAyC;IACnE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,+CAA+C,EAAE;IAC3E,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,8BAA8B,EAAE;IACnE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,4BAA4B,EAAE;IACrE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,8CAA8C,EAAE;IAC7E;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,mDAAmD;KAC9D;IACD;QACE,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,8CAA8C;KACzD;IACD,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,4CAA4C,EAAE;IAC7E,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,uCAAuC,EAAE;IACvE;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,qDAAqD;KAChE;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,kDAAkD;KAC7D;IACD,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iCAAiC,EAAE;IAChE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,+CAA+C,EAAE;IAC7E,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,4CAA4C,EAAE;IAC5E,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,mCAAmC,EAAE;IAChE;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,gDAAgD;KAC3D;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,yDAAyD;KACpE;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,0DAA0D;KACrE;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAA6B;IAM7B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,gBAIX,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC7B,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,0EAA0E;IAC1E,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;QACjC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,qBAAqB,EAAE,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IACtD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAG9C;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAExC,gEAAgE;IAChE,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG,EAAE,CAAC;QAC9C,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CACX,+EAA+E,CAChF,CAAC;YACF,OAAO,CAAC,KAAK,CACX,kGAAkG,CACnG,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,qDAAqD;IAC/D,CAAC;IAED,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,0DAA0D;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YACjD,OAAO,CAAC,KAAK,CACX,cAAc,OAAO,uCAAuC,CAC7D,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;QAC1D,OAAO;IACT,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB;IAC5B,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QAE7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAC/B,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAEzC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE;iBACX,OAAO,CAAC,8CAA8C,CAAC;iBACvD,GAAG,CAAC,WAAW,CAAqC,CAAC;YACxD,IAAI,CAAC,GAAG,EAAE,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC7B,OAAO,wEAAwE,CAAC;IAClF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAC7C,OAAO,aAAa,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,CAAC"}
@@ -145,9 +145,9 @@ describe('IdleDetector', () => {
145
145
  });
146
146
  });
147
147
  describe('IdleDetector activeOutputPattern', () => {
148
- it('suppresses idle when last output matches active pattern', () => {
148
+ it('suppresses idle when last output matches active pattern (thinking ✶)', () => {
149
149
  const { detector, onIdle } = createDetector({
150
- activeOutputPattern: /✶/,
150
+ activeOutputPattern: /[✶✢]/,
151
151
  });
152
152
  // Status line with ✶ is the last output
153
153
  detector.onPtyOutput('\r\x1b[K✶ Cascading… (16m 56s · ↓ 15.6k tokens)');
@@ -156,9 +156,20 @@ describe('IdleDetector activeOutputPattern', () => {
156
156
  expect(onIdle).not.toHaveBeenCalled();
157
157
  detector.dispose();
158
158
  });
159
+ it('suppresses idle when last output matches active pattern (task ✢)', () => {
160
+ const { detector, onIdle } = createDetector({
161
+ activeOutputPattern: /[✶✢]/,
162
+ });
163
+ // Task status line with ✢
164
+ detector.onPtyOutput('\r\x1b[K✢ Accomplishing… (8m 50s · ↓ 15.8k tokens)');
165
+ jest.advanceTimersByTime(3000);
166
+ // Should NOT signal idle — pattern matched, timer restarted
167
+ expect(onIdle).not.toHaveBeenCalled();
168
+ detector.dispose();
169
+ });
159
170
  it('signals idle normally when last output does not match pattern', () => {
160
171
  const { detector, onIdle } = createDetector({
161
- activeOutputPattern: /✶/,
172
+ activeOutputPattern: /[✶✢]/,
162
173
  });
163
174
  // Normal prompt output (no ✶)
164
175
  detector.onPtyOutput('$ ');
@@ -168,7 +179,7 @@ describe('IdleDetector activeOutputPattern', () => {
168
179
  });
169
180
  it('after suppression, eventually signals idle when pattern disappears', () => {
170
181
  const { detector, onIdle } = createDetector({
171
- activeOutputPattern: /✶/,
182
+ activeOutputPattern: /[✶✢]/,
172
183
  });
173
184
  // Status line with ✶
174
185
  detector.onPtyOutput('✶ Working…');
@@ -182,7 +193,7 @@ describe('IdleDetector activeOutputPattern', () => {
182
193
  });
183
194
  it('updates lastLine correctly across multiple chunks with \\r rewrites', () => {
184
195
  const { detector, onIdle } = createDetector({
185
- activeOutputPattern: /✶/,
196
+ activeOutputPattern: /[✶✢]/,
186
197
  });
187
198
  // Ink-style rewrite: partial content, then \r + full line
188
199
  detector.onPtyOutput('✶ Step 1');
@@ -196,7 +207,7 @@ describe('IdleDetector activeOutputPattern', () => {
196
207
  });
197
208
  it('caps lastLine buffer to prevent unbounded growth', () => {
198
209
  const { detector, onIdle } = createDetector({
199
- activeOutputPattern: /✶/,
210
+ activeOutputPattern: /[✶✢]/,
200
211
  });
201
212
  // Send a very long line
202
213
  detector.onPtyOutput('x'.repeat(1000));
@@ -1 +1 @@
1
- {"version":3,"file":"idleDetector.test.js","sourceRoot":"","sources":["../../../../../src/webserver/__tests__/idleDetector.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idleDetector.test.js","sourceRoot":"","sources":["../../../../../src/webserver/__tests__/idleDetector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { stripClaudeCommand, StartupOutputFilter } from "../terminalServer.js";
2
+ describe('stripClaudeCommand', () => {
3
+ test('strips claude --session-id command with prompt prefix', () => {
4
+ const input = "$ claude --session-id 'abc-123' '/codeyam-editor'\r\nsome output\r\n";
5
+ expect(stripClaudeCommand(input)).toBe('some output\r\n');
6
+ });
7
+ test('strips claude --resume command', () => {
8
+ const input = "claude --resume 'abc-123' 'The session was interrupted.'\r\noutput\r\n";
9
+ expect(stripClaudeCommand(input)).toBe('output\r\n');
10
+ });
11
+ test('strips claude --continue command', () => {
12
+ const input = "claude --continue 'The session was interrupted.'\r\noutput\r\n";
13
+ expect(stripClaudeCommand(input)).toBe('output\r\n');
14
+ });
15
+ test('strips claude with skill argument (no flags)', () => {
16
+ const input = "claude '/codeyam-dev-mode'\r\noutput\r\n";
17
+ expect(stripClaudeCommand(input)).toBe('output\r\n');
18
+ });
19
+ test('strips command with shell prompt prefix', () => {
20
+ const input = "user@host % claude --session-id 'x' '/codeyam-editor'\r\noutput\r\n";
21
+ expect(stripClaudeCommand(input)).toBe('output\r\n');
22
+ });
23
+ test('preserves output when no claude command present', () => {
24
+ const input = 'some other output\r\n';
25
+ expect(stripClaudeCommand(input)).toBe('some other output\r\n');
26
+ });
27
+ test('returns empty string when only the command is present', () => {
28
+ const input = "claude --session-id 'abc' '/codeyam-editor'\r\n";
29
+ expect(stripClaudeCommand(input)).toBe('');
30
+ });
31
+ });
32
+ describe('StartupOutputFilter', () => {
33
+ test('suppresses output before ╭ banner arrives', () => {
34
+ const filter = new StartupOutputFilter();
35
+ const result = filter.processChunk('$ claude --session-id ...\r\n');
36
+ expect(result.type).toBe('suppress');
37
+ });
38
+ test('clears and sends when ╭ banner arrives in its own chunk', () => {
39
+ const filter = new StartupOutputFilter();
40
+ filter.processChunk('$ claude --session-id ...\r\n');
41
+ const result = filter.processChunk('╭─── Claude Code ───╮\r\n');
42
+ expect(result.type).toBe('clear-and-send');
43
+ expect(result.data).toBe('╭─── Claude Code ───╮\r\n');
44
+ });
45
+ test('strips command when command and ╭ banner arrive in the same chunk', () => {
46
+ const filter = new StartupOutputFilter();
47
+ // This is the bug: PTY batches command echo + banner into one chunk
48
+ const combined = "$ claude --session-id 'abc-123' '/codeyam-editor'\r\n╭─── Claude Code ───╮\r\n";
49
+ const result = filter.processChunk(combined);
50
+ expect(result.type).toBe('clear-and-send');
51
+ // The command line must be stripped — only the banner should remain
52
+ expect(result.data).toBe('╭─── Claude Code ───╮\r\n');
53
+ });
54
+ test('passes through output after screen has been cleared', () => {
55
+ const filter = new StartupOutputFilter();
56
+ filter.processChunk('╭─── Claude Code ───╮\r\n');
57
+ const result = filter.processChunk('normal output');
58
+ expect(result.type).toBe('send');
59
+ expect(result.data).toBe('normal output');
60
+ });
61
+ describe('getTimeoutOutput', () => {
62
+ test('returns stripped buffered output when ╭ never arrives', () => {
63
+ const filter = new StartupOutputFilter();
64
+ filter.processChunk("$ claude --session-id 'abc' '/codeyam-editor'\r\nsome early output\r\n");
65
+ const output = filter.getTimeoutOutput();
66
+ expect(output).toBe('some early output\r\n');
67
+ });
68
+ test('returns null if screen was already cleared', () => {
69
+ const filter = new StartupOutputFilter();
70
+ filter.processChunk('╭─── Claude Code ───╮\r\n');
71
+ expect(filter.getTimeoutOutput()).toBeNull();
72
+ });
73
+ test('returns null if no output was buffered', () => {
74
+ const filter = new StartupOutputFilter();
75
+ expect(filter.getTimeoutOutput()).toBeNull();
76
+ });
77
+ });
78
+ });
79
+ //# sourceMappingURL=stripClaudeCommand.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripClaudeCommand.test.js","sourceRoot":"","sources":["../../../../../src/webserver/__tests__/stripClaudeCommand.test.ts"],"names":[],"mappings":"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"}