Knowurknot's picture
Upload folder using huggingface_hub
192cba8 verified
/**
* CAPT Memory Palace - Real API Integration
*
* Connect to a running CAPT symbiote for real-time cognitive data.
* See DEPLOY.md for server setup instructions.
*/
const CAPT_API = {
endpoint: null,
token: null,
isConnected: false,
lastState: null,
pollInterval: null,
/**
* Configure API connection
*/
configure(options = {}) {
this.endpoint = options.endpoint || null;
this.token = options.token || null;
if (this.endpoint) {
console.log('[CAPT API] Configured:', this.endpoint);
}
},
/**
* Test connection to CAPT server
*/
async test() {
if (!this.endpoint) {
console.warn('[CAPT API] No endpoint configured');
return false;
}
try {
const response = await fetch(`${this.endpoint}/health`, {
headers: this.getHeaders()
});
this.isConnected = response.ok;
console.log('[CAPT API] Connection:', this.isConnected ? 'OK' : 'Failed');
return this.isConnected;
} catch (e) {
console.error('[CAPT API] Connection error:', e.message);
this.isConnected = false;
return false;
}
},
/**
* Get current CAPT state
*/
async getState() {
if (!this.endpoint) return null;
try {
const response = await fetch(`${this.endpoint}/api/state`, {
headers: this.getHeaders()
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
this.lastState = data;
return data;
} catch (e) {
console.warn('[CAPT API] Get state failed:', e.message);
return null;
}
},
/**
* Submit a query to CAPT
*/
async query(text) {
if (!this.endpoint) {
console.warn('[CAPT API] No endpoint configured');
return null;
}
try {
const response = await fetch(`${this.endpoint}/api/cogitate`, {
method: 'POST',
headers: this.getHeaders(),
body: JSON.stringify({ query: text })
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return await response.json();
} catch (e) {
console.error('[CAPT API] Query failed:', e.message);
return null;
}
},
/**
* Get CAPT eval reports
*/
async getEvals() {
if (!this.endpoint) return null;
try {
const response = await fetch(`${this.endpoint}/api/evals`, {
headers: this.getHeaders()
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return await response.json();
} catch (e) {
console.warn('[CAPT API] Get evals failed:', e.message);
return null;
}
},
/**
* Get knowledge status
*/
async getKnowledge() {
if (!this.endpoint) return null;
try {
const response = await fetch(`${this.endpoint}/api/knowledge`, {
headers: this.getHeaders()
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return await response.json();
} catch (e) {
console.warn('[CAPT API] Get knowledge failed:', e.message);
return null;
}
},
/**
* Start polling for state updates
*/
startPolling(callback, interval = 2000) {
if (this.pollInterval) {
this.stopPolling();
}
const poll = async () => {
const state = await this.getState();
if (state && callback) {
callback(state);
}
};
poll();
this.pollInterval = setInterval(poll, interval);
},
/**
* Stop polling
*/
stopPolling() {
if (this.pollInterval) {
clearInterval(this.pollInterval);
this.pollInterval = null;
}
},
/**
* Get authorization headers
*/
getHeaders() {
const headers = {
'Content-Type': 'application/json'
};
if (this.token) {
headers['Authorization'] = `Bearer ${this.token}`;
}
return headers;
},
/**
* Parse CAPT state into palace format
*/
parseState(captState) {
if (!captState) return null;
// Extract rooms from modules
const modules = captState.modules || [];
const rooms = modules.map(m => ({
id: m.id || m.name,
label: m.label || m.id || m.name,
type: this.getModuleType(m.id || m.name),
color: this.getModuleColor(m.id || m.name),
capacity: Math.round((m.activation || 0.5) * 100),
position: {
x: m.position?.x || Math.random() * 10 - 5,
y: (m.activation || 0.5) * 3,
z: m.position?.z || Math.random() * 10 - 5
}
}));
return {
sweep: captState.sweep,
modules: rooms,
input: captState.input,
output: captState.output,
timestamp: Date.now()
};
},
/**
* Get module type from ID
*/
getModuleType(id) {
const types = {
PULSE: 'input',
NEDA: 'processing',
HMC: 'memory',
CIG: 'processing',
HDR: 'processing',
QIPC: 'quorum',
ECHO: 'memory',
META: 'processing',
IMMU: 'validation',
NDS: 'output'
};
return types[id] || 'processing';
},
/**
* Get module color from ID
*/
getModuleColor(id) {
const colors = {
PULSE: '#8b5cf6',
NEDA: '#a855f7',
HMC: '#c084fc',
CIG: '#d946ef',
HDR: '#e879f9',
QIPC: '#f472b6',
ECHO: '#fb7185',
META: '#f43f5e',
IMMU: '#10b981',
NDS: '#06b6d4'
};
return colors[id] || '#8b5cf6';
}
};
// Export
window.CAPT_API = CAPT_API;