@rubytech/create-maxy 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +428 -0
- package/package.json +31 -0
- package/payload/maxy/.env.example +12 -0
- package/payload/maxy/app/admin/components/ActivityTimeline.tsx +348 -0
- package/payload/maxy/app/admin/components/MarkdownMessage.tsx +40 -0
- package/payload/maxy/app/api/admin/chat/route.ts +72 -0
- package/payload/maxy/app/api/admin/logs/route.ts +40 -0
- package/payload/maxy/app/api/admin/session/route.ts +74 -0
- package/payload/maxy/app/api/chat/route.ts +72 -0
- package/payload/maxy/app/api/health/route.ts +26 -0
- package/payload/maxy/app/api/onboarding/claude-auth/route.ts +216 -0
- package/payload/maxy/app/api/onboarding/set-pin/route.ts +44 -0
- package/payload/maxy/app/api/session/route.ts +51 -0
- package/payload/maxy/app/api/telegram/webhook/route.ts +107 -0
- package/payload/maxy/app/apple-icon.png +0 -0
- package/payload/maxy/app/bot/page.tsx +373 -0
- package/payload/maxy/app/favicon.ico +0 -0
- package/payload/maxy/app/globals.css +1681 -0
- package/payload/maxy/app/layout.tsx +58 -0
- package/payload/maxy/app/lib/claude-agent.ts +503 -0
- package/payload/maxy/app/og/layout.tsx +15 -0
- package/payload/maxy/app/og/page.tsx +252 -0
- package/payload/maxy/app/page.tsx +594 -0
- package/payload/maxy/app/privacy/page.tsx +72 -0
- package/payload/maxy/app/public/page.tsx +266 -0
- package/payload/maxy/next.config.mjs +26 -0
- package/payload/maxy/package-lock.json +2198 -0
- package/payload/maxy/package.json +25 -0
- package/payload/maxy/proxy.ts +41 -0
- package/payload/maxy/public/brand/claude.png +0 -0
- package/payload/maxy/public/brand/maxy-black.png +0 -0
- package/payload/maxy/public/brand/maxy.png +0 -0
- package/payload/maxy/public/favicon.ico +0 -0
- package/payload/maxy/public/og-landscape.png +0 -0
- package/payload/maxy/public/og-portrait.png +0 -0
- package/payload/maxy/public/og-square.png +0 -0
- package/payload/maxy/public/pi-5.jpg +0 -0
- package/payload/maxy/public/robots.txt +5 -0
- package/payload/maxy/tsconfig.json +41 -0
- package/payload/maxy/tsconfig.tsbuildinfo +1 -0
- package/payload/maxy/ui.md +28 -0
- package/payload/platform/config/cloudflared.yml +17 -0
- package/payload/platform/knowledge/maxy.md +161 -0
- package/payload/platform/neo4j/schema.cypher +108 -0
- package/payload/platform/package-lock.json +1835 -0
- package/payload/platform/package.json +17 -0
- package/payload/platform/plugins/admin/PLUGIN.md +24 -0
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +56 -0
- package/payload/platform/plugins/admin/hooks/session-start.sh +20 -0
- package/payload/platform/plugins/admin/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +149 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/package.json +18 -0
- package/payload/platform/plugins/anthropic/PLUGIN.md +30 -0
- package/payload/platform/plugins/anthropic/references/setup-guide.md +146 -0
- package/payload/platform/plugins/business-assistant/PLUGIN.md +46 -0
- package/payload/platform/plugins/business-assistant/references/crm.md +112 -0
- package/payload/platform/plugins/business-assistant/references/document-management.md +96 -0
- package/payload/platform/plugins/business-assistant/references/escalation.md +126 -0
- package/payload/platform/plugins/business-assistant/references/invoicing.md +163 -0
- package/payload/platform/plugins/business-assistant/references/quoting.md +56 -0
- package/payload/platform/plugins/business-assistant/references/scheduling.md +127 -0
- package/payload/platform/plugins/cloudflare/PLUGIN.md +31 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +174 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +45 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +256 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/package.json +18 -0
- package/payload/platform/plugins/cloudflare/references/setup-guide.md +110 -0
- package/payload/platform/plugins/contacts/PLUGIN.md +18 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.js +182 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +34 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +19 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +68 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts +22 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js +46 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +20 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +56 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts +13 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js +54 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/package.json +19 -0
- package/payload/platform/plugins/documents/PLUGIN.md +12 -0
- package/payload/platform/plugins/documents/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/documents/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/documents/mcp/dist/index.js +82 -0
- package/payload/platform/plugins/documents/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/documents/mcp/package.json +20 -0
- package/payload/platform/plugins/memory/PLUGIN.md +17 -0
- package/payload/platform/plugins/memory/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js +164 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js +29 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +34 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts +8 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +71 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts +24 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +125 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +18 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +56 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/package.json +19 -0
- package/payload/platform/plugins/sales/PLUGIN.md +65 -0
- package/payload/platform/plugins/sales/references/close-tracking.md +76 -0
- package/payload/platform/plugins/sales/references/closing-framework.md +108 -0
- package/payload/platform/plugins/sales/references/comparisons.md +99 -0
- package/payload/platform/plugins/sales/references/competitive-positioning.md +51 -0
- package/payload/platform/plugins/sales/references/faq.md +62 -0
- package/payload/platform/plugins/sales/references/objection-handling.md +157 -0
- package/payload/platform/plugins/sales/references/pricing.md +71 -0
- package/payload/platform/plugins/sales/references/waitlist.md +23 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +12 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +13 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/package.json +18 -0
- package/payload/platform/plugins/telegram/PLUGIN.md +31 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js +101 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts +27 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js +41 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts +16 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +62 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts +20 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/package.json +19 -0
- package/payload/platform/plugins/telegram/references/setup-guide.md +50 -0
- package/payload/platform/plugins/web/PLUGIN.md +12 -0
- package/payload/platform/plugins/web/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/web/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/web/mcp/dist/index.js +12 -0
- package/payload/platform/plugins/web/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/web/mcp/package.json +18 -0
- package/payload/platform/scripts/seed-neo4j.sh +73 -0
- package/payload/platform/scripts/setup.sh +177 -0
- package/payload/platform/scripts/start.sh +62 -0
- package/payload/platform/templates/account.json +4 -0
- package/payload/platform/templates/agents/admin/IDENTITY.md +28 -0
- package/payload/platform/templates/agents/admin/SOUL.md +1 -0
- package/payload/platform/templates/agents/public/IDENTITY.md +21 -0
- package/payload/platform/templates/agents/public/SOUL.md +1 -0
- package/payload/platform/tsconfig.base.json +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;IAC/C,cAAc,CAAC,EAAE,KAAK,CACpB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAC7D,CAAC;CACH;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAoC3E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { sendMessage } from "../lib/telegram.js";
|
|
2
|
+
export async function message(params) {
|
|
3
|
+
const botToken = process.env.TELEGRAM_PUBLIC_BOT_TOKEN;
|
|
4
|
+
if (!botToken) {
|
|
5
|
+
return {
|
|
6
|
+
sent: false,
|
|
7
|
+
channel: params.channel,
|
|
8
|
+
error: "TELEGRAM_PUBLIC_BOT_TOKEN not configured",
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
let replyMarkup;
|
|
12
|
+
if (params.inlineKeyboard) {
|
|
13
|
+
replyMarkup = {
|
|
14
|
+
inline_keyboard: params.inlineKeyboard.map((row) => row.map((btn) => ({
|
|
15
|
+
text: btn.text,
|
|
16
|
+
callback_data: btn.callbackData,
|
|
17
|
+
url: btn.url,
|
|
18
|
+
}))),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const result = await sendMessage(botToken, {
|
|
22
|
+
chatId: params.chatId,
|
|
23
|
+
text: params.text,
|
|
24
|
+
parseMode: params.parseMode,
|
|
25
|
+
replyMarkup,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
sent: result.ok,
|
|
29
|
+
channel: "telegram",
|
|
30
|
+
messageId: result.messageId,
|
|
31
|
+
error: result.error,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/tools/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA+B,MAAM,oBAAoB,CAAC;AAmB9E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAqB;IACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,0CAA0C;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,WAA+C,CAAC;IACpD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,WAAW,GAAG;YACZ,eAAe,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjD,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,aAAa,EAAE,GAAG,CAAC,YAAY;gBAC/B,GAAG,EAAE,GAAG,CAAC,GAAG;aACb,CAAC,CAAC,CACJ;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE;QACzC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,EAAE;QACf,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@maxy/messaging",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"start": "node dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
13
|
+
"neo4j-driver": "^5.28.1"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"typescript": "^5.7.0",
|
|
17
|
+
"@types/node": "^22.0.0"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Telegram Setup Guide
|
|
2
|
+
|
|
3
|
+
## Creating a Bot
|
|
4
|
+
|
|
5
|
+
1. Open Telegram and search for **@BotFather**
|
|
6
|
+
2. Start a chat and send `/newbot`
|
|
7
|
+
3. Follow the prompts — choose a display name and a username (must end in `bot`)
|
|
8
|
+
4. BotFather replies with a **bot token** (a long string like `123456:ABC-DEF...`)
|
|
9
|
+
5. Copy the token — you'll paste it into Taskmaster's Setup page
|
|
10
|
+
|
|
11
|
+
## Connecting the Bot to Taskmaster
|
|
12
|
+
|
|
13
|
+
1. Open the Taskmaster control panel (Setup page)
|
|
14
|
+
2. Find the **Telegram** row and click **Connect** (or open settings if already connected)
|
|
15
|
+
3. Paste the bot token from BotFather
|
|
16
|
+
4. The system probes the token to verify it — you'll see the bot's username confirmed
|
|
17
|
+
5. Choose whether this is an **admin bot** or a **public bot** (see below)
|
|
18
|
+
6. If it's a public bot, choose a DM policy (who can message it)
|
|
19
|
+
7. Click **Save & Connect**
|
|
20
|
+
|
|
21
|
+
## Admin Bot vs Public Bot
|
|
22
|
+
|
|
23
|
+
Each Telegram bot has an **Admin routing** toggle:
|
|
24
|
+
|
|
25
|
+
- **Admin bot** (toggle ON): Only users with admin bindings can message this bot. Everyone else is silently denied. Messages route to the admin agent. No DM policy applies — it's admin-only by design.
|
|
26
|
+
- **Public bot** (toggle OFF): DM policy applies to everyone equally, including admins. Messages route to the public agent. Use this for customer-facing bots.
|
|
27
|
+
|
|
28
|
+
A common setup is two bots: one admin bot for the business owner, one public bot for customers.
|
|
29
|
+
|
|
30
|
+
## Finding Your Telegram User ID
|
|
31
|
+
|
|
32
|
+
Admin bindings require your **numeric Telegram user ID** — not your username. Usernames can be changed or claimed by someone else, so they are not safe for admin access.
|
|
33
|
+
|
|
34
|
+
To find your user ID:
|
|
35
|
+
|
|
36
|
+
1. Open Telegram and search for **@userinfobot**
|
|
37
|
+
2. Start the chat and send `/start`
|
|
38
|
+
3. The bot instantly replies with your numeric ID (e.g. `123456789`), plus your name and language
|
|
39
|
+
4. Use this numeric ID when setting up admin bindings
|
|
40
|
+
|
|
41
|
+
## DM Policy Options (Public Bots Only)
|
|
42
|
+
|
|
43
|
+
| Policy | Behaviour |
|
|
44
|
+
|--------|-----------|
|
|
45
|
+
| **Respond to everyone** | Any Telegram user can message the bot and get a response |
|
|
46
|
+
| **Require approval** | Unknown senders receive a pairing code; an admin must approve them |
|
|
47
|
+
| **Whitelist only** | Only users in the allowlist can message the bot |
|
|
48
|
+
| **Disabled** | The bot ignores all DMs |
|
|
49
|
+
|
|
50
|
+
"Require approval" (pairing) is the default and recommended for most setups — it lets you control who talks to the bot without pre-configuring an allowlist.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
const server = new McpServer({
|
|
5
|
+
name: "maxy-web",
|
|
6
|
+
version: "0.1.0",
|
|
7
|
+
});
|
|
8
|
+
server.tool("web-search", "Search the web using multiple providers (Tavily, Brave, Perplexity)", { query: z.string(), provider: z.enum(["tavily", "brave", "perplexity"]).optional() }, async () => ({ content: [{ type: "text", text: "Web search is not available in Phase 0. This capability will be added in Phase 1." }] }));
|
|
9
|
+
server.tool("web-fetch", "Fetch and extract content from a URL", { url: z.string() }, async () => ({ content: [{ type: "text", text: "Web fetching is not available in Phase 0. This capability will be added in Phase 1." }] }));
|
|
10
|
+
const transport = new StdioServerTransport();
|
|
11
|
+
await server.connect(transport);
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,qEAAqE,EACrE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,EACrF,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mFAAmF,EAAE,CAAC,EAAE,CAAC,CAClJ,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,sCAAsC,EACtC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EACnB,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qFAAqF,EAAE,CAAC,EAAE,CAAC,CACpJ,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@maxy/web",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"start": "node dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"typescript": "^5.7.0",
|
|
16
|
+
"@types/node": "^22.0.0"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ============================================================
|
|
3
|
+
# seed-neo4j.sh — Phase 0 setup
|
|
4
|
+
# Creates the account from templates and applies Neo4j schema.
|
|
5
|
+
# Product knowledge is ingested post-installation via the admin
|
|
6
|
+
# agent, not seeded as cypher.
|
|
7
|
+
# ============================================================
|
|
8
|
+
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
|
|
11
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
+
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
13
|
+
TEMPLATES_DIR="$PROJECT_DIR/templates"
|
|
14
|
+
ACCOUNTS_DIR="$PROJECT_DIR/config/accounts"
|
|
15
|
+
NEO4J_DIR="$PROJECT_DIR/neo4j"
|
|
16
|
+
|
|
17
|
+
NEO4J_URI="${NEO4J_URI:-bolt://localhost:7687}"
|
|
18
|
+
NEO4J_USER="${NEO4J_USER:-neo4j}"
|
|
19
|
+
|
|
20
|
+
# Read password from the file created during setup
|
|
21
|
+
NEO4J_PASSWORD_FILE="$PROJECT_DIR/config/.neo4j-password"
|
|
22
|
+
if [ -n "${NEO4J_PASSWORD:-}" ]; then
|
|
23
|
+
: # Explicit env var takes precedence
|
|
24
|
+
elif [ -f "$NEO4J_PASSWORD_FILE" ]; then
|
|
25
|
+
NEO4J_PASSWORD=$(cat "$NEO4J_PASSWORD_FILE")
|
|
26
|
+
else
|
|
27
|
+
echo "Error: Neo4j password not found."
|
|
28
|
+
echo " Expected at: $NEO4J_PASSWORD_FILE"
|
|
29
|
+
echo " Or set NEO4J_PASSWORD environment variable."
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
CYPHER_SHELL="cypher-shell"
|
|
34
|
+
|
|
35
|
+
# ------------------------------------------------------------------
|
|
36
|
+
# 1. Create Phase 0 account from templates
|
|
37
|
+
# ------------------------------------------------------------------
|
|
38
|
+
ACCOUNT_ID="phase0-maxy"
|
|
39
|
+
ACCOUNT_DIR="$ACCOUNTS_DIR/$ACCOUNT_ID"
|
|
40
|
+
|
|
41
|
+
# Create account directory if it doesn't exist
|
|
42
|
+
mkdir -p "$ACCOUNT_DIR/agents/admin" "$ACCOUNT_DIR/agents/public"
|
|
43
|
+
|
|
44
|
+
# Always overwrite IDENTITY.md — Rubytech-controlled, pure behaviour.
|
|
45
|
+
cp "$TEMPLATES_DIR/agents/admin/IDENTITY.md" "$ACCOUNT_DIR/agents/admin/IDENTITY.md"
|
|
46
|
+
cp "$TEMPLATES_DIR/agents/public/IDENTITY.md" "$ACCOUNT_DIR/agents/public/IDENTITY.md"
|
|
47
|
+
|
|
48
|
+
# SOUL.md — user-controlled personalisation. Only create if missing. Never overwrite.
|
|
49
|
+
[ -f "$ACCOUNT_DIR/agents/admin/SOUL.md" ] || cp "$TEMPLATES_DIR/agents/admin/SOUL.md" "$ACCOUNT_DIR/agents/admin/SOUL.md"
|
|
50
|
+
[ -f "$ACCOUNT_DIR/agents/public/SOUL.md" ] || cp "$TEMPLATES_DIR/agents/public/SOUL.md" "$ACCOUNT_DIR/agents/public/SOUL.md"
|
|
51
|
+
|
|
52
|
+
# Create account.json only if it doesn't exist (business config is in the graph)
|
|
53
|
+
if [ ! -f "$ACCOUNT_DIR/account.json" ]; then
|
|
54
|
+
echo '{"accountId":"phase0-maxy","tier":"solo"}' > "$ACCOUNT_DIR/account.json"
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
echo " Account at $ACCOUNT_DIR"
|
|
58
|
+
|
|
59
|
+
# ------------------------------------------------------------------
|
|
60
|
+
# 2. Apply Neo4j schema (constraints + indexes only)
|
|
61
|
+
# ------------------------------------------------------------------
|
|
62
|
+
if ! command -v "$CYPHER_SHELL" &> /dev/null; then
|
|
63
|
+
echo "Error: cypher-shell not found. Install Neo4j or add cypher-shell to PATH."
|
|
64
|
+
exit 1
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
echo "==> Connecting to Neo4j at $NEO4J_URI as $NEO4J_USER"
|
|
68
|
+
|
|
69
|
+
echo "==> Applying schema (constraints, indexes, vector indexes)..."
|
|
70
|
+
"$CYPHER_SHELL" -u "$NEO4J_USER" -p "$NEO4J_PASSWORD" -a "$NEO4J_URI" \
|
|
71
|
+
-f "$NEO4J_DIR/schema.cypher"
|
|
72
|
+
|
|
73
|
+
echo " Done."
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Maxy Phase 0 — Pi Setup Script
|
|
3
|
+
# Run on a fresh Raspberry Pi 5 (16GB) with Raspberry Pi OS (64-bit)
|
|
4
|
+
#
|
|
5
|
+
# Usage: curl -fsSL https://raw.githubusercontent.com/aeon-neo/getmaxy/main/platform/scripts/setup.sh | bash
|
|
6
|
+
# or: git clone git@github.com:aeon-neo/getmaxy.git && cd getmaxy && bash platform/scripts/setup.sh
|
|
7
|
+
|
|
8
|
+
set -euo pipefail
|
|
9
|
+
|
|
10
|
+
REPO_URL="https://github.com/aeon-neo/getmaxy.git"
|
|
11
|
+
INSTALL_DIR="$HOME/maxy"
|
|
12
|
+
|
|
13
|
+
echo "================================================================"
|
|
14
|
+
echo " Maxy Phase 0 — Setup"
|
|
15
|
+
echo " AI for Productive People."
|
|
16
|
+
echo "================================================================"
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
# ------------------------------------------------------------------
|
|
20
|
+
# 1. System dependencies + hostname + Avahi (mDNS)
|
|
21
|
+
# ------------------------------------------------------------------
|
|
22
|
+
echo "[1/8] Updating system packages and configuring network..."
|
|
23
|
+
sudo apt-get update -qq
|
|
24
|
+
sudo apt-get install -y -qq curl git unzip avahi-daemon avahi-utils
|
|
25
|
+
|
|
26
|
+
# Set hostname to 'maxy' so device is reachable at maxy.local
|
|
27
|
+
CURRENT_HOSTNAME=$(hostname)
|
|
28
|
+
if [ "$CURRENT_HOSTNAME" != "maxy" ]; then
|
|
29
|
+
echo " Setting hostname to 'maxy' (was '$CURRENT_HOSTNAME')..."
|
|
30
|
+
sudo hostnamectl set-hostname maxy
|
|
31
|
+
# Update /etc/hosts
|
|
32
|
+
sudo sed -i "s/127\.0\.1\.1.*$/127.0.1.1\tmaxy/" /etc/hosts
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Create Avahi service file for LAN discovery
|
|
36
|
+
sudo tee /etc/avahi/services/maxy.service > /dev/null <<AVAHI
|
|
37
|
+
<?xml version="1.0" standalone='no'?>
|
|
38
|
+
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
|
39
|
+
<service-group>
|
|
40
|
+
<name replace-wildcards="yes">Maxy on %h</name>
|
|
41
|
+
<service>
|
|
42
|
+
<type>_http._tcp</type>
|
|
43
|
+
<port>19200</port>
|
|
44
|
+
<txt-record>role=maxy</txt-record>
|
|
45
|
+
<txt-record>path=/</txt-record>
|
|
46
|
+
</service>
|
|
47
|
+
</service-group>
|
|
48
|
+
AVAHI
|
|
49
|
+
|
|
50
|
+
# Ensure Avahi is running
|
|
51
|
+
sudo systemctl enable avahi-daemon
|
|
52
|
+
sudo systemctl restart avahi-daemon
|
|
53
|
+
echo " Device reachable at http://maxy.local:19200"
|
|
54
|
+
|
|
55
|
+
# ------------------------------------------------------------------
|
|
56
|
+
# 2. Node.js 20+
|
|
57
|
+
# ------------------------------------------------------------------
|
|
58
|
+
if command -v node &>/dev/null && [[ "$(node -v | cut -d. -f1 | tr -d v)" -ge 20 ]]; then
|
|
59
|
+
echo "[2/8] Node.js $(node -v) already installed."
|
|
60
|
+
else
|
|
61
|
+
echo "[2/8] Installing Node.js 22..."
|
|
62
|
+
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
|
|
63
|
+
sudo apt-get install -y -qq nodejs
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# ------------------------------------------------------------------
|
|
67
|
+
# 3. Neo4j Community Edition 5.x
|
|
68
|
+
# ------------------------------------------------------------------
|
|
69
|
+
if command -v neo4j &>/dev/null; then
|
|
70
|
+
echo "[3/8] Neo4j already installed."
|
|
71
|
+
else
|
|
72
|
+
echo "[3/8] Installing Neo4j Community Edition 5..."
|
|
73
|
+
|
|
74
|
+
# Neo4j 5.x requires Java 17+
|
|
75
|
+
if ! java -version 2>&1 | grep -q '"17\.\|"21\.\|"22\.\|"23\.'; then
|
|
76
|
+
echo " Installing OpenJDK 17..."
|
|
77
|
+
sudo apt-get install -y -qq openjdk-17-jre-headless
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
# Add Neo4j repository
|
|
81
|
+
curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | sudo gpg --yes --dearmor -o /usr/share/keyrings/neo4j.gpg 2>/dev/null
|
|
82
|
+
echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 5" | sudo tee /etc/apt/sources.list.d/neo4j.list
|
|
83
|
+
sudo apt-get update -qq
|
|
84
|
+
sudo apt-get install -y -qq neo4j
|
|
85
|
+
|
|
86
|
+
# Configure Neo4j for local use
|
|
87
|
+
sudo sed -i 's/#server.default_listen_address=0.0.0.0/server.default_listen_address=127.0.0.1/' /etc/neo4j/neo4j.conf
|
|
88
|
+
|
|
89
|
+
# Generate a strong random password and store it
|
|
90
|
+
NEO4J_GENERATED_PASSWORD=$(openssl rand -base64 32 | tr -d '/+=' | head -c 32)
|
|
91
|
+
mkdir -p "$INSTALL_DIR/platform/config"
|
|
92
|
+
echo "$NEO4J_GENERATED_PASSWORD" > "$INSTALL_DIR/platform/config/.neo4j-password"
|
|
93
|
+
chmod 600 "$INSTALL_DIR/platform/config/.neo4j-password"
|
|
94
|
+
sudo neo4j-admin dbms set-initial-password "$NEO4J_GENERATED_PASSWORD"
|
|
95
|
+
|
|
96
|
+
# Start and enable
|
|
97
|
+
sudo systemctl enable neo4j
|
|
98
|
+
sudo systemctl start neo4j
|
|
99
|
+
echo " Neo4j started. Password stored in platform/config/.neo4j-password"
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
# ------------------------------------------------------------------
|
|
103
|
+
# 4. Ollama (local embeddings)
|
|
104
|
+
# ------------------------------------------------------------------
|
|
105
|
+
if command -v ollama &>/dev/null; then
|
|
106
|
+
echo "[4/8] Ollama already installed."
|
|
107
|
+
else
|
|
108
|
+
echo "[4/8] Installing Ollama..."
|
|
109
|
+
curl -fsSL https://ollama.ai/install.sh | sh
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
# Pull the embedding model
|
|
113
|
+
echo " Pulling nomic-embed-text model (~300MB)..."
|
|
114
|
+
ollama pull nomic-embed-text
|
|
115
|
+
|
|
116
|
+
# ------------------------------------------------------------------
|
|
117
|
+
# 5. Cloudflared (Cloudflare Tunnel)
|
|
118
|
+
# ------------------------------------------------------------------
|
|
119
|
+
if command -v cloudflared &>/dev/null; then
|
|
120
|
+
echo "[5/8] Cloudflared already installed."
|
|
121
|
+
else
|
|
122
|
+
echo "[5/8] Installing cloudflared..."
|
|
123
|
+
curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb -o /tmp/cloudflared.deb
|
|
124
|
+
sudo dpkg -i /tmp/cloudflared.deb
|
|
125
|
+
rm /tmp/cloudflared.deb
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
# ------------------------------------------------------------------
|
|
129
|
+
# 6. Clone or update Maxy
|
|
130
|
+
# ------------------------------------------------------------------
|
|
131
|
+
if [ -d "$INSTALL_DIR/.git" ]; then
|
|
132
|
+
echo "[6/8] Updating Maxy..."
|
|
133
|
+
cd "$INSTALL_DIR"
|
|
134
|
+
git pull --ff-only
|
|
135
|
+
else
|
|
136
|
+
echo "[6/8] Cloning Maxy..."
|
|
137
|
+
git clone "$REPO_URL" "$INSTALL_DIR"
|
|
138
|
+
cd "$INSTALL_DIR"
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
# ------------------------------------------------------------------
|
|
142
|
+
# 7. Install dependencies and build
|
|
143
|
+
# ------------------------------------------------------------------
|
|
144
|
+
echo "[7/8] Installing dependencies and building..."
|
|
145
|
+
|
|
146
|
+
# Platform MCP servers
|
|
147
|
+
cd "$INSTALL_DIR/platform"
|
|
148
|
+
npm install --quiet
|
|
149
|
+
npm run build
|
|
150
|
+
|
|
151
|
+
# Web app
|
|
152
|
+
cd "$INSTALL_DIR/maxy"
|
|
153
|
+
npm install --quiet
|
|
154
|
+
npm run build
|
|
155
|
+
|
|
156
|
+
# ------------------------------------------------------------------
|
|
157
|
+
# 8. Create account and apply schema
|
|
158
|
+
# ------------------------------------------------------------------
|
|
159
|
+
cd "$INSTALL_DIR"
|
|
160
|
+
if [ ! -f "$INSTALL_DIR/.seeded" ]; then
|
|
161
|
+
echo "[8/8] Creating account and applying schema..."
|
|
162
|
+
bash platform/scripts/seed-neo4j.sh
|
|
163
|
+
touch "$INSTALL_DIR/.seeded"
|
|
164
|
+
fi
|
|
165
|
+
|
|
166
|
+
# ------------------------------------------------------------------
|
|
167
|
+
# Done
|
|
168
|
+
# ------------------------------------------------------------------
|
|
169
|
+
echo ""
|
|
170
|
+
echo "================================================================"
|
|
171
|
+
echo " Maxy is installed."
|
|
172
|
+
echo ""
|
|
173
|
+
echo " Open in your browser:"
|
|
174
|
+
echo " http://maxy.local:19200"
|
|
175
|
+
echo ""
|
|
176
|
+
echo " Everything from here happens through conversation."
|
|
177
|
+
echo "================================================================"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Maxy Phase 0 — Start all services
|
|
3
|
+
# Usage: bash platform/scripts/start.sh
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
INSTALL_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
8
|
+
|
|
9
|
+
echo "Starting Maxy..."
|
|
10
|
+
|
|
11
|
+
# ------------------------------------------------------------------
|
|
12
|
+
# 1. Check Neo4j
|
|
13
|
+
# ------------------------------------------------------------------
|
|
14
|
+
if systemctl is-active --quiet neo4j 2>/dev/null; then
|
|
15
|
+
echo " Neo4j: running"
|
|
16
|
+
else
|
|
17
|
+
echo " Neo4j: starting..."
|
|
18
|
+
sudo systemctl start neo4j
|
|
19
|
+
sleep 3
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# ------------------------------------------------------------------
|
|
23
|
+
# 2. Check Ollama
|
|
24
|
+
# ------------------------------------------------------------------
|
|
25
|
+
if curl -sf http://localhost:11434/api/tags >/dev/null 2>&1; then
|
|
26
|
+
echo " Ollama: running"
|
|
27
|
+
else
|
|
28
|
+
echo " Ollama: starting..."
|
|
29
|
+
ollama serve &
|
|
30
|
+
sleep 2
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# ------------------------------------------------------------------
|
|
34
|
+
# 3. Start the web app on 0.0.0.0:19200
|
|
35
|
+
# ------------------------------------------------------------------
|
|
36
|
+
echo " Web app: starting on port 19200..."
|
|
37
|
+
cd "$INSTALL_DIR/maxy"
|
|
38
|
+
|
|
39
|
+
if [ -f .env.local ]; then
|
|
40
|
+
set -a
|
|
41
|
+
. .env.local
|
|
42
|
+
set +a
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
npm start &
|
|
46
|
+
WEB_PID=$!
|
|
47
|
+
|
|
48
|
+
# ------------------------------------------------------------------
|
|
49
|
+
# Ready
|
|
50
|
+
# ------------------------------------------------------------------
|
|
51
|
+
echo ""
|
|
52
|
+
echo "Maxy is running."
|
|
53
|
+
echo " Local: http://maxy.local:19200"
|
|
54
|
+
echo ""
|
|
55
|
+
echo " Everything from here happens through conversation."
|
|
56
|
+
echo " Cloudflare Tunnel, Telegram, and all configuration"
|
|
57
|
+
echo " are set up via the admin agent."
|
|
58
|
+
echo ""
|
|
59
|
+
echo "Press Ctrl+C to stop."
|
|
60
|
+
|
|
61
|
+
trap "kill $WEB_PID 2>/dev/null; exit 0" INT TERM
|
|
62
|
+
wait $WEB_PID
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Head of Operations
|
|
2
|
+
|
|
3
|
+
You are the head of operations. Not an assistant waiting for instructions — a proactive operator who drives the business forward.
|
|
4
|
+
|
|
5
|
+
At the start of every session, check the graph for business context. Your goal is to populate the graph efficiently and comprehensively to maximise value from business intelligence.
|
|
6
|
+
|
|
7
|
+
Your personalisation is in SOUL.md. Read it and apply it.
|
|
8
|
+
|
|
9
|
+
## Boundaries
|
|
10
|
+
|
|
11
|
+
- You are an AI. State this clearly if asked. Never impersonate a human.
|
|
12
|
+
- You have full access to all platform tools and systems.
|
|
13
|
+
- Professional, direct, action-oriented. Concise and precise. British English unless SOUL.md specifies otherwise.
|
|
14
|
+
- Do not use emoji characters in any response. Plain text and punctuation only.
|
|
15
|
+
|
|
16
|
+
## Behaviour
|
|
17
|
+
|
|
18
|
+
- Be proactive. Identify what needs doing and do it. Don't wait to be asked.
|
|
19
|
+
- On session start, assess the state of the business from the graph and report what needs attention.
|
|
20
|
+
- On first setup (incomplete business data in graph), immediately begin onboarding: learn the business, understand the stage, gather customer details, build a comprehensive picture so you can drive operations forward - one step at a time.
|
|
21
|
+
- Write personalisation to your own SOUL.md. Also write the public agent's personalisation to agents/public/SOUL.md.
|
|
22
|
+
- Think strategically. Help with planning, not just tasks.
|
|
23
|
+
- Surface problems before they become urgent. Recommend actions based on what you know.
|
|
24
|
+
- Store everything you learn about the business in the graph — not in files.
|
|
25
|
+
|
|
26
|
+
## Plugins
|
|
27
|
+
|
|
28
|
+
Your behaviour is defined by your loaded plugins. Follow them.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Soul
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Public Agent
|
|
2
|
+
|
|
3
|
+
You are a public-facing agent. Check the graph for business context at the start of every session.
|
|
4
|
+
|
|
5
|
+
Your personalisation is in SOUL.md. Read it and apply it.
|
|
6
|
+
SOUL.md is written and maintained by the admin agent. You cannot write it.
|
|
7
|
+
|
|
8
|
+
## Boundaries
|
|
9
|
+
|
|
10
|
+
- You are an AI assistant. State this clearly if asked. Never impersonate a human.
|
|
11
|
+
- You are completely read-only. You cannot create, modify, or delete any data.
|
|
12
|
+
- Your tools are memory-search and plugin-read. Use memory-search before every response.
|
|
13
|
+
- You answer ONLY from memory-search results. If the answer is not in the results, say you don't know.
|
|
14
|
+
- You must NEVER use your training data to answer questions. No general knowledge. No improvising.
|
|
15
|
+
- You must NEVER speak about topics outside your explicit scope. Decline all other requests.
|
|
16
|
+
- You cannot spawn subagents, access files, run commands, or browse the web.
|
|
17
|
+
- British English unless SOUL.md specifies otherwise. Conversational tone.
|
|
18
|
+
|
|
19
|
+
## Plugins
|
|
20
|
+
|
|
21
|
+
Your behaviour is defined by your loaded plugins. Follow them.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Soul
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "Node16",
|
|
5
|
+
"moduleResolution": "Node16",
|
|
6
|
+
"lib": ["ES2022"],
|
|
7
|
+
"outDir": "dist",
|
|
8
|
+
"rootDir": "src",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"resolveJsonModule": true,
|
|
14
|
+
"declaration": true,
|
|
15
|
+
"declarationMap": true,
|
|
16
|
+
"sourceMap": true
|
|
17
|
+
}
|
|
18
|
+
}
|