.agents/setup 🔗
@@ -4,6 +4,7 @@ set -euo pipefail
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y \
+ asciidoc \
autoconf \
automake \
gcc \
Amolith created
Have agent-skill install write references/installation.md alongside
SKILL.md, with build/install instructions for the secluded xmppc source,
and include asciidoc in the orb setup dependencies.
Amp-Thread-ID: https://ampcode.com/threads/T-019f2fe4-f392-7688-8b2f-8d40eb9fa4b8
.agents/setup | 1
src/main.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 75 insertions(+), 2 deletions(-)
@@ -4,6 +4,7 @@ set -euo pipefail
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y \
+ asciidoc \
autoconf \
automake \
gcc \
@@ -612,7 +612,60 @@ static int _agent_skill_command(int argc, char *argv[]) {
"description: \"Communicates with the user and other contacts over XMPP/Jabber using xmppc. Use when asked to send, list, or receive Jabber/XMPP messages.\"\n"
"---\n"
"\n"
- "Run `xmppc agent-skill` and follow the instructions it prints.\n";
+ "Run `xmppc agent-skill` and follow the instructions it prints.\n"
+ "\n"
+ "For installing or updating xmppc itself, see `references/installation.md`.\n";
+
+ const char *installation_doc =
+ "# Installing xmppc for agent messaging\n"
+ "\n"
+ "Use this when xmppc is not installed, is too old, or does not have the\n"
+ "`agent-skill`, MAM `receive`, and `<sent archive-id=.../>` behavior.\n"
+ "\n"
+ "Do not print secrets, password commands, or `~/.config/xmppc.conf` while\n"
+ "installing or testing. Runtime account policy belongs in\n"
+ "`~/.config/xmppc/AGENTS.md`.\n"
+ "\n"
+ "## Build dependencies\n"
+ "\n"
+ "On Debian/Ubuntu-like systems:\n"
+ "\n"
+ "```sh\n"
+ "sudo apt-get update\n"
+ "sudo apt-get install -y asciidoc autoconf automake gcc libglib2.0-dev libgpgme-dev libstrophe-dev libtool make pkg-config\n"
+ "```\n"
+ "\n"
+ "## Build from source\n"
+ "\n"
+ "```sh\n"
+ "git clone https://git.secluded.site/xmppc.git\n"
+ "cd xmppc\n"
+ "./bootstrap.sh\n"
+ "./configure\n"
+ "make -j$(nproc)\n"
+ "```\n"
+ "\n"
+ "## Install the binary\n"
+ "\n"
+ "Prefer the user's local binary directory when possible:\n"
+ "\n"
+ "```sh\n"
+ "mkdir -p ~/.local/bin\n"
+ "mv xmppc ~/.local/bin/xmppc\n"
+ "```\n"
+ "\n"
+ "If the environment expects a system-wide executable instead, use a privileged\n"
+ "location such as `/usr/local/bin/xmppc`:\n"
+ "\n"
+ "```sh\n"
+ "sudo mv xmppc /usr/local/bin/xmppc\n"
+ "```\n"
+ "\n"
+ "After installation, verify that the installed binary prints the agent contract:\n"
+ "\n"
+ "```sh\n"
+ "xmppc agent-skill\n"
+ "```\n";
if (argc == 2) {
printf("%s", skill_text);
@@ -628,9 +681,13 @@ static int _agent_skill_command(int argc, char *argv[]) {
char *skill_dir = g_build_filename(home, ".config", "agents", "skills", "communicating-through-xmppc", NULL);
char *skill_file = g_build_filename(skill_dir, "SKILL.md", NULL);
+ char *reference_dir = g_build_filename(skill_dir, "references", NULL);
+ char *installation_file = g_build_filename(reference_dir, "installation.md", NULL);
- if (g_mkdir_with_parents(skill_dir, 0700) != 0) {
+ if (g_mkdir_with_parents(reference_dir, 0700) != 0) {
fprintf(stderr, "Could not create skill directory: %s\n", skill_dir);
+ g_free(installation_file);
+ g_free(reference_dir);
g_free(skill_file);
g_free(skill_dir);
return EXIT_FAILURE;
@@ -640,12 +697,27 @@ static int _agent_skill_command(int argc, char *argv[]) {
if (!g_file_set_contents(skill_file, pointer_skill, -1, &error)) {
fprintf(stderr, "Could not write skill file: %s\n", error ? error->message : "unknown error");
g_clear_error(&error);
+ g_free(installation_file);
+ g_free(reference_dir);
+ g_free(skill_file);
+ g_free(skill_dir);
+ return EXIT_FAILURE;
+ }
+
+ if (!g_file_set_contents(installation_file, installation_doc, -1, &error)) {
+ fprintf(stderr, "Could not write installation reference: %s\n", error ? error->message : "unknown error");
+ g_clear_error(&error);
+ g_free(installation_file);
+ g_free(reference_dir);
g_free(skill_file);
g_free(skill_dir);
return EXIT_FAILURE;
}
printf("Installed communicating-through-xmppc skill at %s\n", skill_file);
+ printf("Installed installation reference at %s\n", installation_file);
+ g_free(installation_file);
+ g_free(reference_dir);
g_free(skill_file);
g_free(skill_dir);
return EXIT_SUCCESS;