{"version":3,"file":"init-project-entrypoint.test.d.ts","sourceRoot":"","sources":["../../src/modes/init-project-entrypoint.test.ts"],"names":[],"mappings":"","sourcesContent":["import { mkdtempSync, readFileSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { afterEach, describe, expect, it } from \"vitest\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../core/slash-commands.js\";\nimport type { UltraplanArtifact, UltraplanRunResult } from \"../core/ultraplan.js\";\nimport { getPrintModeLocalCommandOutput } from \"./print-mode.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst tempDirs: string[] = [];\n\nfunction createTempDir(): string {\n\tconst dir = mkdtempSync(join(tmpdir(), \"jensen-init-project-entrypoint-\"));\n\ttempDirs.push(dir);\n\treturn dir;\n}\n\nfunction readSource(relativePath: string): string {\n\treturn readFileSync(join(__dirname, relativePath), \"utf8\");\n}\n\nfunction makeUltraplanArtifact(): UltraplanArtifact {\n\treturn {\n\t\tversion: 1,\n\t\tplannerMode: \"local_subagent\",\n\t\tplannerAgent: \"planner\",\n\t\texecutionState: \"plan_only\",\n\t\tobjective: \"unused\",\n\t\tassumptions: [],\n\t\tconstraints: [],\n\t\tphases: [],\n\t\trisks: [],\n\t\trecommendedExecutionOrder: [],\n\t\tactionableNextSteps: [],\n\t\tcreatedAt: \"2026-04-03T00:00:00.000Z\",\n\t};\n}\n\nfunction makeUltraplanRunResult(): UltraplanRunResult {\n\treturn {\n\t\tartifact: makeUltraplanArtifact(),\n\t\tdisplayText: \"unused\",\n\t\trawPlannerOutput: \"\",\n\t};\n}\n\nfunction createPrintModeSessionStub() {\n\tconst btwNotes: string[] = [];\n\n\treturn {\n\t\tbriefOnly: false,\n\t\tsetBriefOnly: () => {},\n\t\tqueueByTheWay: (note: string) => {\n\t\t\tbtwNotes.push(note);\n\t\t},\n\t\tgetPendingByTheWayNotes: () => btwNotes,\n\t\tgetMemoryHistory: () => [],\n\t\tresolveMemorySnapshotSelector: () => ({\n\t\t\tsnapshot: undefined,\n\t\t\tmatchedInput: \"\",\n\t\t\tresolvedId: undefined,\n\t\t\terror: \"empty\" as const,\n\t\t\tcandidates: [],\n\t\t}),\n\t\tgetLatestUltraplanPlan: () => undefined,\n\t\trunUltraplan: async () => makeUltraplanRunResult(),\n\t\trunUltraplanRevise: async () => makeUltraplanRunResult(),\n\t\tapplyUltraplan: () => ({ applied: [], displayText: \"unused\" }),\n\t};\n}\n\ndescribe(\"/init-project command entrypoint\", () => {\n\tafterEach(() => {\n\t\tfor (const dir of tempDirs.splice(0)) {\n\t\t\trmSync(dir, { recursive: true, force: true });\n\t\t}\n\t});\n\n\tit(\"registers a built-in /init-project slash command\", () => {\n\t\tconst command = BUILTIN_SLASH_COMMANDS.find((entry) => entry.name === \"init-project\");\n\t\texpect(command).toBeDefined();\n\t\texpect(command?.description).toContain(\"project-local Jensen harness\");\n\t});\n\n\tit(\"routes interactive mode submissions through the explicit init-project handler\", () => {\n\t\tconst source = readSource(\"interactive/interactive-mode.ts\");\n\n\t\texpect(source).toContain('if (text === \"/init-project\" || text.startsWith(\"/init-project \"))');\n\t\texpect(source).toContain('const includeProtocol = parts[1] === \"--protocol\";');\n\t\texpect(source).toContain(\"await this.handleInitProjectCommand(includeProtocol);\");\n\t\texpect(source).toContain('this.showWarning(\"Usage: /init-project [--protocol]\");');\n\t});\n\n\tit(\"invokes /init-project through print mode and creates scaffold files\", async () => {\n\t\tconst cwd = createTempDir();\n\t\tconst previousCwd = process.cwd();\n\t\tprocess.chdir(cwd);\n\n\t\ttry {\n\t\t\tconst output = await getPrintModeLocalCommandOutput(createPrintModeSessionStub(), \"/init-project\");\n\n\t\t\texpect(output).toContain(\"/init-project completed.\");\n\t\t\texpect(output).toContain(\".jensen/settings.json\");\n\t\t\texpect(readFileSync(join(cwd, \".jensen\", \"settings.json\"), \"utf-8\")).toContain('\"./extensions/subagent\"');\n\t\t} finally {\n\t\t\tprocess.chdir(previousCwd);\n\t\t}\n\t});\n\n\tit(\"accepts /init-project --protocol through print mode and creates the Protocol marker\", async () => {\n\t\tconst cwd = createTempDir();\n\t\tconst previousCwd = process.cwd();\n\t\tprocess.chdir(cwd);\n\n\t\ttry {\n\t\t\tconst output = await getPrintModeLocalCommandOutput(createPrintModeSessionStub(), \"/init-project --protocol\");\n\n\t\t\texpect(output).toContain(\".jensen/JENSEN_PROTOCOL.md\");\n\t\t\texpect(readFileSync(join(cwd, \".jensen\", \"JENSEN_PROTOCOL.md\"), \"utf-8\")).toContain(\n\t\t\t\t\"Jensen-Protocol workspace boundary\",\n\t\t\t);\n\t\t} finally {\n\t\t\tprocess.chdir(previousCwd);\n\t\t}\n\t});\n});\n"]}