- consent: on_permission / on_ask_user wait at most two / five minutes, and in
the background (a phone off screen, a window that is gone) the answer is
refused at once with a reason -- a dialog nobody can see blocked the worker
for good, which is what "the app hangs while the agent works" looked like.
- finishTurn() no longer joins the thread it is called from; the event loop
reaps the Turn instead.
- AndroidTools: the hop to the GUI thread pings first and gives up after 3 s
instead of waiting forever on a busy GUI thread.
- the session list stopped reading every transcript: cst_agent_store_info()
counts newlines in 64 KiB blocks (first_user only within the first 256 KiB),
and AgentCore::sessions() reuses a row while (mtime, size) is unchanged.
- session_search gets a budget (max_bytes 32 MB, max_seconds 5 s), skips lines
over 64 KiB, and says when the budget stopped the walk.
- the header shows the phase ("shell: make -j8"), so a long turn no longer
looks like a stuck one.
- md_to_pdf: the front end's own Qt tool (owner app:qt, every platform):
markdown or a workspace .md/.html becomes an A4 PDF with 15 mm margins,
paginated by hand, written into the workspace and delivered as a file card.
No PrintSupport, so the phone gets it too.
- --uitest runs md_to_pdf through the registry with Chinese text and checks the
bytes are a PDF; app/CMakeLists.txt no longer drops src/web_md.c from the
standalone engine build, which the window needs to render markdown.
Version 0.9.7.
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
#include "ToolProvider.h"
|
|
|
|
#include "AgentCore.h"
|
|
|
|
namespace app {
|
|
|
|
/* Keep these in one place: every platform tool of the front end uses one of
|
|
* them, so the engine's availability gate and the policy UI agree. */
|
|
const char *const kDesktopOnly[] = {"desktop", NULL};
|
|
const char *const kAndroidOnly[] = {"android", NULL};
|
|
|
|
int registerPlatformTools(AgentCore *core) {
|
|
if (!core)
|
|
return 0;
|
|
int n = 0;
|
|
#if defined(__ANDROID__)
|
|
n += platformRegisterAndroid(core);
|
|
#elif defined(__APPLE__)
|
|
n += platformRegisterMac(core);
|
|
#elif defined(_WIN32)
|
|
n += platformRegisterWindows(core);
|
|
#elif defined(__linux__)
|
|
n += platformRegisterLinux(core);
|
|
#endif
|
|
/* Qt is not a platform API: these exist wherever the window does. */
|
|
n += registerQtTools(core);
|
|
/* A service may have appeared or gone since the last probe (a desktop
|
|
* session starting, the notification daemon coming up). */
|
|
cst_tool_meta_reload();
|
|
return n;
|
|
}
|
|
|
|
void unregisterPlatformTools(AgentCore *core) {
|
|
if (!core)
|
|
return;
|
|
core->unregisterOwner(QStringLiteral("app:linux"));
|
|
core->unregisterOwner(QStringLiteral("app:windows"));
|
|
core->unregisterOwner(QStringLiteral("app:macos"));
|
|
core->unregisterOwner(QStringLiteral("app:android"));
|
|
core->unregisterOwner(QStringLiteral("app:qt"));
|
|
}
|
|
|
|
} // namespace app
|