@pedroaugusto04/kb-cli 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,7 @@ const COMMANDS = [
10
10
  '/save ',
11
11
  '/ask ',
12
12
  '/sync ',
13
+ '/sync-ai',
13
14
  '/logout',
14
15
  '/exit',
15
16
  'projects',
@@ -235,6 +236,10 @@ export async function runRepl() {
235
236
  console.log(` ${pc.yellow('--dry-run')} Analyze changes without uploading`);
236
237
  console.log(` ${pc.yellow('-w, --watch')} Watch directory/file for real-time changes`);
237
238
  console.log(` ${pc.gray('Example:')} /sync ./README.md -p platform --dry-run\n`);
239
+ console.log(` ${pc.bold('/sync-ai')} - Sync/import recent local AI sessions (Claude Code, Codex, Antigravity, OpenCode)`);
240
+ console.log(` ${pc.gray('Options:')}`);
241
+ console.log(` ${pc.yellow('-p, --project <slug>')} Specify project context`);
242
+ console.log(` ${pc.gray('Example:')} /sync-ai -p platform\n`);
238
243
  console.log(` ${pc.bold('projects')} - List all projects in active workspace`);
239
244
  console.log(` ${pc.bold('workspaces')} - List available workspaces`);
240
245
  console.log(` ${pc.bold('config list')} - List all CLI config values`);
@@ -319,6 +324,18 @@ export async function runRepl() {
319
324
  }
320
325
  continue;
321
326
  }
327
+ if (trimmed === '/sync-ai' || trimmed.startsWith('/sync-ai ')) {
328
+ const rawSync = trimmed.startsWith('/sync-ai ') ? trimmed.substring(9).trim() : '';
329
+ const { options } = parseReplOptions(rawSync);
330
+ const { runSyncAi } = await import('./sync-ai.js');
331
+ try {
332
+ await runSyncAi({ project: options.project });
333
+ }
334
+ catch (err) {
335
+ console.error(pc.red(`Sync-AI failed: ${err.message}`));
336
+ }
337
+ continue;
338
+ }
322
339
  if (trimmed.startsWith('/')) {
323
340
  console.log(pc.red(`Unknown command: ${trimmed}. Type 'help' for available commands.`));
324
341
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/commands/repl.ts"],"names":[],"mappings":"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","sourcesContent":["import readline from 'node:readline';\nimport pc from 'picocolors';\nimport { runAsk } from './ask.js';\nimport { runNote } from './note.js';\nimport { runListProjects, runListWorkspaces } from './list.js';\nimport { runLogout } from './logout.js';\nimport { runConfigGet, runConfigSet, runConfigList } from './config.js';\nimport { loadConfig } from '../config.js';\n\nconst COMMANDS = [\n '/save ',\n '/ask ',\n '/sync ',\n '/logout',\n '/exit',\n 'projects',\n 'workspaces',\n 'config list',\n 'config get ',\n 'config set ',\n 'help'\n];\n\nfunction stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex\n return str.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');\n}\n\nfunction readlineAutocompletePrompt(promptText: string, commands: string[]): Promise<string> {\n return new Promise((resolve) => {\n let input = '';\n let cursor = 0;\n let selectedIndex = 0;\n\n function getMatches(currentInput: string): string[] {\n const trimmed = currentInput.trim();\n if (!trimmed) return [];\n return commands.filter((c) => c.startsWith(trimmed));\n }\n\n function cleanupOverlay(matches: string[]) {\n if (matches.length > 0) {\n readline.cursorTo(process.stdout, 0);\n readline.clearLine(process.stdout, 0);\n // Move cursor down to clear each suggestion line\n for (let i = 0; i < matches.length; i++) {\n process.stdout.write('\\n');\n readline.clearLine(process.stdout, 0);\n }\n // Return cursor to prompt line\n readline.moveCursor(process.stdout, 0, -matches.length);\n readline.clearScreenDown(process.stdout);\n }\n }\n\n function render() {\n const matches = getMatches(input);\n\n // Clean prompt line\n readline.cursorTo(process.stdout, 0);\n readline.clearLine(process.stdout, 0);\n\n // Write prompt and user input\n process.stdout.write(promptText + input);\n\n // Clear any remaining lines below\n readline.clearScreenDown(process.stdout);\n\n if (matches.length > 0) {\n process.stdout.write('\\n');\n matches.forEach((match, index) => {\n if (index === selectedIndex) {\n // Glow blue selection bar\n process.stdout.write(` ${pc.bgBlue(pc.white(pc.bold(` ❯ ${match.padEnd(16)} `)))}\\n`);\n } else {\n process.stdout.write(` ${pc.cyan(match)}\\n`);\n }\n });\n\n // Return cursor back to prompt line\n readline.moveCursor(process.stdout, 0, -(matches.length + 1));\n }\n\n // Restore cursor position inside input buffer\n readline.cursorTo(process.stdout, stripAnsi(promptText).length + cursor);\n }\n\n function onKeypress(str: string, key: any) {\n const matches = getMatches(input);\n\n if (key && key.ctrl && key.name === 'c') {\n cleanupOverlay(matches);\n process.stdin.removeListener('keypress', onKeypress);\n process.stdin.setRawMode(false);\n console.log();\n process.exit(0);\n }\n\n if (key && (key.name === 'return' || key.name === 'enter')) {\n if (matches.length > 0) {\n const selectedMatch = matches[selectedIndex];\n \n if (selectedMatch === '/save ' || selectedMatch === '/ask ') {\n // Autofill command and let user continue typing note/question\n cleanupOverlay(matches);\n input = selectedMatch;\n cursor = input.length;\n selectedIndex = 0;\n render();\n return;\n }\n\n // Self-executing commands\n cleanupOverlay(matches);\n process.stdin.removeListener('keypress', onKeypress);\n process.stdin.setRawMode(false);\n console.log();\n resolve(selectedMatch);\n return;\n }\n\n // Normal text submission\n cleanupOverlay(matches);\n process.stdin.removeListener('keypress', onKeypress);\n process.stdin.setRawMode(false);\n console.log();\n resolve(input);\n return;\n }\n\n if (key && key.name === 'up') {\n if (matches.length > 0) {\n selectedIndex = (selectedIndex - 1 + matches.length) % matches.length;\n }\n render();\n return;\n }\n\n if (key && key.name === 'down') {\n if (matches.length > 0) {\n selectedIndex = (selectedIndex + 1) % matches.length;\n }\n render();\n return;\n }\n\n if (key && key.name === 'tab') {\n if (matches.length > 0) {\n const selectedMatch = matches[selectedIndex];\n input = selectedMatch;\n cursor = input.length;\n selectedIndex = 0;\n }\n render();\n return;\n }\n\n if (key && (key.name === 'backspace' || key.name === 'delete' || str === '\\u007f' || str === '\\b')) {\n if (cursor > 0) {\n // Clear current overlay matches before modifying input\n cleanupOverlay(matches);\n input = input.slice(0, cursor - 1) + input.slice(cursor);\n cursor--;\n selectedIndex = 0;\n }\n render();\n return;\n }\n\n if (key && key.name === 'left') {\n if (cursor > 0) cursor--;\n render();\n return;\n }\n\n if (key && key.name === 'right') {\n if (cursor < input.length) cursor++;\n render();\n return;\n }\n\n // Handle normal printable characters\n if (str && str.length === 1 && (!key || (!key.meta && !key.ctrl && key.name !== 'escape'))) {\n cleanupOverlay(matches);\n input = input.slice(0, cursor) + str + input.slice(cursor);\n cursor += str.length;\n selectedIndex = 0;\n render();\n }\n }\n\n process.stdin.resume();\n readline.emitKeypressEvents(process.stdin);\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.on('keypress', onKeypress);\n render();\n });\n}\n\nfunction parseReplOptions(argsString: string): { text: string; options: { project?: string; file?: string } } {\n const options: { project?: string; file?: string } = {};\n let text = argsString;\n\n // Match -p/--project option\n const projectRegex = /(?:-p|--project)(?:\\s+|=)(?:'([^']+)'|\"([^\"]+)\"|([^\\s]+))/i;\n let match;\n while ((match = projectRegex.exec(text))) {\n options.project = match[1] || match[2] || match[3];\n text = text.replace(match[0], '').trim();\n }\n\n // Match -f/--file option\n const fileRegex = /(?:-f|--file)(?:\\s+|=)(?:'([^']+)'|\"([^\"]+)\"|([^\\s]+))/i;\n while ((match = fileRegex.exec(text))) {\n options.file = match[1] || match[2] || match[3];\n text = text.replace(match[0], '').trim();\n }\n\n // Clean up multiple spaces\n text = text.replace(/\\s+/g, ' ').trim();\n\n return { text, options };\n}\n\nexport async function runRepl(): Promise<void> {\n const config = loadConfig();\n console.log(pc.cyan('================================================'));\n console.log(pc.cyan(` Knowledge Base Interactive Session `));\n console.log(pc.cyan(` Active Workspace: ${pc.bold(config.workspaceSlug)}`));\n console.log(pc.cyan(` Type ${pc.bold('/exit')} to quit, ${pc.bold('help')} for command list.`));\n console.log(pc.cyan(` [TAB] or [UP/DOWN] to select autocomplete commands.`));\n console.log(pc.cyan('================================================\\n'));\n\n while (true) {\n const promptLabel = pc.magenta('kb> ');\n const line = await readlineAutocompletePrompt(promptLabel, COMMANDS);\n const trimmed = line.trim();\n\n if (!trimmed) {\n continue;\n }\n\n if (trimmed === '/exit' || trimmed === 'exit' || trimmed === 'quit') {\n console.log(pc.gray('Goodbye!'));\n process.exit(0);\n }\n\n if (trimmed === 'help') {\n console.log(pc.cyan('\\nInteractive Command List & Options:'));\n console.log(` ${pc.bold('/ask <question>')} - Query the knowledge base`);\n console.log(` ${pc.gray('Options:')}`);\n console.log(` ${pc.yellow('-p, --project <slug>')} Specify project context for the query`);\n console.log(` ${pc.gray('Example:')} /ask -p platform How to deploy?\\n`);\n\n console.log(` ${pc.bold('/save <note>')} - Send a note to the agent`);\n console.log(` ${pc.gray('Options:')}`);\n console.log(` ${pc.yellow('-p, --project <slug>')} Specify project context`);\n console.log(` ${pc.yellow('-f, --file <path>')} Attach a file to the note`);\n console.log(` ${pc.gray('Example:')} /save -p inbox -f ./todo.txt review this file\\n`);\n\n console.log(` ${pc.bold('<any text>')} - Sends text directly to the agent (shortcut for /save)`);\n console.log(` ${pc.gray('Options:')} Supports same -p and -f options as /save`);\n console.log(` ${pc.gray('Example:')} My note text -p platform\\n`);\n\n console.log(` ${pc.bold('/sync <path>')} - Sync a local directory or single markdown file`);\n console.log(` ${pc.gray('Options:')}`);\n console.log(` ${pc.yellow('-p, --project <slug>')} Specify default project context`);\n console.log(` ${pc.yellow('--dry-run')} Analyze changes without uploading`);\n console.log(` ${pc.yellow('-w, --watch')} Watch directory/file for real-time changes`);\n console.log(` ${pc.gray('Example:')} /sync ./README.md -p platform --dry-run\\n`);\n\n console.log(` ${pc.bold('projects')} - List all projects in active workspace`);\n console.log(` ${pc.bold('workspaces')} - List available workspaces`);\n console.log(` ${pc.bold('config list')} - List all CLI config values`);\n console.log(` ${pc.bold('config get <key>')} - Get a CLI config value`);\n console.log(` ${pc.bold('config set <key> <val>')} - Set a CLI config value`);\n console.log(` ${pc.bold('/logout')} - Log out of session`);\n console.log(` ${pc.bold('/exit')} - Exit session\\n`);\n continue;\n }\n\n if (trimmed === 'projects') {\n await runListProjects();\n continue;\n }\n\n if (trimmed === 'workspaces') {\n await runListWorkspaces();\n continue;\n }\n\n if (trimmed === 'config' || trimmed === 'config list') {\n runConfigList();\n continue;\n }\n\n if (trimmed.startsWith('config get ')) {\n const key = trimmed.substring(11).trim();\n runConfigGet(key, true);\n continue;\n }\n\n if (trimmed.startsWith('config set ')) {\n const parts = trimmed.substring(11).trim().split(/\\s+/);\n const key = parts[0] || '';\n const value = parts.slice(1).join(' ');\n if (!key || !value) {\n console.log(pc.yellow('Usage: config set <key> <value>'));\n } else {\n runConfigSet(key, value, true);\n }\n continue;\n }\n\n if (trimmed === '/logout') {\n await runLogout();\n console.log(pc.yellow('Exiting REPL session.'));\n process.exit(0);\n }\n\n // Process Slash Commands\n if (trimmed.startsWith('/ask ')) {\n const rawQuestion = trimmed.substring(5).trim();\n const { text: question, options } = parseReplOptions(rawQuestion);\n await runAsk(question, options);\n continue;\n }\n\n if (trimmed === '/save' || trimmed.startsWith('/save ')) {\n const rawNote = trimmed.startsWith('/save ') ? trimmed.substring(6).trim() : '';\n if (!rawNote) {\n console.log(pc.yellow('Please provide note text (e.g. /save My new note)'));\n continue;\n }\n const { text: note, options } = parseReplOptions(rawNote);\n await runNote(note, options);\n continue;\n }\n\n if (trimmed.startsWith('/sync ')) {\n const rawSync = trimmed.substring(6).trim();\n const dryRun = rawSync.includes('--dry-run');\n const watch = rawSync.includes('--watch') || rawSync.includes(' -w');\n let cleaned = rawSync.replace('--dry-run', '').replace('--watch', '').replace(' -w', '').trim();\n const { text: dirPath, options } = parseReplOptions(cleaned);\n\n if (!dirPath) {\n console.log(pc.yellow('Usage: /sync <path> [options]'));\n continue;\n }\n\n const { runSync } = await import('./sync.js');\n try {\n await runSync({\n dir: dirPath,\n project: options.project,\n dryRun,\n watch,\n });\n } catch (err: any) {\n console.error(pc.red(`Sync failed: ${err.message}`));\n }\n continue;\n }\n\n if (trimmed.startsWith('/')) {\n console.log(pc.red(`Unknown command: ${trimmed}. Type 'help' for available commands.`));\n continue;\n }\n\n // Default note creation shortcut\n const { text: noteText, options } = parseReplOptions(trimmed);\n await runNote(noteText, options);\n }\n}\n"]}
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/commands/repl.ts"],"names":[],"mappings":"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","sourcesContent":["import readline from 'node:readline';\nimport pc from 'picocolors';\nimport { runAsk } from './ask.js';\nimport { runNote } from './note.js';\nimport { runListProjects, runListWorkspaces } from './list.js';\nimport { runLogout } from './logout.js';\nimport { runConfigGet, runConfigSet, runConfigList } from './config.js';\nimport { loadConfig } from '../config.js';\n\nconst COMMANDS = [\n '/save ',\n '/ask ',\n '/sync ',\n '/sync-ai',\n '/logout',\n '/exit',\n 'projects',\n 'workspaces',\n 'config list',\n 'config get ',\n 'config set ',\n 'help'\n];\n\nfunction stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex\n return str.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');\n}\n\nfunction readlineAutocompletePrompt(promptText: string, commands: string[]): Promise<string> {\n return new Promise((resolve) => {\n let input = '';\n let cursor = 0;\n let selectedIndex = 0;\n\n function getMatches(currentInput: string): string[] {\n const trimmed = currentInput.trim();\n if (!trimmed) return [];\n return commands.filter((c) => c.startsWith(trimmed));\n }\n\n function cleanupOverlay(matches: string[]) {\n if (matches.length > 0) {\n readline.cursorTo(process.stdout, 0);\n readline.clearLine(process.stdout, 0);\n // Move cursor down to clear each suggestion line\n for (let i = 0; i < matches.length; i++) {\n process.stdout.write('\\n');\n readline.clearLine(process.stdout, 0);\n }\n // Return cursor to prompt line\n readline.moveCursor(process.stdout, 0, -matches.length);\n readline.clearScreenDown(process.stdout);\n }\n }\n\n function render() {\n const matches = getMatches(input);\n\n // Clean prompt line\n readline.cursorTo(process.stdout, 0);\n readline.clearLine(process.stdout, 0);\n\n // Write prompt and user input\n process.stdout.write(promptText + input);\n\n // Clear any remaining lines below\n readline.clearScreenDown(process.stdout);\n\n if (matches.length > 0) {\n process.stdout.write('\\n');\n matches.forEach((match, index) => {\n if (index === selectedIndex) {\n // Glow blue selection bar\n process.stdout.write(` ${pc.bgBlue(pc.white(pc.bold(` ❯ ${match.padEnd(16)} `)))}\\n`);\n } else {\n process.stdout.write(` ${pc.cyan(match)}\\n`);\n }\n });\n\n // Return cursor back to prompt line\n readline.moveCursor(process.stdout, 0, -(matches.length + 1));\n }\n\n // Restore cursor position inside input buffer\n readline.cursorTo(process.stdout, stripAnsi(promptText).length + cursor);\n }\n\n function onKeypress(str: string, key: any) {\n const matches = getMatches(input);\n\n if (key && key.ctrl && key.name === 'c') {\n cleanupOverlay(matches);\n process.stdin.removeListener('keypress', onKeypress);\n process.stdin.setRawMode(false);\n console.log();\n process.exit(0);\n }\n\n if (key && (key.name === 'return' || key.name === 'enter')) {\n if (matches.length > 0) {\n const selectedMatch = matches[selectedIndex];\n \n if (selectedMatch === '/save ' || selectedMatch === '/ask ') {\n // Autofill command and let user continue typing note/question\n cleanupOverlay(matches);\n input = selectedMatch;\n cursor = input.length;\n selectedIndex = 0;\n render();\n return;\n }\n\n // Self-executing commands\n cleanupOverlay(matches);\n process.stdin.removeListener('keypress', onKeypress);\n process.stdin.setRawMode(false);\n console.log();\n resolve(selectedMatch);\n return;\n }\n\n // Normal text submission\n cleanupOverlay(matches);\n process.stdin.removeListener('keypress', onKeypress);\n process.stdin.setRawMode(false);\n console.log();\n resolve(input);\n return;\n }\n\n if (key && key.name === 'up') {\n if (matches.length > 0) {\n selectedIndex = (selectedIndex - 1 + matches.length) % matches.length;\n }\n render();\n return;\n }\n\n if (key && key.name === 'down') {\n if (matches.length > 0) {\n selectedIndex = (selectedIndex + 1) % matches.length;\n }\n render();\n return;\n }\n\n if (key && key.name === 'tab') {\n if (matches.length > 0) {\n const selectedMatch = matches[selectedIndex];\n input = selectedMatch;\n cursor = input.length;\n selectedIndex = 0;\n }\n render();\n return;\n }\n\n if (key && (key.name === 'backspace' || key.name === 'delete' || str === '\\u007f' || str === '\\b')) {\n if (cursor > 0) {\n // Clear current overlay matches before modifying input\n cleanupOverlay(matches);\n input = input.slice(0, cursor - 1) + input.slice(cursor);\n cursor--;\n selectedIndex = 0;\n }\n render();\n return;\n }\n\n if (key && key.name === 'left') {\n if (cursor > 0) cursor--;\n render();\n return;\n }\n\n if (key && key.name === 'right') {\n if (cursor < input.length) cursor++;\n render();\n return;\n }\n\n // Handle normal printable characters\n if (str && str.length === 1 && (!key || (!key.meta && !key.ctrl && key.name !== 'escape'))) {\n cleanupOverlay(matches);\n input = input.slice(0, cursor) + str + input.slice(cursor);\n cursor += str.length;\n selectedIndex = 0;\n render();\n }\n }\n\n process.stdin.resume();\n readline.emitKeypressEvents(process.stdin);\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.on('keypress', onKeypress);\n render();\n });\n}\n\nfunction parseReplOptions(argsString: string): { text: string; options: { project?: string; file?: string } } {\n const options: { project?: string; file?: string } = {};\n let text = argsString;\n\n // Match -p/--project option\n const projectRegex = /(?:-p|--project)(?:\\s+|=)(?:'([^']+)'|\"([^\"]+)\"|([^\\s]+))/i;\n let match;\n while ((match = projectRegex.exec(text))) {\n options.project = match[1] || match[2] || match[3];\n text = text.replace(match[0], '').trim();\n }\n\n // Match -f/--file option\n const fileRegex = /(?:-f|--file)(?:\\s+|=)(?:'([^']+)'|\"([^\"]+)\"|([^\\s]+))/i;\n while ((match = fileRegex.exec(text))) {\n options.file = match[1] || match[2] || match[3];\n text = text.replace(match[0], '').trim();\n }\n\n // Clean up multiple spaces\n text = text.replace(/\\s+/g, ' ').trim();\n\n return { text, options };\n}\n\nexport async function runRepl(): Promise<void> {\n const config = loadConfig();\n console.log(pc.cyan('================================================'));\n console.log(pc.cyan(` Knowledge Base Interactive Session `));\n console.log(pc.cyan(` Active Workspace: ${pc.bold(config.workspaceSlug)}`));\n console.log(pc.cyan(` Type ${pc.bold('/exit')} to quit, ${pc.bold('help')} for command list.`));\n console.log(pc.cyan(` [TAB] or [UP/DOWN] to select autocomplete commands.`));\n console.log(pc.cyan('================================================\\n'));\n\n while (true) {\n const promptLabel = pc.magenta('kb> ');\n const line = await readlineAutocompletePrompt(promptLabel, COMMANDS);\n const trimmed = line.trim();\n\n if (!trimmed) {\n continue;\n }\n\n if (trimmed === '/exit' || trimmed === 'exit' || trimmed === 'quit') {\n console.log(pc.gray('Goodbye!'));\n process.exit(0);\n }\n\n if (trimmed === 'help') {\n console.log(pc.cyan('\\nInteractive Command List & Options:'));\n console.log(` ${pc.bold('/ask <question>')} - Query the knowledge base`);\n console.log(` ${pc.gray('Options:')}`);\n console.log(` ${pc.yellow('-p, --project <slug>')} Specify project context for the query`);\n console.log(` ${pc.gray('Example:')} /ask -p platform How to deploy?\\n`);\n\n console.log(` ${pc.bold('/save <note>')} - Send a note to the agent`);\n console.log(` ${pc.gray('Options:')}`);\n console.log(` ${pc.yellow('-p, --project <slug>')} Specify project context`);\n console.log(` ${pc.yellow('-f, --file <path>')} Attach a file to the note`);\n console.log(` ${pc.gray('Example:')} /save -p inbox -f ./todo.txt review this file\\n`);\n\n console.log(` ${pc.bold('<any text>')} - Sends text directly to the agent (shortcut for /save)`);\n console.log(` ${pc.gray('Options:')} Supports same -p and -f options as /save`);\n console.log(` ${pc.gray('Example:')} My note text -p platform\\n`);\n\n console.log(` ${pc.bold('/sync <path>')} - Sync a local directory or single markdown file`);\n console.log(` ${pc.gray('Options:')}`);\n console.log(` ${pc.yellow('-p, --project <slug>')} Specify default project context`);\n console.log(` ${pc.yellow('--dry-run')} Analyze changes without uploading`);\n console.log(` ${pc.yellow('-w, --watch')} Watch directory/file for real-time changes`);\n console.log(` ${pc.gray('Example:')} /sync ./README.md -p platform --dry-run\\n`);\n\n console.log(` ${pc.bold('/sync-ai')} - Sync/import recent local AI sessions (Claude Code, Codex, Antigravity, OpenCode)`);\n console.log(` ${pc.gray('Options:')}`);\n console.log(` ${pc.yellow('-p, --project <slug>')} Specify project context`);\n console.log(` ${pc.gray('Example:')} /sync-ai -p platform\\n`);\n\n console.log(` ${pc.bold('projects')} - List all projects in active workspace`);\n console.log(` ${pc.bold('workspaces')} - List available workspaces`);\n console.log(` ${pc.bold('config list')} - List all CLI config values`);\n console.log(` ${pc.bold('config get <key>')} - Get a CLI config value`);\n console.log(` ${pc.bold('config set <key> <val>')} - Set a CLI config value`);\n console.log(` ${pc.bold('/logout')} - Log out of session`);\n console.log(` ${pc.bold('/exit')} - Exit session\\n`);\n continue;\n }\n\n if (trimmed === 'projects') {\n await runListProjects();\n continue;\n }\n\n if (trimmed === 'workspaces') {\n await runListWorkspaces();\n continue;\n }\n\n if (trimmed === 'config' || trimmed === 'config list') {\n runConfigList();\n continue;\n }\n\n if (trimmed.startsWith('config get ')) {\n const key = trimmed.substring(11).trim();\n runConfigGet(key, true);\n continue;\n }\n\n if (trimmed.startsWith('config set ')) {\n const parts = trimmed.substring(11).trim().split(/\\s+/);\n const key = parts[0] || '';\n const value = parts.slice(1).join(' ');\n if (!key || !value) {\n console.log(pc.yellow('Usage: config set <key> <value>'));\n } else {\n runConfigSet(key, value, true);\n }\n continue;\n }\n\n if (trimmed === '/logout') {\n await runLogout();\n console.log(pc.yellow('Exiting REPL session.'));\n process.exit(0);\n }\n\n // Process Slash Commands\n if (trimmed.startsWith('/ask ')) {\n const rawQuestion = trimmed.substring(5).trim();\n const { text: question, options } = parseReplOptions(rawQuestion);\n await runAsk(question, options);\n continue;\n }\n\n if (trimmed === '/save' || trimmed.startsWith('/save ')) {\n const rawNote = trimmed.startsWith('/save ') ? trimmed.substring(6).trim() : '';\n if (!rawNote) {\n console.log(pc.yellow('Please provide note text (e.g. /save My new note)'));\n continue;\n }\n const { text: note, options } = parseReplOptions(rawNote);\n await runNote(note, options);\n continue;\n }\n\n if (trimmed.startsWith('/sync ')) {\n const rawSync = trimmed.substring(6).trim();\n const dryRun = rawSync.includes('--dry-run');\n const watch = rawSync.includes('--watch') || rawSync.includes(' -w');\n let cleaned = rawSync.replace('--dry-run', '').replace('--watch', '').replace(' -w', '').trim();\n const { text: dirPath, options } = parseReplOptions(cleaned);\n\n if (!dirPath) {\n console.log(pc.yellow('Usage: /sync <path> [options]'));\n continue;\n }\n\n const { runSync } = await import('./sync.js');\n try {\n await runSync({\n dir: dirPath,\n project: options.project,\n dryRun,\n watch,\n });\n } catch (err: any) {\n console.error(pc.red(`Sync failed: ${err.message}`));\n }\n continue;\n }\n\n if (trimmed === '/sync-ai' || trimmed.startsWith('/sync-ai ')) {\n const rawSync = trimmed.startsWith('/sync-ai ') ? trimmed.substring(9).trim() : '';\n const { options } = parseReplOptions(rawSync);\n\n const { runSyncAi } = await import('./sync-ai.js');\n try {\n await runSyncAi({ project: options.project });\n } catch (err: any) {\n console.error(pc.red(`Sync-AI failed: ${err.message}`));\n }\n continue;\n }\n\n if (trimmed.startsWith('/')) {\n console.log(pc.red(`Unknown command: ${trimmed}. Type 'help' for available commands.`));\n continue;\n }\n\n // Default note creation shortcut\n const { text: noteText, options } = parseReplOptions(trimmed);\n await runNote(noteText, options);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pedroaugusto04/kb-cli",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "CLI client for the Knowledge Base AI system",
5
5
  "type": "module",
6
6
  "bin": {