Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/commandboard-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion apps/commandboard-api/src/contract.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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"])
Expand Down
3 changes: 2 additions & 1 deletion apps/commandboard-api/src/index.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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." },
Expand Down
16 changes: 16 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
3 changes: 2 additions & 1 deletion packages/cli/src/registry.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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 changes: 22 additions & 0 deletions plugins/agentbbs/README.md
Original file line number Diff line number Diff line change
@@ -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 changes: 18 additions & 0 deletions plugins/agentbbs/package.json
Original file line number Diff line number Diff line change
@@ -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 changes: 11 additions & 0 deletions plugins/agentbbs/src/index.test.ts
Original file line number Diff line number Diff line change
@@ -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 changes: 27 additions & 0 deletions plugins/agentbbs/src/index.ts
Original file line number Diff line number Diff line change
@@ -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 changes: 22 additions & 0 deletions plugins/agentbbs/src/manifest.ts
Original file line number Diff line number Diff line change
@@ -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 changes: 8 additions & 0 deletions plugins/agentbbs/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "dist"
},
"include": ["src/**/*.ts"]
}
Loading