steps 5-8: deep gut — purge chat/notes/projects/providers from code
main.go: remove ~300 lines of stale routes referencing deleted handlers (channels, messages, folders, personas, notes, projects, memories, models, providers, tasks, roles, usage, routing, capabilities, etc.) Fix branding: "Chat Switchboard" → "Switchboard Core" pages: remove chat/notes/projects surface manifests and templates Keep: admin, settings, team-admin, workflow, workflow-landing frontend: delete chat/, notes/, projects/ surface directories (19 files) Delete 5 CSS files (4,144 lines): sw-chat-*, sw-notes-*, sw-projects-* SDK: strip gutted API domains (594→287 lines), remove chatPane/notesPane tests: remove integration_test.go (5,194 lines, broken imports to deleted packages) and perm_enforcement_test.go (551 lines, depended on deleted test helpers). Fix testmain_test.go (remove providers import). openapi.yaml: replace 12,491-line stale spec with kernel auth stub. Full ICD rebuild is Step 8 proper. Auth (builtin, mTLS, OIDC) untouched throughout. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// ==========================================
|
||||
// Chat Switchboard — SDK: API Domain Namespaces
|
||||
// Switchboard Core — SDK: API Domain Namespaces
|
||||
// ==========================================
|
||||
// 18 namespaced domain clients wrapping restClient.
|
||||
// Namespaced domain clients wrapping restClient.
|
||||
// Each domain is a plain object with typed methods.
|
||||
//
|
||||
// Factory: createDomains(restClient)
|
||||
@@ -65,136 +65,13 @@ export function createDomains(restClient) {
|
||||
logout: (refreshToken) => rc.post('/api/v1/auth/logout', { refresh_token: refreshToken }),
|
||||
},
|
||||
|
||||
// ── 2. Channels ────────────────────────
|
||||
channels: {
|
||||
...crud(rc, '/api/v1/channels'),
|
||||
messages: (id, opts) => rc.get(`/api/v1/channels/${id}/messages` + _qs(opts)),
|
||||
send: (id, data) => rc.post(`/api/v1/channels/${id}/messages`, data),
|
||||
complete: (data, signal) => rc.stream('/api/v1/chat/completions', data, signal),
|
||||
regenerate: (id, msgId, data, signal) => rc.stream(`/api/v1/channels/${id}/messages/${msgId}/regenerate`, data, signal),
|
||||
editMessage: (id, msgId, content) => rc.post(`/api/v1/channels/${id}/messages/${msgId}/edit`, { content }),
|
||||
deleteMessage: (id, msgId) => rc.del(`/api/v1/channels/${id}/messages/${msgId}`),
|
||||
siblings: (id, msgId) => rc.get(`/api/v1/channels/${id}/messages/${msgId}/siblings`),
|
||||
path: (id) => rc.get(`/api/v1/channels/${id}/path`),
|
||||
cursor: (id, leafId) => rc.put(`/api/v1/channels/${id}/cursor`, { active_leaf_id: leafId }),
|
||||
markRead: (id) => rc.post(`/api/v1/channels/${id}/mark-read`, {}),
|
||||
generateTitle: (id) => rc.post(`/api/v1/channels/${id}/generate-title`, {}),
|
||||
summarize: (id) => rc.post(`/api/v1/channels/${id}/summarize`, {}),
|
||||
// Participants
|
||||
participants: (id) => rc.get(`/api/v1/channels/${id}/participants`),
|
||||
addParticipant: (id, data) => rc.post(`/api/v1/channels/${id}/participants`, data),
|
||||
updateParticipant: (id, pid, data) => rc.patch(`/api/v1/channels/${id}/participants/${pid}`, data),
|
||||
removeParticipant: (id, pid) => rc.del(`/api/v1/channels/${id}/participants/${pid}`),
|
||||
// Channel models
|
||||
models: (id) => rc.get(`/api/v1/channels/${id}/models`),
|
||||
addModel: (id, data) => rc.post(`/api/v1/channels/${id}/models`, data),
|
||||
updateModel: (id, modelId, data) => rc.patch(`/api/v1/channels/${id}/models/${modelId}`, data),
|
||||
removeModel: (id, modelId) => rc.del(`/api/v1/channels/${id}/models/${modelId}`),
|
||||
// Knowledge bases
|
||||
kbs: (id) => rc.get(`/api/v1/channels/${id}/knowledge-bases`),
|
||||
setKbs: (id, kbIds) => rc.put(`/api/v1/channels/${id}/knowledge-bases`, { kb_ids: kbIds }),
|
||||
// Files
|
||||
files: (id, opts) => rc.get(`/api/v1/channels/${id}/files` + _qs(opts)),
|
||||
uploadFile: (id, file) => rc.upload(`/api/v1/channels/${id}/files`, file),
|
||||
},
|
||||
|
||||
// ── 3. Personas ────────────────────────
|
||||
personas: {
|
||||
...crud(rc, '/api/v1/personas'),
|
||||
kbs: (id) => rc.get(`/api/v1/personas/${id}/knowledge-bases`),
|
||||
setKbs: (id, data) => rc.put(`/api/v1/personas/${id}/knowledge-bases`, data),
|
||||
},
|
||||
|
||||
// ── 4. Knowledge Bases ─────────────────
|
||||
knowledge: {
|
||||
...crud(rc, '/api/v1/knowledge-bases'),
|
||||
discoverable: () => rc.get('/api/v1/knowledge-bases-discoverable'),
|
||||
search: (id, query, limit) => rc.post(`/api/v1/knowledge-bases/${id}/search`, { query, limit }),
|
||||
documents: (id) => rc.get(`/api/v1/knowledge-bases/${id}/documents`),
|
||||
upload: (id, file) => rc.upload(`/api/v1/knowledge-bases/${id}/documents`, file),
|
||||
docStatus: (id, docId) => rc.get(`/api/v1/knowledge-bases/${id}/documents/${docId}/status`),
|
||||
delDoc: (id, docId) => rc.del(`/api/v1/knowledge-bases/${id}/documents/${docId}`),
|
||||
},
|
||||
|
||||
// ── 5. Notes ───────────────────────────
|
||||
notes: {
|
||||
...crud(rc, '/api/v1/notes'),
|
||||
search: (query, limit) => rc.get(`/api/v1/notes/search` + _qs({ q: query, limit })),
|
||||
searchTitles: (query, limit) => rc.get(`/api/v1/notes/search-titles` + _qs({ q: query, limit })),
|
||||
folders: () => rc.get('/api/v1/notes/folders'),
|
||||
backlinks: (id) => rc.get(`/api/v1/notes/${id}/backlinks`),
|
||||
graph: () => rc.get('/api/v1/notes/graph'),
|
||||
bulkDelete: (ids) => rc.post('/api/v1/notes/bulk-delete', { ids }),
|
||||
},
|
||||
|
||||
// ── 6. Projects ────────────────────────
|
||||
projects: {
|
||||
...crud(rc, '/api/v1/projects'),
|
||||
channels: (id) => rc.get(`/api/v1/projects/${id}/channels`),
|
||||
addChannel: (id, channelId, pos) => rc.post(`/api/v1/projects/${id}/channels`, { channel_id: channelId, position: pos || 0 }),
|
||||
removeChannel: (id, channelId) => rc.del(`/api/v1/projects/${id}/channels/${channelId}`),
|
||||
reorderChannels:(id, channelIds) => rc.put(`/api/v1/projects/${id}/channels/reorder`, { channel_ids: channelIds }),
|
||||
kbs: (id) => rc.get(`/api/v1/projects/${id}/knowledge-bases`),
|
||||
addKb: (id, kbId, autoSearch) => rc.post(`/api/v1/projects/${id}/knowledge-bases`, { kb_id: kbId, auto_search: autoSearch || false }),
|
||||
removeKb: (id, kbId) => rc.del(`/api/v1/projects/${id}/knowledge-bases/${kbId}`),
|
||||
notes: (id) => rc.get(`/api/v1/projects/${id}/notes`),
|
||||
addNote: (id, noteId) => rc.post(`/api/v1/projects/${id}/notes`, { note_id: noteId }),
|
||||
removeNote: (id, noteId) => rc.del(`/api/v1/projects/${id}/notes/${noteId}`),
|
||||
files: (id, opts) => rc.get(`/api/v1/projects/${id}/files` + _qs(opts)),
|
||||
uploadFile: (id, file, path) => rc.upload(`/api/v1/projects/${id}/files` + (path ? _qs({ path }) : ''), file),
|
||||
deleteFile: (id, path) => rc.del(`/api/v1/projects/${id}/files` + _qs({ path })),
|
||||
mkdir: (id, path) => rc.post(`/api/v1/projects/${id}/files/mkdir`, { path }),
|
||||
uploadArchive: (id, file) => rc.upload(`/api/v1/projects/${id}/archive/upload`, file),
|
||||
},
|
||||
|
||||
// ── 7. Workspaces ──────────────────────
|
||||
workspaces: {
|
||||
...crud(rc, '/api/v1/workspaces'),
|
||||
update: (id, data) => rc.patch(`/api/v1/workspaces/${id}`, data),
|
||||
getDefault: () => rc.get('/api/v1/workspaces/default'),
|
||||
files: (id, opts) => rc.get(`/api/v1/workspaces/${id}/files` + _qs(opts)),
|
||||
readFile: (id, path) => rc.get(`/api/v1/workspaces/${id}/files/read` + _qs({ path })),
|
||||
writeFile: (id, path, content) => rc.put(`/api/v1/workspaces/${id}/files/write` + _qs({ path }), content),
|
||||
deleteFile: (id, path) => rc.del(`/api/v1/workspaces/${id}/files/delete` + _qs({ path })),
|
||||
mkdir: (id, path) => rc.post(`/api/v1/workspaces/${id}/files/mkdir`, { path }),
|
||||
gitStatus: (id) => rc.get(`/api/v1/workspaces/${id}/git/status`),
|
||||
gitBranches: (id) => rc.get(`/api/v1/workspaces/${id}/git/branches`),
|
||||
credentials: () => rc.get('/api/v1/git-credentials'),
|
||||
},
|
||||
|
||||
// ── 8. Memory ──────────────────────────
|
||||
memory: {
|
||||
list: (opts) => rc.get('/api/v1/memories' + _qs(opts)),
|
||||
get: (id) => rc.get(`/api/v1/memories/${id}`),
|
||||
update: (id, data) => rc.put(`/api/v1/memories/${id}`, data),
|
||||
del: (id) => rc.del(`/api/v1/memories/${id}`),
|
||||
count: () => rc.get('/api/v1/memories/count'),
|
||||
approve: (id) => rc.post(`/api/v1/memories/${id}/approve`, {}),
|
||||
reject: (id) => rc.post(`/api/v1/memories/${id}/reject`, {}),
|
||||
},
|
||||
|
||||
// ── 9. Models ──────────────────────────
|
||||
models: {
|
||||
enabled: () => rc.get('/api/v1/models/enabled'),
|
||||
preferences: () => rc.get('/api/v1/models/preferences'),
|
||||
setPref: (modelId, provId, hidden) => rc.put('/api/v1/models/preferences', { model_id: modelId, provider_config_id: provId, hidden }),
|
||||
bulkSetPref: (entries, hidden) => rc.post('/api/v1/models/preferences/bulk', { entries, hidden }),
|
||||
},
|
||||
|
||||
// ── 10. Providers (user BYOK) ──────────
|
||||
providers: {
|
||||
...crud(rc, '/api/v1/api-configs'),
|
||||
models: (id) => rc.get(`/api/v1/api-configs/${id}/models`),
|
||||
fetchModels: (id) => rc.post(`/api/v1/api-configs/${id}/models/fetch`),
|
||||
},
|
||||
|
||||
// ── 10b. Connections (v0.38.1) ────────
|
||||
// ── 2. Connections ────────────────────
|
||||
connections: {
|
||||
...crud(rc, '/api/v1/connections'),
|
||||
resolve: (type, name) => rc.get('/api/v1/connections/resolve' + _qs({ type, name })),
|
||||
},
|
||||
|
||||
// ── 10c. Connection Types (v0.38.4) ──
|
||||
// ── 3. Connection Types ────────────────
|
||||
connectionTypes: {
|
||||
list: () => rc.get('/api/v1/connection-types'),
|
||||
},
|
||||
@@ -239,30 +116,14 @@ export function createDomains(restClient) {
|
||||
addMember: (id, userId, role) => rc.post(`/api/v1/teams/${id}/members`, { user_id: userId, role }),
|
||||
updateMember:(id, memberId, role) => rc.put(`/api/v1/teams/${id}/members/${memberId}`, { role }),
|
||||
removeMember:(id, memberId) => rc.del(`/api/v1/teams/${id}/members/${memberId}`),
|
||||
personas: (id) => rc.get(`/api/v1/teams/${id}/personas`),
|
||||
createPersona:(id, data) => rc.post(`/api/v1/teams/${id}/personas`, data),
|
||||
updatePersona:(id, pid, data) => rc.put(`/api/v1/teams/${id}/personas/${pid}`, data),
|
||||
deletePersona:(id, pid) => rc.del(`/api/v1/teams/${id}/personas/${pid}`),
|
||||
personaKbs: (id, pid) => rc.get(`/api/v1/teams/${id}/personas/${pid}/knowledge-bases`),
|
||||
setPersonaKbs:(id, pid, data) => rc.put(`/api/v1/teams/${id}/personas/${pid}/knowledge-bases`, data),
|
||||
models: (id) => rc.get(`/api/v1/teams/${id}/models`),
|
||||
groups: (id) => rc.get(`/api/v1/teams/${id}/groups`),
|
||||
providers: (id) => rc.get(`/api/v1/teams/${id}/providers`),
|
||||
createProvider:(id, data) => rc.post(`/api/v1/teams/${id}/providers`, data),
|
||||
updateProvider:(id, pid, data) => rc.put(`/api/v1/teams/${id}/providers/${pid}`, data),
|
||||
deleteProvider:(id, pid) => rc.del(`/api/v1/teams/${id}/providers/${pid}`),
|
||||
providerModels:(id, pid) => rc.get(`/api/v1/teams/${id}/providers/${pid}/models`),
|
||||
// Team connections (v0.38.1)
|
||||
// Team connections
|
||||
connections: (id) => rc.get(`/api/v1/teams/${id}/connections`),
|
||||
createConnection: (id, data) => rc.post(`/api/v1/teams/${id}/connections`, data),
|
||||
updateConnection: (id, cid, data) => rc.put(`/api/v1/teams/${id}/connections/${cid}`, data),
|
||||
deleteConnection: (id, cid) => rc.del(`/api/v1/teams/${id}/connections/${cid}`),
|
||||
roles: (id) => rc.get(`/api/v1/teams/${id}/roles`),
|
||||
updateRole: (id, role, config) => rc.put(`/api/v1/teams/${id}/roles/${role}`, config),
|
||||
deleteRole: (id, role) => rc.del(`/api/v1/teams/${id}/roles/${role}`),
|
||||
audit: (id, opts) => rc.get(`/api/v1/teams/${id}/audit` + _qs(opts)),
|
||||
auditActions:(id) => rc.get(`/api/v1/teams/${id}/audit/actions`),
|
||||
usage: (id, opts) => rc.get(`/api/v1/teams/${id}/usage` + _qs(opts)),
|
||||
// Team workflows
|
||||
workflows: (id, opts) => rc.get(`/api/v1/teams/${id}/workflows` + _qs(opts)),
|
||||
createWorkflow: (id, data) => rc.post(`/api/v1/teams/${id}/workflows`, data),
|
||||
@@ -276,22 +137,9 @@ export function createDomains(restClient) {
|
||||
updateWorkflowStage: (id, wfId, sid, data) => rc.put(`/api/v1/teams/${id}/workflows/${wfId}/stages/${sid}`, data),
|
||||
deleteWorkflowStage: (id, wfId, sid) => rc.del(`/api/v1/teams/${id}/workflows/${wfId}/stages/${sid}`),
|
||||
reorderWorkflowStages: (id, wfId, ids) => rc.patch(`/api/v1/teams/${id}/workflows/${wfId}/stages/reorder`, { ordered_ids: ids }),
|
||||
// Team assignments + monitor (v0.37.15)
|
||||
assignments: (id, opts) => rc.get(`/api/v1/teams/${id}/assignments` + _qs(opts)),
|
||||
workflowInstances: (id) => rc.get(`/api/v1/teams/${id}/workflows/monitor/instances`),
|
||||
cancelWorkflowInstance: (id, chId) => rc.post(`/api/v1/teams/${id}/workflows/monitor/instances/${chId}/cancel`, {}),
|
||||
// Team tasks
|
||||
tasks: (id, opts) => rc.get(`/api/v1/teams/${id}/tasks` + _qs(opts)),
|
||||
createTask: (id, data) => rc.post(`/api/v1/teams/${id}/tasks`, data),
|
||||
updateTask: (id, taskId, data) => rc.put(`/api/v1/teams/${id}/tasks/${taskId}`, data),
|
||||
deleteTask: (id, taskId) => rc.del(`/api/v1/teams/${id}/tasks/${taskId}`),
|
||||
runTask: (id, taskId) => rc.post(`/api/v1/teams/${id}/tasks/${taskId}/run`, {}),
|
||||
killTask: (id, taskId) => rc.post(`/api/v1/teams/${id}/tasks/${taskId}/kill`, {}),
|
||||
// Team knowledge bases
|
||||
knowledgeBases:(id) => rc.get(`/api/v1/teams/${id}/knowledge-bases`),
|
||||
},
|
||||
|
||||
// ── 15. Workflows ──────────────────────
|
||||
// ── 9. Workflows ───────────────────────
|
||||
workflows: {
|
||||
...crud(rc, '/api/v1/workflows'),
|
||||
update: (id, data) => rc.patch(`/api/v1/workflows/${id}`, data),
|
||||
@@ -302,27 +150,7 @@ export function createDomains(restClient) {
|
||||
cancel: (channelId) => rc.post(`/api/v1/channels/${channelId}/workflow/cancel`, {}),
|
||||
},
|
||||
|
||||
// ── 15b. Workflow Assignments (v0.37.15) ─
|
||||
workflowAssignments: {
|
||||
mine: () => rc.get('/api/v1/workflow-assignments/mine'),
|
||||
get: (id) => rc.get(`/api/v1/workflow-assignments/${id}`),
|
||||
claim: (id) => rc.post(`/api/v1/workflow-assignments/${id}/claim`, {}),
|
||||
unclaim: (id) => rc.post(`/api/v1/workflow-assignments/${id}/unclaim`, {}),
|
||||
complete: (id) => rc.post(`/api/v1/workflow-assignments/${id}/complete`, {}),
|
||||
reassign: (id, userId) => rc.post(`/api/v1/workflow-assignments/${id}/reassign`, { user_id: userId }),
|
||||
cancel: (id) => rc.post(`/api/v1/workflow-assignments/${id}/cancel`, {}),
|
||||
comment: (id, text) => rc.post(`/api/v1/workflow-assignments/${id}/comment`, { text }),
|
||||
},
|
||||
|
||||
// ── 16. Tasks ──────────────────────────
|
||||
tasks: {
|
||||
...crud(rc, '/api/v1/tasks'),
|
||||
runs: (id, opts) => rc.get(`/api/v1/tasks/${id}/runs` + _qs(opts)),
|
||||
start: (id, data) => rc.post(`/api/v1/tasks/${id}/run`, data || {}),
|
||||
stop: (id) => rc.post(`/api/v1/tasks/${id}/kill`, {}),
|
||||
},
|
||||
|
||||
// ── 17. Surfaces ───────────────────────
|
||||
// ── 10. Surfaces ──────────────────────
|
||||
surfaces: {
|
||||
list: (opts) => rc.get('/api/v1/surfaces' + _qs(opts)),
|
||||
get: (id) => rc.get(`/api/v1/surfaces/${id}`),
|
||||
@@ -332,7 +160,6 @@ export function createDomains(restClient) {
|
||||
// ── 18. Admin ──────────────────────────
|
||||
admin: {
|
||||
stats: () => rc.get('/api/v1/admin/stats'),
|
||||
dashboard: () => rc.get('/api/v1/admin/dashboard'),
|
||||
|
||||
users: {
|
||||
list: (opts) => rc.get('/api/v1/admin/users' + _qs(opts)),
|
||||
@@ -351,38 +178,6 @@ export function createDomains(restClient) {
|
||||
public: () => rc.get('/api/v1/settings/public'),
|
||||
},
|
||||
|
||||
configs: {
|
||||
list: () => rc.get('/api/v1/admin/configs'),
|
||||
create: (data) => rc.post('/api/v1/admin/configs', data),
|
||||
update: (id, data) => rc.put(`/api/v1/admin/configs/${id}`, data),
|
||||
del: (id) => rc.del(`/api/v1/admin/configs/${id}`),
|
||||
},
|
||||
|
||||
models: {
|
||||
list: () => rc.get('/api/v1/admin/models'),
|
||||
fetch: () => rc.post('/api/v1/admin/models/fetch', {}),
|
||||
update: (id, data) => rc.put(`/api/v1/admin/models/${id}`, data),
|
||||
bulkUpdate: (visibility) => rc.put('/api/v1/admin/models/bulk', { visibility, is_enabled: visibility === 'enabled' }),
|
||||
del: (id) => rc.del(`/api/v1/admin/models/${id}`),
|
||||
capabilities: (modelId) => rc.get(`/api/v1/admin/models/${encodeURIComponent(modelId)}/capabilities`),
|
||||
setCapability: (modelId, d) => rc.put(`/api/v1/admin/models/${encodeURIComponent(modelId)}/capabilities`, d),
|
||||
delCapability: (modelId, oId) => rc.del(`/api/v1/admin/models/${encodeURIComponent(modelId)}/capabilities/${oId}`),
|
||||
overrides: () => rc.get('/api/v1/admin/capability-overrides'),
|
||||
},
|
||||
|
||||
personas: {
|
||||
list: () => rc.get('/api/v1/admin/personas'),
|
||||
create: (data) => rc.post('/api/v1/admin/personas', data),
|
||||
update: (id, data) => rc.put(`/api/v1/admin/personas/${id}`, data),
|
||||
del: (id) => rc.del(`/api/v1/admin/personas/${id}`),
|
||||
avatar: (id, base64) => rc.post(`/api/v1/admin/personas/${id}/avatar`, { image: base64 }),
|
||||
delAvatar: (id) => rc.del(`/api/v1/admin/personas/${id}/avatar`),
|
||||
kbs: (id) => rc.get(`/api/v1/admin/personas/${id}/knowledge-bases`),
|
||||
setKbs: (id, data) => rc.put(`/api/v1/admin/personas/${id}/knowledge-bases`, data),
|
||||
toolGrants: (id) => rc.get(`/api/v1/admin/personas/${id}/tool-grants`),
|
||||
setToolGrants: (id, data) => rc.put(`/api/v1/admin/personas/${id}/tool-grants`, data),
|
||||
},
|
||||
|
||||
teams: {
|
||||
list: () => rc.get('/api/v1/admin/teams'),
|
||||
get: (id) => rc.get(`/api/v1/admin/teams/${id}`),
|
||||
@@ -421,71 +216,19 @@ export function createDomains(restClient) {
|
||||
actions: () => rc.get('/api/v1/admin/audit/actions'),
|
||||
},
|
||||
|
||||
roles: {
|
||||
list: () => rc.get('/api/v1/admin/roles'),
|
||||
get: (role) => rc.get(`/api/v1/admin/roles/${role}`),
|
||||
update: (role, config) => rc.put(`/api/v1/admin/roles/${role}`, config),
|
||||
test: (role) => rc.post(`/api/v1/admin/roles/${role}/test`, {}),
|
||||
},
|
||||
|
||||
usage: {
|
||||
get: (opts) => rc.get('/api/v1/admin/usage' + _qs(opts)),
|
||||
user: (id, opts) => rc.get(`/api/v1/admin/usage/users/${id}` + _qs(opts)),
|
||||
team: (id, opts) => rc.get(`/api/v1/admin/usage/teams/${id}` + _qs(opts)),
|
||||
},
|
||||
|
||||
pricing: {
|
||||
list: () => rc.get('/api/v1/admin/pricing'),
|
||||
upsert: (entry) => rc.put('/api/v1/admin/pricing', entry),
|
||||
del: (provId, modelId) => rc.del(`/api/v1/admin/pricing/${provId}/${encodeURIComponent(modelId)}`),
|
||||
},
|
||||
|
||||
providers: {
|
||||
health: () => rc.get('/api/v1/admin/providers/health'),
|
||||
healthOne: (id) => rc.get(`/api/v1/admin/providers/${id}/health`),
|
||||
types: () => rc.get('/api/v1/admin/provider-types'),
|
||||
},
|
||||
|
||||
routing: {
|
||||
policies: () => rc.get('/api/v1/admin/routing/policies'),
|
||||
getPolicy: (id) => rc.get(`/api/v1/admin/routing/policies/${id}`),
|
||||
createPolicy:(data) => rc.post('/api/v1/admin/routing/policies', data),
|
||||
updatePolicy:(id, data) => rc.put(`/api/v1/admin/routing/policies/${id}`, data),
|
||||
deletePolicy:(id) => rc.del(`/api/v1/admin/routing/policies/${id}`),
|
||||
test: (data) => rc.post('/api/v1/admin/routing/test', data),
|
||||
},
|
||||
|
||||
storage: {
|
||||
status: () => rc.get('/api/v1/admin/storage/status'),
|
||||
orphans: () => rc.get('/api/v1/admin/storage/orphans'),
|
||||
cleanup: () => rc.post('/api/v1/admin/storage/cleanup', {}),
|
||||
extraction: () => rc.get('/api/v1/admin/storage/extraction'),
|
||||
},
|
||||
|
||||
vault: {
|
||||
status: () => rc.get('/api/v1/admin/vault/status'),
|
||||
},
|
||||
|
||||
projects: {
|
||||
list: (opts) => rc.get('/api/v1/admin/projects' + _qs(opts)),
|
||||
del: (id) => rc.del(`/api/v1/admin/projects/${id}`),
|
||||
},
|
||||
|
||||
memories: {
|
||||
pending: () => rc.get('/api/v1/admin/memories/pending'),
|
||||
bulkApprove: (ids) => rc.post('/api/v1/admin/memories/bulk-approve', { ids }),
|
||||
},
|
||||
|
||||
notifications: {
|
||||
testEmail: () => rc.post('/api/v1/admin/notifications/test-email', {}),
|
||||
broadcast: (data) => rc.post('/api/v1/admin/notifications/broadcast', data),
|
||||
},
|
||||
|
||||
channels: {
|
||||
archived: (opts) => rc.get('/api/v1/admin/channels/archived' + _qs(opts)),
|
||||
purge: (id) => rc.del(`/api/v1/admin/channels/${id}/purge`),
|
||||
},
|
||||
|
||||
extensions: {
|
||||
list: () => rc.get('/api/v1/admin/extensions'),
|
||||
create: (data) => rc.post('/api/v1/admin/extensions', data),
|
||||
@@ -516,13 +259,6 @@ export function createDomains(restClient) {
|
||||
list: () => rc.get('/api/v1/admin/dependencies'),
|
||||
},
|
||||
|
||||
tasks: {
|
||||
list: () => rc.get('/api/v1/admin/tasks'),
|
||||
run: (id) => rc.post(`/api/v1/admin/tasks/${id}/run`, {}),
|
||||
kill: (id) => rc.post(`/api/v1/admin/tasks/${id}/kill`, {}),
|
||||
del: (id) => rc.del(`/api/v1/admin/tasks/${id}`),
|
||||
},
|
||||
|
||||
surfaces: {
|
||||
list: () => rc.get('/api/v1/admin/surfaces'),
|
||||
get: (id) => rc.get(`/api/v1/admin/surfaces/${id}`),
|
||||
@@ -533,42 +269,6 @@ export function createDomains(restClient) {
|
||||
},
|
||||
},
|
||||
|
||||
// ── 19. Git Credentials ──────────────────
|
||||
git: {
|
||||
credentials: {
|
||||
list: () => rc.get('/api/v1/git-credentials'),
|
||||
create: (data) => rc.post('/api/v1/git-credentials', data),
|
||||
del: (id) => rc.del(`/api/v1/git-credentials/${id}`),
|
||||
},
|
||||
},
|
||||
|
||||
// ── 20. Data Portability ─────────────────
|
||||
dataPortability: {
|
||||
exportMe: () => rc.get('/api/v1/export/me'),
|
||||
deleteAccount: (data) => rc.post('/api/v1/profile/delete', data),
|
||||
},
|
||||
|
||||
// ── Misc (not domain-specific) ─────────
|
||||
folders: {
|
||||
list: () => rc.get('/api/v1/folders'),
|
||||
create: (name, opts) => rc.post('/api/v1/folders', { name, parent_id: opts?.parent_id || null, sort_order: opts?.sort_order || 0 }),
|
||||
update: (id, data) => rc.put(`/api/v1/folders/${id}`, data),
|
||||
del: (id) => rc.del(`/api/v1/folders/${id}`),
|
||||
},
|
||||
|
||||
// NOTE: notifications is defined in the main domain block above (§11).
|
||||
// The duplicate here was overwriting prefs/setPref/delPref methods.
|
||||
// Removed — see line ~190 for the canonical definition.
|
||||
|
||||
files: {
|
||||
get: (id) => rc.get(`/api/v1/files/${id}`),
|
||||
del: (id) => rc.del(`/api/v1/files/${id}`),
|
||||
},
|
||||
|
||||
tools: {
|
||||
list: () => rc.get('/api/v1/tools'),
|
||||
},
|
||||
|
||||
// ── Users ──────────────────────────────
|
||||
users: {
|
||||
search: (q) => rc.get('/api/v1/users/search' + _qs({ q })),
|
||||
@@ -578,16 +278,10 @@ export function createDomains(restClient) {
|
||||
heartbeat: () => rc.post('/api/v1/presence/heartbeat', {}),
|
||||
},
|
||||
|
||||
usage: {
|
||||
mine: (opts) => rc.get('/api/v1/usage' + _qs(opts)),
|
||||
},
|
||||
|
||||
groups: {
|
||||
mine: () => rc.get('/api/v1/groups/mine'),
|
||||
},
|
||||
|
||||
health: () => rc.get('/api/v1/health'),
|
||||
|
||||
export: (content, format, filename) => rc.post('/api/v1/export', { content, format, filename }),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// ==========================================
|
||||
// Chat Switchboard — SDK Entry Point
|
||||
// Switchboard Core — SDK Entry Point
|
||||
// ==========================================
|
||||
// Assembles all SDK modules into the `sw` object
|
||||
// and runs the boot sequence.
|
||||
@@ -129,28 +129,6 @@ export async function boot() {
|
||||
});
|
||||
};
|
||||
|
||||
// ChatPane render helper — surfaces call sw.chatPane(container, opts)
|
||||
// Returns Promise<imperative handle> for backward-compat with old ChatPane API.
|
||||
sw.chatPane = function (container, opts = {}) {
|
||||
return import('../components/chat-pane/index.js').then(({ ChatPane }) => {
|
||||
const handleRef = { current: null };
|
||||
const { render } = preact;
|
||||
render(html`<${ChatPane} handleRef=${handleRef} ...${opts} />`, container);
|
||||
return handleRef.current;
|
||||
});
|
||||
};
|
||||
|
||||
// NotesPane render helper — surfaces call sw.notesPane(container, opts)
|
||||
// Returns Promise<imperative handle>.
|
||||
sw.notesPane = function (container, opts = {}) {
|
||||
return import('../components/notes-pane/index.js').then(({ NotesPane }) => {
|
||||
const handleRef = { current: null };
|
||||
const { render } = preact;
|
||||
render(html`<${NotesPane} handleRef=${handleRef} ...${opts} />`, container);
|
||||
return handleRef.current;
|
||||
});
|
||||
};
|
||||
|
||||
// Marker for idempotency
|
||||
sw._sdk = '0.38.1';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user