{"version":3,"file":"protocol-status.test.d.ts","sourceRoot":"","sources":["../../src/core/protocol-status.test.ts"],"names":[],"mappings":"","sourcesContent":["import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { afterEach, describe, expect, it } from \"vitest\";\nimport { formatProtocolStatusOutput, getProtocolWorkspaceStatus } from \"./protocol-status.js\";\n\nfunction createTempDir(): string {\n\treturn mkdtempSync(join(tmpdir(), \"jensen-protocol-status-\"));\n}\n\nfunction writeFile(path: string, content: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, content, \"utf8\");\n}\n\nconst tempDirs: string[] = [];\n\ndescribe(\"protocol status\", () => {\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(\"reports the nearest Protocol marker and loaded context path\", () => {\n\t\tconst rootDir = createTempDir();\n\t\ttempDirs.push(rootDir);\n\n\t\tconst repoDir = join(rootDir, \"repo\");\n\t\tconst nestedWorkspaceDir = join(repoDir, \"apps\", \"nested\");\n\t\tconst appDir = join(nestedWorkspaceDir, \"service\");\n\t\tconst repoMarkerPath = join(repoDir, \".jensen\", \"JENSEN_PROTOCOL.md\");\n\t\tconst nestedMarkerPath = join(nestedWorkspaceDir, \".jensen\", \"JENSEN_PROTOCOL.md\");\n\n\t\twriteFile(repoMarkerPath, \"repo protocol\\n\");\n\t\twriteFile(nestedMarkerPath, \"nested protocol\\n\");\n\t\tmkdirSync(appDir, { recursive: true });\n\n\t\tconst status = getProtocolWorkspaceStatus({\n\t\t\tcwd: appDir,\n\t\t\tresourceLoader: {\n\t\t\t\tgetAgentsFiles: () => ({\n\t\t\t\t\tagentsFiles: [{ path: nestedMarkerPath, content: \"nested protocol\\n\" }],\n\t\t\t\t}),\n\t\t\t},\n\t\t});\n\n\t\texpect(status).toEqual({\n\t\t\tmarkerDetected: true,\n\t\t\tmarkerPath: nestedMarkerPath,\n\t\t\tworkspaceRoot: nestedWorkspaceDir,\n\t\t\tcontextAvailable: true,\n\t\t\tcontextPath: nestedMarkerPath,\n\t\t});\n\n\t\tconst output = formatProtocolStatusOutput(status);\n\t\texpect(output).toContain(\"Protocol workspace marker: detected\");\n\t\texpect(output).toContain(`Effective marker file: ${nestedMarkerPath}`);\n\t\texpect(output).toContain(`Workspace root: ${nestedWorkspaceDir}`);\n\t\texpect(output).toContain(\"Protocol context in harness: available\");\n\t});\n\n\tit(\"reports when a Protocol marker exists on disk but is not loaded in harness context\", () => {\n\t\tconst rootDir = createTempDir();\n\t\ttempDirs.push(rootDir);\n\n\t\tconst workspaceDir = join(rootDir, \"workspace\");\n\t\tconst appDir = join(workspaceDir, \"app\");\n\t\tconst markerPath = join(workspaceDir, \".jensen\", \"JENSEN_PROTOCOL.md\");\n\n\t\twriteFile(markerPath, \"protocol\\n\");\n\t\tmkdirSync(appDir, { recursive: true });\n\n\t\tconst status = getProtocolWorkspaceStatus({\n\t\t\tcwd: appDir,\n\t\t\tresourceLoader: {\n\t\t\t\tgetAgentsFiles: () => ({\n\t\t\t\t\tagentsFiles: [],\n\t\t\t\t}),\n\t\t\t},\n\t\t});\n\n\t\texpect(status.contextAvailable).toBe(false);\n\t\texpect(status.contextPath).toBeUndefined();\n\t\texpect(formatProtocolStatusOutput(status)).toContain(\n\t\t\t\"Note: a Protocol marker exists on disk, but it is not currently loaded through the resource-loader context seam.\",\n\t\t);\n\t});\n\n\tit(\"reports non-Protocol workspaces honestly\", () => {\n\t\tconst rootDir = createTempDir();\n\t\ttempDirs.push(rootDir);\n\n\t\tconst appDir = join(rootDir, \"repo\", \"app\");\n\t\tmkdirSync(appDir, { recursive: true });\n\n\t\tconst status = getProtocolWorkspaceStatus({\n\t\t\tcwd: appDir,\n\t\t\tresourceLoader: {\n\t\t\t\tgetAgentsFiles: () => ({\n\t\t\t\t\tagentsFiles: [],\n\t\t\t\t}),\n\t\t\t},\n\t\t});\n\n\t\texpect(status).toEqual({\n\t\t\tmarkerDetected: false,\n\t\t\tmarkerPath: undefined,\n\t\t\tworkspaceRoot: undefined,\n\t\t\tcontextAvailable: false,\n\t\t\tcontextPath: undefined,\n\t\t});\n\n\t\tconst output = formatProtocolStatusOutput(status);\n\t\texpect(output).toContain(\"Protocol workspace marker: not detected\");\n\t\texpect(output).toContain(\"Effective marker file: none\");\n\t\texpect(output).toContain(\"Workspace root: none\");\n\t\texpect(output).toContain(\"Protocol context in harness: unavailable\");\n\t});\n});\n"]}