feat: persistent conversation + save_memory tool
- ToolContext gets memoryUpdates[] — accumulated by save_memory calls - orchestratorChat accepts preloadedHistory and knowledgeContext opts - History trimmed to last 40 messages per turn (cost control) - Knowledge items injected into system prompt as ## Project Memory - ChatResult returns history[] and memoryUpdates[] for frontend persistence - server.ts accepts history/knowledge_context from POST body - save_memory tool: lets AI persist facts (key, type, value) to long-term memory Made-with: Cursor
This commit is contained in:
@@ -10,6 +10,15 @@ import { AGENTS } from './agents';
|
||||
import { ToolContext } from './tools';
|
||||
import { orchestratorChat, listSessions, clearSession } from './orchestrator';
|
||||
|
||||
// Protected Vibn platform repos — agents cannot clone or work in these workspaces
|
||||
const PROTECTED_GITEA_REPOS = new Set([
|
||||
'mark/vibn-frontend',
|
||||
'mark/theia-code-os',
|
||||
'mark/vibn-agent-runner',
|
||||
'mark/vibn-api',
|
||||
'mark/master-ai',
|
||||
]);
|
||||
|
||||
const app = express();
|
||||
app.use(cors());
|
||||
|
||||
@@ -33,6 +42,12 @@ function ensureWorkspace(repo?: string): string {
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
return dir;
|
||||
}
|
||||
if (PROTECTED_GITEA_REPOS.has(repo)) {
|
||||
throw new Error(
|
||||
`SECURITY: Repo "${repo}" is a protected Vibn platform repo. ` +
|
||||
`Agents cannot clone or work in this workspace.`
|
||||
);
|
||||
}
|
||||
const dir = path.join(base, repo.replace('/', '_'));
|
||||
const gitea = {
|
||||
apiUrl: process.env.GITEA_API_URL || '',
|
||||
@@ -67,7 +82,8 @@ function buildContext(repo?: string): ToolContext {
|
||||
coolify: {
|
||||
apiUrl: process.env.COOLIFY_API_URL || '',
|
||||
apiToken: process.env.COOLIFY_API_TOKEN || ''
|
||||
}
|
||||
},
|
||||
memoryUpdates: []
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user