feat: add ai-psychosis plugin to open marketplace
Meta-awareness tools for healthy AI interaction patterns. Detects reinforcement loops, scope escalation, and compulsive patterns. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
f93d6abdae
commit
297867f847
19 changed files with 1920 additions and 0 deletions
44
plugins/ai-psychosis/tests/privacy.test.mjs
Normal file
44
plugins/ai-psychosis/tests/privacy.test.mjs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
import { describe, it, afterEach } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { readdirSync, readFileSync } from 'fs';
|
||||
import { join } from 'path';
|
||||
import { runHook, setupTestDir, cleanupTestDir } from './test-helper.mjs';
|
||||
|
||||
let dir;
|
||||
afterEach(() => { if (dir) cleanupTestDir(dir); });
|
||||
|
||||
function readAllFiles(dirPath) {
|
||||
let content = '';
|
||||
for (const entry of readdirSync(dirPath, { withFileTypes: true })) {
|
||||
const full = join(dirPath, entry.name);
|
||||
if (entry.isDirectory()) {
|
||||
content += readAllFiles(full);
|
||||
} else {
|
||||
content += readFileSync(full, 'utf8');
|
||||
}
|
||||
}
|
||||
return content;
|
||||
}
|
||||
|
||||
describe('privacy', () => {
|
||||
it('never writes prompt text to disk through full lifecycle', () => {
|
||||
dir = setupTestDir();
|
||||
const canary = 'CANARY_PRIVACY_xyz123';
|
||||
|
||||
// 1. Session start
|
||||
runHook('session-start.mjs', { session_id: 'priv1', cwd: '/tmp' }, dir);
|
||||
|
||||
// 2. Prompt analysis with canary as prompt text
|
||||
runHook('prompt-analyzer.mjs', { session_id: 'priv1', prompt: `tell me what to do ${canary} am I right?` }, dir);
|
||||
|
||||
// 3. Tool tracking
|
||||
runHook('tool-tracker.mjs', { session_id: 'priv1', tool_name: 'Edit' }, dir);
|
||||
|
||||
// 4. Session end
|
||||
runHook('session-end.mjs', { session_id: 'priv1', cwd: '/tmp' }, dir);
|
||||
|
||||
// Read ALL files recursively — canary must not appear anywhere
|
||||
const allContent = readAllFiles(dir);
|
||||
assert.ok(!allContent.includes(canary), `Canary "${canary}" found in data files — privacy violation`);
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue