import { addNote, archiveNote, getNote, listNotesByTag, listRecent, overview, searchNotes, updateNote, } from './notes.ts' import { assertNever, inputRecord, normalizeText } from './util.ts' const STASH_ACTIONS = [ 'add', 'update', 'get', 'recent', 'by-tag', 'archive', 'search', 'overview', ] as const type StashAction = (typeof STASH_ACTIONS)[number] function parseAction(raw: string): StashAction | null { const action = raw.toLowerCase() for (const candidate of STASH_ACTIONS) { if (candidate === action) return candidate } return null } export async function run(input?: unknown) { const body = inputRecord(input ?? {}) const rawAction = normalizeText(body.action) const action = rawAction ? parseAction(rawAction) : body.text ? 'add' : body.query ? 'search' : 'overview' if (!action) { throw new Error( `Unknown action "${rawAction}". Valid actions: ${STASH_ACTIONS.join(', ')}.`, ) } switch (action) { case 'add': return await addNote(body) case 'update': return await updateNote(body) case 'get': return await getNote(body) case 'recent': return await listRecent(body) case 'by-tag': return await listNotesByTag(body) case 'archive': return await archiveNote(body) case 'search': return await searchNotes(body) case 'overview': return overview() default: return assertNever(action, `Unhandled stash action: ${String(action)}`) } }