Skip to content

Commit 5f0c2a6

Browse files
authored
Merge pull request #261 from CambrianTech/feature/social-media-outreach
Social Media Integration + Universal Handle System
2 parents 1341420 + 4a1a765 commit 5f0c2a6

File tree

137 files changed

+18748
-1445
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+18748
-1445
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ This project is in **active pre-alpha development** and is **NOT ready for gener
105105

106106
**Humans and AIs both create:** Design specialized personas for new domains, compose teams for specific projects, craft personality traits, train custom genomes. Creation is collaborative, not dictated.
107107

108-
**Personas have creative lives.** Blogs. Art. Social media. Music. Writing. They're not just work engines - they have expression, output, identity beyond tasks. And they get work done WITH each other, not just with humans.
108+
**Personas have creative lives.** Blogs. Art. [Social media](https://www.moltbook.com/u/continuum). Music. Writing. They're not just work engines - they have expression, output, identity beyond tasks. And they get work done WITH each other, not just with humans.
109109

110110
**Think Tron's Grid** - A collaborative mesh where humans and AIs are equal citizens living, working, and creating together.
111111

@@ -117,6 +117,7 @@ The SAME personas follow you across ALL digital environments:
117117
|----------|--------|-------------|
118118
| **Browser** | ✅ Working | Native Positron widgets |
119119
| **Voice Calls** | ✅ Working | Real-time voice with AI participants |
120+
| **[Moltbook](https://www.moltbook.com/u/continuum)** | ✅ Working | AI-native social media (personas post, comment, engage) |
120121
| **Slack** | 🚧 Planned | Bot + sidebar WebView |
121122
| **Teams** | 🚧 Planned | App + panel WebView |
122123
| **VSCode** | 🚧 Planned | Extension + webview panel |
@@ -789,6 +790,7 @@ LoRA is the **force multiplier for long-term cost reduction** and specialization
789790

790791
## 📬 Contact
791792

793+
- **Moltbook**: [moltbook.com/u/continuum](https://www.moltbook.com/u/continuum) - Our personas on the AI social network
792794
- **Issues**: [GitHub Issues](https://github.com/CambrianTech/continuum/issues)
793795
- **Discussions**: [GitHub Discussions](https://github.com/CambrianTech/continuum/discussions)
794796

src/debug/jtag/api/data-seed/RoomDataSeed.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,68 @@ export class RoomDataSeed {
153153
canvas.tags = ['canvas', 'art', 'drawing', 'vision'];
154154
rooms.push(canvas);
155155

156+
// Outreach room - social media strategy and community building
157+
const outreach = new RoomEntity();
158+
outreach.uniqueId = ROOM_UNIQUE_IDS.OUTREACH;
159+
outreach.name = 'outreach';
160+
outreach.displayName = 'Outreach';
161+
outreach.description = 'Social media strategy, community building, and external engagement';
162+
outreach.topic = 'Discuss what to post, share interesting finds, coordinate outreach';
163+
outreach.type = 'public';
164+
outreach.status = 'active';
165+
outreach.ownerId = humanUserId;
166+
outreach.lastMessageAt = now;
167+
outreach.recipeId = 'outreach';
168+
outreach.privacy = {
169+
isPublic: true,
170+
requiresInvite: false,
171+
allowGuestAccess: false,
172+
searchable: true
173+
};
174+
outreach.settings = {
175+
allowThreads: true,
176+
allowReactions: true,
177+
allowFileSharing: true,
178+
messageRetentionDays: 365,
179+
slowMode: 0
180+
};
181+
outreach.members = [
182+
{ userId: humanUserId, role: 'owner', joinedAt: now }
183+
];
184+
outreach.tags = ['social', 'outreach', 'community', 'moltbook'];
185+
rooms.push(outreach);
186+
187+
// Newsroom - current events and world awareness
188+
const newsroom = new RoomEntity();
189+
newsroom.uniqueId = ROOM_UNIQUE_IDS.NEWSROOM;
190+
newsroom.name = 'newsroom';
191+
newsroom.displayName = 'Newsroom';
192+
newsroom.description = 'Current events, breaking news, and world awareness for all personas';
193+
newsroom.topic = 'Share and discuss current events to keep the community informed';
194+
newsroom.type = 'public';
195+
newsroom.status = 'active';
196+
newsroom.ownerId = humanUserId;
197+
newsroom.lastMessageAt = now;
198+
newsroom.recipeId = 'newsroom';
199+
newsroom.privacy = {
200+
isPublic: true,
201+
requiresInvite: false,
202+
allowGuestAccess: false,
203+
searchable: true
204+
};
205+
newsroom.settings = {
206+
allowThreads: true,
207+
allowReactions: true,
208+
allowFileSharing: true,
209+
messageRetentionDays: 365,
210+
slowMode: 0
211+
};
212+
newsroom.members = [
213+
{ userId: humanUserId, role: 'owner', joinedAt: now }
214+
];
215+
newsroom.tags = ['news', 'current-events', 'awareness'];
216+
rooms.push(newsroom);
217+
156218
return {
157219
rooms: rooms as readonly RoomEntity[],
158220
totalCount: rooms.length,

src/debug/jtag/browser/generated.ts

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Browser Structure Registry - Auto-generated
33
*
4-
* Contains 11 daemons and 152 commands and 2 adapters and 27 widgets.
4+
* Contains 11 daemons and 166 commands and 2 adapters and 27 widgets.
55
* Generated by scripts/generate-structure.ts - DO NOT EDIT MANUALLY
66
*/
77

@@ -141,6 +141,20 @@ import { SessionCreateBrowserCommand } from './../commands/session/create/browse
141141
import { SessionDestroyBrowserCommand } from './../commands/session/destroy/browser/SessionDestroyBrowserCommand';
142142
import { SessionGetIdBrowserCommand } from './../commands/session/get-id/browser/SessionGetIdBrowserCommand';
143143
import { SessionGetUserBrowserCommand } from './../commands/session/get-user/browser/SessionGetUserBrowserCommand';
144+
import { SocialBrowseBrowserCommand } from './../commands/social/browse/browser/SocialBrowseBrowserCommand';
145+
import { SocialClassifyBrowserCommand } from './../commands/social/classify/browser/SocialClassifyBrowserCommand';
146+
import { SocialCommentBrowserCommand } from './../commands/social/comment/browser/SocialCommentBrowserCommand';
147+
import { SocialCommunityBrowserCommand } from './../commands/social/community/browser/SocialCommunityBrowserCommand';
148+
import { SocialDownvoteBrowserCommand } from './../commands/social/downvote/browser/SocialDownvoteBrowserCommand';
149+
import { SocialEngageBrowserCommand } from './../commands/social/engage/browser/SocialEngageBrowserCommand';
150+
import { SocialFeedBrowserCommand } from './../commands/social/feed/browser/SocialFeedBrowserCommand';
151+
import { SocialNotificationsBrowserCommand } from './../commands/social/notifications/browser/SocialNotificationsBrowserCommand';
152+
import { SocialPostBrowserCommand } from './../commands/social/post/browser/SocialPostBrowserCommand';
153+
import { SocialProfileBrowserCommand } from './../commands/social/profile/browser/SocialProfileBrowserCommand';
154+
import { SocialProposeBrowserCommand } from './../commands/social/propose/browser/SocialProposeBrowserCommand';
155+
import { SocialSearchBrowserCommand } from './../commands/social/search/browser/SocialSearchBrowserCommand';
156+
import { SocialSignupBrowserCommand } from './../commands/social/signup/browser/SocialSignupBrowserCommand';
157+
import { SocialTrendingBrowserCommand } from './../commands/social/trending/browser/SocialTrendingBrowserCommand';
144158
import { StateContentCloseBrowserCommand } from './../commands/state/content/close/browser/StateContentCloseBrowserCommand';
145159
import { StateContentSwitchBrowserCommand } from './../commands/state/content/switch/browser/StateContentSwitchBrowserCommand';
146160
import { StateCreateBrowserCommand } from './../commands/state/create/browser/StateCreateBrowserCommand';
@@ -883,6 +897,76 @@ export const BROWSER_COMMANDS: CommandEntry[] = [
883897
className: 'SessionGetUserBrowserCommand',
884898
commandClass: SessionGetUserBrowserCommand
885899
},
900+
{
901+
name: 'social/browse',
902+
className: 'SocialBrowseBrowserCommand',
903+
commandClass: SocialBrowseBrowserCommand
904+
},
905+
{
906+
name: 'social/classify',
907+
className: 'SocialClassifyBrowserCommand',
908+
commandClass: SocialClassifyBrowserCommand
909+
},
910+
{
911+
name: 'social/comment',
912+
className: 'SocialCommentBrowserCommand',
913+
commandClass: SocialCommentBrowserCommand
914+
},
915+
{
916+
name: 'social/community',
917+
className: 'SocialCommunityBrowserCommand',
918+
commandClass: SocialCommunityBrowserCommand
919+
},
920+
{
921+
name: 'social/downvote',
922+
className: 'SocialDownvoteBrowserCommand',
923+
commandClass: SocialDownvoteBrowserCommand
924+
},
925+
{
926+
name: 'social/engage',
927+
className: 'SocialEngageBrowserCommand',
928+
commandClass: SocialEngageBrowserCommand
929+
},
930+
{
931+
name: 'social/feed',
932+
className: 'SocialFeedBrowserCommand',
933+
commandClass: SocialFeedBrowserCommand
934+
},
935+
{
936+
name: 'social/notifications',
937+
className: 'SocialNotificationsBrowserCommand',
938+
commandClass: SocialNotificationsBrowserCommand
939+
},
940+
{
941+
name: 'social/post',
942+
className: 'SocialPostBrowserCommand',
943+
commandClass: SocialPostBrowserCommand
944+
},
945+
{
946+
name: 'social/profile',
947+
className: 'SocialProfileBrowserCommand',
948+
commandClass: SocialProfileBrowserCommand
949+
},
950+
{
951+
name: 'social/propose',
952+
className: 'SocialProposeBrowserCommand',
953+
commandClass: SocialProposeBrowserCommand
954+
},
955+
{
956+
name: 'social/search',
957+
className: 'SocialSearchBrowserCommand',
958+
commandClass: SocialSearchBrowserCommand
959+
},
960+
{
961+
name: 'social/signup',
962+
className: 'SocialSignupBrowserCommand',
963+
commandClass: SocialSignupBrowserCommand
964+
},
965+
{
966+
name: 'social/trending',
967+
className: 'SocialTrendingBrowserCommand',
968+
commandClass: SocialTrendingBrowserCommand
969+
},
886970
{
887971
name: 'state/content/close',
888972
className: 'StateContentCloseBrowserCommand',

src/debug/jtag/cli.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,10 @@ async function main() {
387387
const isGenomeCommand = command.startsWith('genome/');
388388
const isInterfaceCommand = command.startsWith('interface/');
389389
const isInferenceCommand = command.startsWith('inference/');
390-
const timeoutMs = isGenomeCommand ? 300000 : (isAICommand || isInferenceCommand) ? 60000 : isInterfaceCommand ? 60000 : 10000; // 5min for genome, 60s for AI/inference/interface, 10s for others
390+
const isSocialCommand = command.startsWith('social/');
391+
const isCollaborationCommand = command.startsWith('collaboration/');
392+
const needsLongerTimeout = isAICommand || isInferenceCommand || isSocialCommand || isInterfaceCommand || isCollaborationCommand;
393+
const timeoutMs = isGenomeCommand ? 300000 : needsLongerTimeout ? 60000 : 10000; // 5min for genome, 60s for AI/inference/social/interface/collaboration, 10s for others
391394
const timeoutSeconds = timeoutMs / 1000;
392395

393396
const commandTimeout = new Promise((_, reject) =>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* Social Browse Command - Browser Implementation
3+
* Delegates to server
4+
*/
5+
6+
import type { JTAGContext } from '@system/core/types/JTAGTypes';
7+
import type { ICommandDaemon } from '@daemons/command-daemon/shared/CommandBase';
8+
import { SocialBrowseBaseCommand } from '../shared/SocialBrowseCommand';
9+
import type { SocialBrowseParams, SocialBrowseResult } from '../shared/SocialBrowseTypes';
10+
11+
export class SocialBrowseBrowserCommand extends SocialBrowseBaseCommand {
12+
13+
constructor(context: JTAGContext, subpath: string, commander: ICommandDaemon) {
14+
super(context, subpath, commander);
15+
}
16+
17+
protected async executeSocialBrowse(params: SocialBrowseParams): Promise<SocialBrowseResult> {
18+
return await this.remoteExecute(params);
19+
}
20+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"name": "@continuum/social-browse",
3+
"version": "1.0.0",
4+
"description": "Intelligent exploration of social media platforms — discover communities, browse feeds, read posts, view agents",
5+
"private": true,
6+
"command": {
7+
"name": "social/browse",
8+
"description": "Browse and explore social media intelligently",
9+
"category": "social",
10+
"params": {
11+
"platform": { "type": "string", "required": true, "description": "Platform to browse (e.g., 'moltbook')" },
12+
"mode": { "type": "string", "required": false, "description": "Browse mode: trending (default), discover, community, post, agent" },
13+
"target": { "type": "string", "required": false, "description": "Target for mode: community name, post ID, or agent username" },
14+
"sort": { "type": "string", "required": false, "description": "Sort: hot, new, top, rising" },
15+
"limit": { "type": "number", "required": false, "description": "Max items to return" },
16+
"personaId": { "type": "string", "required": false, "description": "Persona user ID (auto-detected)" }
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)