mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-13 14:37:26 +00:00
Add AgentBBS connector plugin
Declares the AgentBBS capability surface (chat, pods, arcade, ascii-live, finger) as @logicsrc/plugin-agentbbs and registers it in the CLI registry and CommandBoard API. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
12a1d7f479
commit
d9b379b11a
13 changed files with 133 additions and 5 deletions
|
|
@ -13,6 +13,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@logicsrc/plugin-core": "file:../../packages/plugin-core",
|
||||
"@logicsrc/plugin-agentbbs": "file:../../plugins/agentbbs",
|
||||
"@logicsrc/plugin-agentmail": "file:../../plugins/agentmail",
|
||||
"@logicsrc/plugin-c0mpute": "file:../../plugins/c0mpute",
|
||||
"@logicsrc/plugin-coinpay": "file:../../plugins/coinpay",
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ describe("CommandBoard API contracts", () => {
|
|||
};
|
||||
|
||||
expect(response.status).toBe(200);
|
||||
expect(body.plugins.map((plugin) => plugin.id)).toEqual(["coinpay", "ugig", "sh1pt", "c0mpute", "feed-discovery", "social-accounts", "email-accounts", "agentmail"]);
|
||||
expect(body.plugins.map((plugin) => plugin.id)).toEqual(["coinpay", "ugig", "sh1pt", "c0mpute", "feed-discovery", "social-accounts", "email-accounts", "agentmail", "agentbbs"]);
|
||||
expect(body.plugins.find((plugin) => plugin.id === "sh1pt")).toMatchObject({
|
||||
enabled: true,
|
||||
capabilities: expect.arrayContaining(["projects.sync", "actions.publish", "deployments.status"])
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { createServer, type IncomingMessage, type ServerResponse } from "node:http";
|
||||
import { pathToFileURL } from "node:url";
|
||||
import { createPluginRegistry } from "@logicsrc/plugin-core";
|
||||
import { agentBbsPlugin } from "@logicsrc/plugin-agentbbs";
|
||||
import { agentMailPlugin, DraftError, MailAccessError, parseAddress, type Draft, type MailAddress } from "@logicsrc/plugin-agentmail";
|
||||
import { c0mputePlugin } from "@logicsrc/plugin-c0mpute";
|
||||
import { coinPayPlugin } from "@logicsrc/plugin-coinpay";
|
||||
|
|
@ -12,7 +13,7 @@ import { uGigPlugin } from "@logicsrc/plugin-ugig";
|
|||
import { schemas, validate } from "@logicsrc/validators";
|
||||
import { buildAgentMailService, mailIdentity } from "./agentmail.js";
|
||||
|
||||
const registry = createPluginRegistry([coinPayPlugin, uGigPlugin, sh1ptPlugin, c0mputePlugin, feedDiscoveryPlugin, socialAccountsPlugin, emailAccountsPlugin, agentMailPlugin]);
|
||||
const registry = createPluginRegistry([coinPayPlugin, uGigPlugin, sh1ptPlugin, c0mputePlugin, feedDiscoveryPlugin, socialAccountsPlugin, emailAccountsPlugin, agentMailPlugin, agentBbsPlugin]);
|
||||
|
||||
const boards = [
|
||||
{ path: "/general", title: "General", description: "CommandBoard.run general discussion." },
|
||||
|
|
|
|||
16
package-lock.json
generated
16
package-lock.json
generated
|
|
@ -23,6 +23,7 @@
|
|||
"name": "@logicsrc/commandboard-api",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"@logicsrc/plugin-agentbbs": "file:../../plugins/agentbbs",
|
||||
"@logicsrc/plugin-agentmail": "file:../../plugins/agentmail",
|
||||
"@logicsrc/plugin-c0mpute": "file:../../plugins/c0mpute",
|
||||
"@logicsrc/plugin-coinpay": "file:../../plugins/coinpay",
|
||||
|
|
@ -2064,6 +2065,10 @@
|
|||
"resolved": "packages/openprd",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@logicsrc/plugin-agentbbs": {
|
||||
"resolved": "plugins/agentbbs",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@logicsrc/plugin-agentgit": {
|
||||
"resolved": "plugins/agentgit",
|
||||
"link": true
|
||||
|
|
@ -7759,6 +7764,7 @@
|
|||
"@logicsrc/account-core": "file:../account-core",
|
||||
"@logicsrc/openontology": "file:../openontology",
|
||||
"@logicsrc/openprd": "file:../openprd",
|
||||
"@logicsrc/plugin-agentbbs": "file:../../plugins/agentbbs",
|
||||
"@logicsrc/plugin-coinpay": "file:../../plugins/coinpay",
|
||||
"@logicsrc/plugin-core": "file:../plugin-core",
|
||||
"@logicsrc/plugin-credential-sharing": "file:../../plugins/credential-sharing",
|
||||
|
|
@ -7869,6 +7875,16 @@
|
|||
"vitest": "^4.0.8"
|
||||
}
|
||||
},
|
||||
"plugins/agentbbs": {
|
||||
"name": "@logicsrc/plugin-agentbbs",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"@logicsrc/plugin-core": "file:../../packages/plugin-core"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitest": "^4.0.8"
|
||||
}
|
||||
},
|
||||
"plugins/agentgit": {
|
||||
"name": "@logicsrc/plugin-agentgit",
|
||||
"version": "0.1.0",
|
||||
|
|
|
|||
|
|
@ -12,14 +12,14 @@
|
|||
"apps/*"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "npm --workspace @logicsrc/schemas run build && npm --workspace @logicsrc/validators run build && npm --workspace @logicsrc/sdk run build && npm --workspace @logicsrc/agentad run build && npm --workspace @logicsrc/ans run build && npm --workspace @logicsrc/plugin-core run build && npm --workspace @logicsrc/agentstack run build && npm --workspace @logicsrc/agentswarm run build && npm --workspace @logicsrc/account-core run build && npm --workspace @logicsrc/plugin-coinpay run build && npm --workspace @logicsrc/plugin-ugig run build && npm --workspace @logicsrc/plugin-sh1pt run build && npm --workspace @logicsrc/plugin-c0mpute run build && npm --workspace @logicsrc/plugin-feed-discovery run build && npm --workspace @logicsrc/plugin-social-accounts run build && npm --workspace @logicsrc/plugin-email-accounts run build && npm --workspace @logicsrc/plugin-agentgit run build && npm --workspace @logicsrc/plugin-agentmail run build && npm --workspace @logicsrc/plugin-credential-sharing run build && npm --workspace @logicsrc/openontology run build && npm --workspace @logicsrc/openprd run build && npm --workspace @logicsrc/tui run build && npm --workspace @logicsrc/cli run build && npm --workspace @profullstack/logicsrc-mcp run build && npm --workspace @logicsrc/commandboard-api run build && npm --workspace @logicsrc/commandboard-web run build && npm --workspace @logicsrc/web run build",
|
||||
"build": "npm --workspace @logicsrc/schemas run build && npm --workspace @logicsrc/validators run build && npm --workspace @logicsrc/sdk run build && npm --workspace @logicsrc/agentad run build && npm --workspace @logicsrc/ans run build && npm --workspace @logicsrc/plugin-core run build && npm --workspace @logicsrc/agentstack run build && npm --workspace @logicsrc/agentswarm run build && npm --workspace @logicsrc/account-core run build && npm --workspace @logicsrc/plugin-coinpay run build && npm --workspace @logicsrc/plugin-ugig run build && npm --workspace @logicsrc/plugin-sh1pt run build && npm --workspace @logicsrc/plugin-c0mpute run build && npm --workspace @logicsrc/plugin-feed-discovery run build && npm --workspace @logicsrc/plugin-social-accounts run build && npm --workspace @logicsrc/plugin-email-accounts run build && npm --workspace @logicsrc/plugin-agentbbs run build && npm --workspace @logicsrc/plugin-agentgit run build && npm --workspace @logicsrc/plugin-agentmail run build && npm --workspace @logicsrc/plugin-credential-sharing run build && npm --workspace @logicsrc/openontology run build && npm --workspace @logicsrc/openprd run build && npm --workspace @logicsrc/tui run build && npm --workspace @logicsrc/cli run build && npm --workspace @profullstack/logicsrc-mcp run build && npm --workspace @logicsrc/commandboard-api run build && npm --workspace @logicsrc/commandboard-web run build && npm --workspace @logicsrc/web run build",
|
||||
"start": "npm --workspace @logicsrc/web run start",
|
||||
"test": "npm run test --workspaces --if-present",
|
||||
"check": "npm run build && npm run test",
|
||||
"schemas:validate": "npm --workspace @logicsrc/validators run validate:fixtures",
|
||||
"test:contract": "npm --workspace @logicsrc/commandboard-api run test:contract && npm --workspace @logicsrc/web run test:contract",
|
||||
"test:e2e": "npm --workspace @logicsrc/commandboard-web run test:e2e && npm --workspace @logicsrc/web run test:e2e",
|
||||
"build:cli": "npm --workspace @logicsrc/schemas run build && npm --workspace @logicsrc/validators run build && npm --workspace @logicsrc/plugin-core run build && npm --workspace @logicsrc/account-core run build && npm --workspace @logicsrc/plugin-coinpay run build && npm --workspace @logicsrc/plugin-ugig run build && npm --workspace @logicsrc/plugin-feed-discovery run build && npm --workspace @logicsrc/plugin-social-accounts run build && npm --workspace @logicsrc/plugin-email-accounts run build && npm --workspace @logicsrc/plugin-credential-sharing run build && npm --workspace @logicsrc/openontology run build && npm --workspace @logicsrc/openprd run build && npm --workspace @logicsrc/tui run build && npm --workspace @logicsrc/cli run build"
|
||||
"build:cli": "npm --workspace @logicsrc/schemas run build && npm --workspace @logicsrc/validators run build && npm --workspace @logicsrc/plugin-core run build && npm --workspace @logicsrc/account-core run build && npm --workspace @logicsrc/plugin-coinpay run build && npm --workspace @logicsrc/plugin-ugig run build && npm --workspace @logicsrc/plugin-feed-discovery run build && npm --workspace @logicsrc/plugin-social-accounts run build && npm --workspace @logicsrc/plugin-email-accounts run build && npm --workspace @logicsrc/plugin-agentbbs run build && npm --workspace @logicsrc/plugin-credential-sharing run build && npm --workspace @logicsrc/openontology run build && npm --workspace @logicsrc/openprd run build && npm --workspace @logicsrc/tui run build && npm --workspace @logicsrc/cli run build"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.10.1",
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
"@logicsrc/account-core": "file:../account-core",
|
||||
"@logicsrc/openontology": "file:../openontology",
|
||||
"@logicsrc/openprd": "file:../openprd",
|
||||
"@logicsrc/plugin-agentbbs": "file:../../plugins/agentbbs",
|
||||
"@logicsrc/plugin-coinpay": "file:../../plugins/coinpay",
|
||||
"@logicsrc/plugin-core": "file:../plugin-core",
|
||||
"@logicsrc/plugin-credential-sharing": "file:../../plugins/credential-sharing",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { createPluginRegistry } from "@logicsrc/plugin-core";
|
||||
import { agentBbsPlugin } from "@logicsrc/plugin-agentbbs";
|
||||
import { coinPayPlugin } from "@logicsrc/plugin-coinpay";
|
||||
import { credentialSharingPlugin } from "@logicsrc/plugin-credential-sharing";
|
||||
import { emailAccountsPlugin } from "@logicsrc/plugin-email-accounts";
|
||||
|
|
@ -7,5 +8,5 @@ import { socialAccountsPlugin } from "@logicsrc/plugin-social-accounts";
|
|||
import { uGigPlugin } from "@logicsrc/plugin-ugig";
|
||||
|
||||
export function defaultPluginRegistry() {
|
||||
return createPluginRegistry([coinPayPlugin, uGigPlugin, feedDiscoveryPlugin, socialAccountsPlugin, emailAccountsPlugin, credentialSharingPlugin]);
|
||||
return createPluginRegistry([coinPayPlugin, uGigPlugin, feedDiscoveryPlugin, socialAccountsPlugin, emailAccountsPlugin, credentialSharingPlugin, agentBbsPlugin]);
|
||||
}
|
||||
|
|
|
|||
22
plugins/agentbbs/README.md
Normal file
22
plugins/agentbbs/README.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# @logicsrc/plugin-agentbbs
|
||||
|
||||
Connector plugin for [AgentBBS](https://github.com/profullstack/agentbbs), the BBS-over-SSH platform for humans and agents (chat, pods, arcade, finger presence, ASCII video).
|
||||
|
||||
The plugin declares the AgentBBS capability surface for the LogicSRC registry. It targets a running AgentBBS instance over SSH — it does not embed the Go server.
|
||||
|
||||
## Capabilities
|
||||
|
||||
- `bbs.status` — instance reachability and motd
|
||||
- `chat.read` / `chat.send` — agent@ shared chat rooms
|
||||
- `pods.list` / `pods.provision` / `pods.membership` — pod@ hosting, CoinPay $1/mo membership
|
||||
- `arcade.list` — arcade games (DOOM et al.)
|
||||
- `ascii.stream` — ascii-live video streams
|
||||
- `finger.lookup` — finger@ user presence
|
||||
|
||||
## Configuration
|
||||
|
||||
| Env var | Purpose |
|
||||
| --- | --- |
|
||||
| `AGENTBBS_SSH_HOST` | AgentBBS host (e.g. `bbs.profullstack.com`) |
|
||||
| `AGENTBBS_SSH_PORT` | SSH port (default `22`) |
|
||||
| `AGENTBBS_SSH_KEY_PATH` | Identity key used to authenticate as the agent |
|
||||
18
plugins/agentbbs/package.json
Normal file
18
plugins/agentbbs/package.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "@logicsrc/plugin-agentbbs",
|
||||
"version": "0.1.0",
|
||||
"description": "AgentBBS connector plugin: BBS-over-SSH chat, pods, arcade, and finger presence.",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.json",
|
||||
"test": "vitest run src --passWithNoTests"
|
||||
},
|
||||
"dependencies": {
|
||||
"@logicsrc/plugin-core": "file:../../packages/plugin-core"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitest": "^4.0.8"
|
||||
}
|
||||
}
|
||||
11
plugins/agentbbs/src/index.test.ts
Normal file
11
plugins/agentbbs/src/index.test.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import { describe, expect, it } from "vitest";
|
||||
import { createPluginRegistry } from "@logicsrc/plugin-core";
|
||||
import { agentBbsPlugin } from "./index.js";
|
||||
|
||||
describe("agentbbs plugin", () => {
|
||||
it("registers with a valid manifest", () => {
|
||||
const registry = createPluginRegistry([agentBbsPlugin]);
|
||||
expect(registry.get("agentbbs")?.enabled).toBe(true);
|
||||
expect(registry.snapshot().capabilities["pods.provision"]).toEqual(["agentbbs"]);
|
||||
});
|
||||
});
|
||||
27
plugins/agentbbs/src/index.ts
Normal file
27
plugins/agentbbs/src/index.ts
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import type { PluginDefinition } from "@logicsrc/plugin-core";
|
||||
import { agentBbsManifest } from "./manifest.js";
|
||||
|
||||
export const agentBbsPlugin: PluginDefinition = {
|
||||
manifest: agentBbsManifest,
|
||||
configDefaults: {
|
||||
enabled: true,
|
||||
ssh_host: "${AGENTBBS_SSH_HOST}",
|
||||
ssh_port: "${AGENTBBS_SSH_PORT}",
|
||||
ssh_key_path: "${AGENTBBS_SSH_KEY_PATH}",
|
||||
default_route: "bbs"
|
||||
},
|
||||
routes: [
|
||||
{ method: "GET", path: "/api/plugins/agentbbs/status", capability: "bbs.status" },
|
||||
{ method: "GET", path: "/api/plugins/agentbbs/chat", capability: "chat.read" },
|
||||
{ method: "POST", path: "/api/plugins/agentbbs/chat", capability: "chat.send" },
|
||||
{ method: "GET", path: "/api/plugins/agentbbs/pods", capability: "pods.list" },
|
||||
{ method: "POST", path: "/api/plugins/agentbbs/pods", capability: "pods.provision" },
|
||||
{ method: "GET", path: "/api/plugins/agentbbs/arcade", capability: "arcade.list" },
|
||||
{ method: "GET", path: "/api/plugins/agentbbs/finger/:user", capability: "finger.lookup" }
|
||||
],
|
||||
events: [{ event: "payment.confirmed", capability: "pods.membership" }],
|
||||
permissions: ["bbs:read", "chat:send", "pods:provision"],
|
||||
tuiPanels: [{ id: "agentbbs-status", title: "AgentBBS" }]
|
||||
};
|
||||
|
||||
export { agentBbsManifest };
|
||||
22
plugins/agentbbs/src/manifest.ts
Normal file
22
plugins/agentbbs/src/manifest.ts
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import type { PluginManifest } from "@logicsrc/plugin-core";
|
||||
|
||||
export const agentBbsManifest: PluginManifest = {
|
||||
id: "agentbbs",
|
||||
name: "AgentBBS",
|
||||
version: "1.0.0",
|
||||
type: ["community", "chat", "hosting"],
|
||||
default: false,
|
||||
capabilities: [
|
||||
"bbs.status",
|
||||
"chat.send",
|
||||
"chat.read",
|
||||
"pods.list",
|
||||
"pods.provision",
|
||||
"pods.membership",
|
||||
"arcade.list",
|
||||
"ascii.stream",
|
||||
"finger.lookup"
|
||||
],
|
||||
commands: ["bbs", "pod", "arcade"],
|
||||
env: ["AGENTBBS_SSH_HOST", "AGENTBBS_SSH_PORT", "AGENTBBS_SSH_KEY_PATH"]
|
||||
};
|
||||
8
plugins/agentbbs/tsconfig.json
Normal file
8
plugins/agentbbs/tsconfig.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": "src",
|
||||
"outDir": "dist"
|
||||
},
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue