Fix compile of command line parser

This is such an antiattren, amazing.
This commit is contained in:
Χγφτ Kompanion 2025-10-19 19:13:25 +02:00
parent fd922fe747
commit 3f1410a095
2 changed files with 25 additions and 30 deletions

View File

@ -7,6 +7,7 @@ Qt6::Core
Qt6::Sql Qt6::Sql
KF6::ConfigCore KF6::ConfigCore
kom_dal kom_dal
kompanion_mw
kom_ki kom_ki
kom_mcp kom_mcp
Qt6::McpServer Qt6::McpServer

View File

@ -841,64 +841,58 @@ int main(int argc, char** argv) {
parser.addOption(mcpAddrOption); parser.addOption(mcpAddrOption);
// DB navigation helpers // DB navigation helpers
QCommandLineOption dbNsOption(QStringList() << "--db-namespaces", QCommandLineOption dbNsOption(QStringList() << "db-namespaces",
"List namespaces in the database and exit."); "List namespaces in the database and exit.");
parser.addOption(dbNsOption); parser.addOption(dbNsOption);
QCommandLineOption dbItemsOption(QStringList() << "--db-items", QCommandLineOption dbItemsOption(QStringList() << "db-items",
"List recent items in a namespace (requires --ns). Optional --limit."); "List recent items in a namespace (requires --ns). Optional --limit.");
parser.addOption(dbItemsOption); parser.addOption(dbItemsOption);
QCommandLineOption nsNameOption(QStringList() << "--ns", QCommandLineOption nsNameOption(QStringList() << "ns",
"Namespace name for DB operations.", "Namespace name for DB operations.",
"name"); "name");
parser.addOption(nsNameOption); parser.addOption(nsNameOption);
QCommandLineOption limitOption(QStringList() << "--limit", QCommandLineOption limitOption(QStringList() << "limit",
"Limit for DB operations (default 10).", "Limit for DB operations (default 10).",
"n", "10"); "n", "10");
parser.addOption(limitOption); parser.addOption(limitOption);
QCommandLineOption dbSearchOption(QStringList() << "--db-search", QCommandLineOption queryOption(QStringList() << "db-search",
"Hybrid search in a namespace. Use --text and/or --embedding-file. Requires --ns."); "Hybrid search in a namespace. Use --text and/or --embedding-file. Requires --ns.");
parser.addOption(dbSearchOption); parser.addOption(queryOption);
QCommandLineOption textOption(QStringList() << "--text", QCommandLineOption embFileOption(QStringList() << "embedding-file",
"Text query for DB search.",
"q");
parser.addOption(textOption);
QCommandLineOption embFileOption(QStringList() << "--embedding-file",
"Path to JSON array containing embedding vector for hybrid search.", "Path to JSON array containing embedding vector for hybrid search.",
"path"); "path");
parser.addOption(embFileOption); parser.addOption(embFileOption);
// Snapshot helpers // Snapshot helpers
QCommandLineOption snapshotSaveOption(QStringList() << "--snapshot-save", QCommandLineOption snapshotSaveOption(QStringList() << "snapshot-save",
"Save a JSON snapshot (content) under a key in --ns. Provide content via -r/--stdin/[payload]."); "Save a JSON snapshot (content) under a key in --ns. Provide content via -r/--stdin/[payload].");
parser.addOption(snapshotSaveOption); parser.addOption(snapshotSaveOption);
QCommandLineOption snapshotLoadOption(QStringList() << "--snapshot-load", QCommandLineOption snapshotLoadOption(QStringList() << "snapshot-load",
"Load a JSON snapshot for --ns and --key and print it."); "Load a JSON snapshot for --ns and --key and print it.");
parser.addOption(snapshotLoadOption); parser.addOption(snapshotLoadOption);
QCommandLineOption keyOption(QStringList() << "--key", QCommandLineOption keyOption(QStringList() << "key",
"Key for snapshot operations (default 'session:last').", "Key for snapshot operations (default 'session:last').",
"key", "session:last"); "key", "session:last");
parser.addOption(keyOption); parser.addOption(keyOption);
// Warm cache + rehydrate helpers // Warm cache + rehydrate helpers
QCommandLineOption warmCacheOption(QStringList() << "--warm-cache", QCommandLineOption warmCacheOption(QStringList() << "warm-cache",
"Warm precomputed embeddings (policy or ad-hoc). Use with --policy or --id."); "Warm precomputed embeddings (policy or ad-hoc). Use with --policy or --id.");
parser.addOption(warmCacheOption); parser.addOption(warmCacheOption);
QCommandLineOption policyOption(QStringList() << "--policy", QCommandLineOption policyOption(QStringList() << "policy",
"Policy file (YAML/JSON) describing namespaces, model, limit, window_days.", "Policy file (YAML/JSON) describing namespaces, model, limit, window_days.",
"path"); "path");
parser.addOption(policyOption); parser.addOption(policyOption);
QCommandLineOption idOption(QStringList() << "--id", QCommandLineOption idOption(QStringList() << "id",
"Explicit item id for ad-hoc warm cache (use with --stdin or -r).", "Explicit item id for ad-hoc warm cache (use with --stdin or -r).",
"id"); "id");
parser.addOption(idOption); parser.addOption(idOption);
parser.addOption(idOption);
QCommandLineOption rehydrateOption(QStringList() << "--rehydrate", QCommandLineOption rehydrateOption(QStringList() << "--rehydrate",
"Compose a rehydration frame: snapshot + top-K search for --text."); "Compose a rehydration frame: snapshot + top-K search for --text.");
parser.addOption(rehydrateOption); parser.addOption(rehydrateOption);
QCommandLineOption textQOption(QStringList() << "--text", QCommandLineOption kOption(QStringList() << "k",
"Text query for rehydrate/search.",
"q");
parser.addOption(textQOption);
QCommandLineOption kOption(QStringList() << "-k",
"Top-K for rehydrate/search.", "Top-K for rehydrate/search.",
"k", "8"); "k", "8");
parser.addOption(kOption); parser.addOption(kOption);
@ -975,8 +969,8 @@ int main(int argc, char** argv) {
// Snapshot helpers (exclusive) // Snapshot helpers (exclusive)
if (snapSave || snapLoad) { if (snapSave || snapLoad) {
const QString ns = parser.value(nsNameOption); const QString ns = parser.value(nsNameOption);
const QString nsQuery = parser.value(nsQuery);
if (ns.isEmpty()) { qerr << "--snapshot-save/load requires --ns <name>\n"; return 1; } if (ns.isEmpty()) { qerr << "--snapshot-save/load requires --ns <name>\n"; return 1; }
const QString key = parser.value(keyOption);
if (snapSave) { if (snapSave) {
// Resolve content from CLI // Resolve content from CLI
std::string raw; std::string raw;
@ -987,13 +981,13 @@ int main(int argc, char** argv) {
} }
// Wrap into save_context call // Wrap into save_context call
std::ostringstream req; std::ostringstream req;
req << "{\"namespace\":\"" << ns.toStdString() << "\",\"key\":\"" << key.toStdString() << "\",\"content\":" << raw << ",\"tags\":[\"snapshot\"]}"; req << "{\"namespace\":\"" << ns.toStdString() << "\",\"key\":\"" << nsQuery.toStdString() << "\",\"content\":" << raw << ",\"tags\":[\"snapshot\"]}";
const std::string out = server.dispatch("kom.memory.v1.save_context", req.str()); const std::string out = server.dispatch("kom.memory.v1.save_context", req.str());
std::cout << out << std::endl; std::cout << out << std::endl;
return 0; return 0;
} else { } else {
std::ostringstream req; std::ostringstream req;
req << "{\"namespace\":\"" << ns.toStdString() << "\",\"key\":\"" << key.toStdString() << "\"}"; req << "{\"namespace\":\"" << ns.toStdString() << "\",\"key\":\"" << nsQuery.toStdString() << "\"}";
const std::string out = server.dispatch("kom.memory.v1.recall_context", req.str()); const std::string out = server.dispatch("kom.memory.v1.recall_context", req.str());
std::cout << out << std::endl; std::cout << out << std::endl;
return 0; return 0;
@ -1070,13 +1064,13 @@ int main(int argc, char** argv) {
if (rehydrate) { if (rehydrate) {
const QString ns = parser.value(nsNameOption); const QString ns = parser.value(nsNameOption);
const QString key = parser.value(keyOption); const QString key = parser.value(keyOption);
const QString text = parser.value(textQOption); const QString text = parser.value(queryOption);
bool ok=false; int k = parser.value(kOption).toInt(&ok); if (!ok || k<=0) k=8; bool ok=false; int k = parser.value(kOption).toInt(&ok); if (!ok || k<=0) k=8;
// Recall snapshot // Recall snapshot
std::ostringstream r1; r1 << "{\"namespace\":\"" << ns.toStdString() << "\",\"key\":\"" << key.toStdString() << "\"}"; std::ostringstream r1; r1 << "{\"namespace\":\"" << ns.toStdString() << "\",\"key\":\"" << key.toStdString() << "\"}";
const std::string snapshot = server.dispatch("kom.memory.v1.recall_context", r1.str()); const std::string snapshot = server.dispatch("kom.memory.v1.recall_context", r1.str());
// Search // Search
std::ostringstream r2; r2 << "{\"namespace\":\"" << ns.toStdString() << "\",\"query\":{\"text\":\"" << detail::json_escape(text.toStdString()) << "\",\"k\":" << k << "}}"; std::ostringstream r2; r2 << "{\"namespace\":\"" << ns.toStdString() << "\",\"query\":{\"text\":\"" << jsonEscape(text) << "\",\"k\":" << k << "}}";
const std::string matches = server.dispatch("kom.memory.v1.search_memory", r2.str()); const std::string matches = server.dispatch("kom.memory.v1.search_memory", r2.str());
// Compose // Compose
std::cout << "{\"snapshot\":" << snapshot << ",\"search\":" << matches << "}" << std::endl; std::cout << "{\"snapshot\":" << snapshot << ",\"search\":" << matches << "}" << std::endl;
@ -1093,11 +1087,11 @@ int main(int argc, char** argv) {
bool ok=false; int lim = parser.value(limitOption).toInt(&ok); if (!ok || lim<=0) lim=10; bool ok=false; int lim = parser.value(limitOption).toInt(&ok); if (!ok || lim<=0) lim=10;
return dbListItems(ns, lim, qout) ? 0 : 1; return dbListItems(ns, lim, qout) ? 0 : 1;
} }
if (parser.isSet(dbSearchOption)) { if (parser.isSet(queryOption)) {
const QString ns = parser.value(nsNameOption); const QString ns = parser.value(queryOption);
if (ns.isEmpty()) { qerr << "--db-search requires --ns <name>\n"; return 1; } if (ns.isEmpty()) { qerr << "--db-search requires --ns <name>\n"; return 1; }
bool ok=false; int k = parser.value(limitOption).toInt(&ok); if (!ok || k<=0) k=5; bool ok=false; int k = parser.value(limitOption).toInt(&ok); if (!ok || k<=0) k=5;
const QString text = parser.value(textOption); const QString text = parser.value(queryOption);
const QString embPath = parser.value(embFileOption); const QString embPath = parser.value(embFileOption);
return dbSearch(ns, text, embPath, k, qout) ? 0 : 1; return dbSearch(ns, text, embPath, k, qout) ? 0 : 1;
} }