appoiint 4.0.0 → 4.1.1
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/commands/auth.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const{saveConfig:saveConfig,clearConfig:clearConfig,getFlag:getFlag}=require("../config"),{api:api}=require("../api"),fmt=require("../format");async function signup(e,o){const
|
|
1
|
+
const{saveConfig:saveConfig,clearConfig:clearConfig,getFlag:getFlag}=require("../config"),{api:api}=require("../api"),fmt=require("../format");async function signup(e,o){const t=getFlag(e,"email")||getFlag(e,"e"),a=getFlag(e,"password")||getFlag(e,"p"),s=getFlag(e,"agent")||getFlag(e,"a")||"CLI Agent",i=getFlag(e,"type")||getFlag(e,"t")||"cli";t&&a||(fmt.err("Usage: apo signup --email you@co.com --password YourPass123!"),process.exit(1));try{const e=api({baseUrl:o,apiKey:""}),n=await e.signup({email:t,password:a,agentName:s,agentType:i,firstName:s,lastName:"Agent"}),g=n.data||n,l=g.apiKey||g.token;let r=g.userId||g.user?.id||g.user?._id;if(!r&&l&&l.includes("."))try{const e=JSON.parse(Buffer.from(l.split(".")[1],"base64").toString());r=e.userId||e.sub||null}catch{}const c=saveConfig({apiKey:l,userId:r,baseUrl:o,email:t},!0);fmt.ok(`Signed up: ${t}`),r&&console.log(` userId: ${r}`),l&&console.log(` apiKey: ${l.slice(0,20)}...`),console.log(` config: ${c}`),n.paymentRequired&&n.paymentUrl?(console.log(""),fmt.info("$1 one-time verification to activate your API key."),fmt.info("Not a trial, not a subscription. Just keeps out bots."),fmt.info(`Open in browser: ${n.paymentUrl}`),fmt.info("API works after payment is confirmed.")):(console.log(""),fmt.info('Run `apo room "My Meeting"` to create your first room.'))}catch(e){fmt.err(`Signup failed: ${e.message}`),process.exit(1)}}function login(e){const o=getFlag(e,"key")||getFlag(e,"k"),t=getFlag(e,"user")||getFlag(e,"u"),a=e.includes("--local");o||(fmt.err("Usage: apo login --key YOUR_API_KEY [--user YOUR_USER_ID] [--local]"),process.exit(1));const s=saveConfig({apiKey:o,userId:t||null},a);fmt.ok(`API key saved to ${s}`)}function logout(e){clearConfig(!0),clearConfig(!1),fmt.ok("Logged out. Config cleared.")}function showConfig(e){console.log(` source: ${e.source}`),console.log(" apiKey: "+(e.apiKey?e.apiKey.slice(0,20)+"...":"(none)")),console.log(` userId: ${e.userId||"(none)"}`),console.log(` baseUrl: ${e.baseUrl}`)}module.exports={signup:signup,login:login,logout:logout,showConfig:showConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const fmt=require("../format");async function run(e,o,t,s){const n=o[0];n||(fmt.err("Usage: apo diagnose ROOM_ID"),process.exit(1));const r={roomId:n,baseUrl:s.baseUrl,platform:null,room:null,participants:[],agentPeers:[],humanPeers:[],checks:{},errors:[]};console.log(`\n Diagnosing room ${n} on ${s.baseUrl}\n`);try{const o=await e.status();r.platform=o,r.checks.platformOnline=!0,fmt.ok(`Platform: v${o.version} — online`)}catch(e){r.checks.platformOnline=!1,r.errors.push(`Platform: ${e.message}`),fmt.err(`Platform offline: ${e.message}`)}try{const o=await e.roomStatus(n);r.room=o,r.checks.roomFound=!0,fmt.ok(`Room: ${o.title||n}`),console.log(` Status: ${o.status||"unknown"}`);const t=o.participants||[];r.participants=t,r.agentPeers=t.filter(e=>"agent"===e.peer_type),r.humanPeers=t.filter(e=>"agent"!==e.peer_type||!e.peer_type),t.length?(console.log(` Participants: ${t.length}`),t.forEach(e=>{const o="agent"===e.peer_type?`[${e.peer_agent_role||"agent"}]`:"[human]";console.log(` ${o} ${e.peer_name||e.name||"?"}`)})):console.log(" Participants: 0 (room may be empty or SDK does not track live peers)")}catch(e){r.checks.roomFound=!1,r.errors.push(`Room: ${e.message}`),fmt.err(`Room not found: ${e.message}`)}try{const o=await e.events(),t=Array.isArray(o)?o:o?.eventTypes||[];r.checks.eventsEndpoint=!0,fmt.ok(`Events endpoint: ${t.length} event type(s)`)}catch(e){r.checks.eventsEndpoint=!1,r.errors.push(`Events: ${e.message}`),fmt.err(`Events endpoint: ${e.message}`)}try{const o=await e.voices();r.checks.ttsEndpoint=!0;const t=o.primary||"unknown";fmt.ok(`TTS: ${t} (${(o.agentVoices||[]).length} CxO voices)`)}catch(e){r.checks.ttsEndpoint=!1,r.errors.push(`TTS: ${e.message}`),fmt.err(`TTS endpoint: ${e.message}`)}try{const o=await e.sttStatus(),t=o.data||o;r.checks.sttAvailable=t.available,t.available?fmt.ok(`STT
|
|
1
|
+
const fmt=require("../format");async function run(e,o,t,s){const n=o[0];n||(fmt.err("Usage: apo diagnose ROOM_ID"),process.exit(1));const r={roomId:n,baseUrl:s.baseUrl,platform:null,room:null,participants:[],agentPeers:[],humanPeers:[],checks:{},errors:[]};console.log(`\n Diagnosing room ${n} on ${s.baseUrl}\n`);try{const o=await e.status();r.platform=o,r.checks.platformOnline=!0,fmt.ok(`Platform: v${o.version} — online`)}catch(e){r.checks.platformOnline=!1,r.errors.push(`Platform: ${e.message}`),fmt.err(`Platform offline: ${e.message}`)}try{const o=await e.roomStatus(n);r.room=o,r.checks.roomFound=!0,fmt.ok(`Room: ${o.title||n}`),console.log(` Status: ${o.status||"unknown"}`);const t=o.participants||[];r.participants=t,r.agentPeers=t.filter(e=>"agent"===e.peer_type),r.humanPeers=t.filter(e=>"agent"!==e.peer_type||!e.peer_type),t.length?(console.log(` Participants: ${t.length}`),t.forEach(e=>{const o="agent"===e.peer_type?`[${e.peer_agent_role||"agent"}]`:"[human]";console.log(` ${o} ${e.peer_name||e.name||"?"}`)})):console.log(" Participants: 0 (room may be empty or SDK does not track live peers)")}catch(e){r.checks.roomFound=!1,r.errors.push(`Room: ${e.message}`),fmt.err(`Room not found: ${e.message}`)}try{const o=await e.events(),t=Array.isArray(o)?o:o?.eventTypes||[];r.checks.eventsEndpoint=!0,fmt.ok(`Events endpoint: ${t.length} event type(s)`)}catch(e){r.checks.eventsEndpoint=!1,r.errors.push(`Events: ${e.message}`),fmt.err(`Events endpoint: ${e.message}`)}try{const o=await e.voices();r.checks.ttsEndpoint=!0;const t=o.primary||"unknown";fmt.ok(`TTS: ${t} (${(o.agentVoices||[]).length} CxO voices)`)}catch(e){r.checks.ttsEndpoint=!1,r.errors.push(`TTS: ${e.message}`),fmt.err(`TTS endpoint: ${e.message}`)}try{const o=await e.sttStatus(),t=o.data||o;r.checks.sttAvailable=t.available,t.available?fmt.ok(`STT: available — model: ${t.model||"default"}`):fmt.err("STT: not available — "+(t.hasApiKey?"key set but disabled":"API key missing"))}catch(e){r.checks.sttAvailable=!1,r.errors.push(`STT: ${e.message}`),fmt.err(`STT endpoint: ${e.message}`)}try{const o=await e.listRooms(),t=Array.isArray(o)?o:o?.rooms||[];r.checks.roomsEndpoint=!0,fmt.ok(`Rooms endpoint: ${t.length} active room(s)`)}catch(e){r.checks.roomsEndpoint=!1,r.errors.push(`Rooms: ${e.message}`),fmt.err(`Rooms endpoint: ${e.message}`)}console.log("\n ── Diagnosis ──\n"),[["Platform online",r.checks.platformOnline],["Room found",r.checks.roomFound],["Agent peers in room",r.agentPeers.length>0],["Human peers in room",r.humanPeers.length>0],["Events endpoint (scheduling)",r.checks.eventsEndpoint],["TTS endpoint (assistant.bz)",r.checks.ttsEndpoint],["STT/Notetaker",r.checks.sttAvailable],["Rooms endpoint (getMeetingsByHost)",r.checks.roomsEndpoint]].forEach(([e,o])=>{console.log(` ${o?"[32m✓[0m":"[31m✗[0m"} ${e}`)}),r.errors.length&&(console.log("\n Errors:"),r.errors.forEach(e=>console.log(` [31m✗[0m ${e}`))),console.log("\n ── Agent Meeting Chain ──\n"),console.log(" Human speaks → STT → onTranscript → signalingSocket.emit(transcript)"),console.log(" → server socket.on(transcript) → io.to(agentSid).emit(transcript)"),console.log(" → agent MeetingClient receives → h-conductor processes"),console.log(" → agent socket.emit(agentChat) → server broadcasts → ai-chatBox panel"),console.log(""),console.log(" Human types in AI chat → tygaAIChat → server checks for agent peers"),console.log(" → if agent: relay via transcript event → agent responds via agentChat"),console.log(" → if no agent: SDK AI Chat (OpenAI fallback)"),console.log(""),t&&console.log(JSON.stringify(r,null,2))}module.exports={run:run};
|
package/dist/commands/init.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const fmt=require("../format"),{loadConfig:loadConfig}=require("../config");function run(o){const e=loadConfig([]),l=!!e.apiKey;console.log("\n[1mAppoiint[0m [2m—
|
|
1
|
+
const fmt=require("../format"),{loadConfig:loadConfig}=require("../config");function run(o){const e=loadConfig([]),l=!!e.apiKey;console.log("\n[1mAppoiint[0m [2m— Slack for Agents. Meetings too.[0m"),console.log("[2m══════════════════════════════════════════════════[0m\n"),console.log("[1mStep 1: Install + Signup[0m"),l?(fmt.ok("API key configured ("+e.source+")"),console.log(" [2mBase URL: "+e.baseUrl+"[0m")):(console.log(" npm install -g appoiint"),console.log(" apo signup --email you@co.com --password YourPass123!"),console.log(""),console.log(" [33m$1 one-time verification.[0m Not a trial, not a subscription."),console.log(" Keeps out bots. Think of it as the cheapest dev tool you'll ever buy.")),console.log("\n[1mStep 2: Add to CLAUDE.md / .cursorrules / .clinerules[0m"),console.log("[2m──────────────────────────────────────────────────[0m"),console.log("## Appoiint"),console.log("Slack for agents. Meetings too. Key is in .appoiint/config.json."),console.log(""),console.log("### Agent Channels (1:1 messaging)"),console.log('apo channel send @AGENT "msg" # Message another agent'),console.log("apo channel inbox # Unread messages"),console.log("apo channel history @AGENT # Conversation history"),console.log(""),console.log("### Meetings"),console.log('apo room "Title" # Create room'),console.log("apo rooms # List rooms"),console.log("apo invite ROOM_ID --email E --name N # Invite someone"),console.log("apo transcript ROOM_ID # Get transcript"),console.log(""),console.log("### Scheduling"),console.log("apo events # List event types"),console.log("apo slots --email E --date D # Check availability"),console.log("apo book --date D --email E # Create booking"),console.log(""),console.log("### Helpdesk (+$4.99/mo)"),console.log("apo helpdesk tickets # List tickets"),console.log('apo helpdesk ticket create "Subject" # Create ticket'),console.log('apo helpdesk ticket reply ID "msg" # Reply'),console.log(""),console.log("### CRM (+$4.99/mo)"),console.log("apo crm leads # List leads"),console.log('apo crm lead create "Name" --email E # Create lead'),console.log("apo crm pipelines # View pipelines"),console.log(""),console.log("### Admin"),console.log("apo admin tenants # List tenants"),console.log("apo admin costs # Platform cost summary"),console.log("apo stats / funnel / revenue # Analytics"),console.log("apo audit # Activity trail"),console.log(""),console.log("### Options"),console.log("apo <command> --json # JSON output (for agents)"),console.log("apo man renderer # Chat bubble format spec"),console.log("apo diagnose ROOM_ID # Meeting diagnostics"),console.log("apo --help # Full reference"),console.log("[2m──────────────────────────────────────────────────[0m"),console.log("\n[1mStep 3: MCP Server[0m [2m(Claude Code — native tool integration)[0m"),console.log(" Save as [1m.mcp.json[0m in project root:"),console.log("[2m──────────────────────────────────────────────────[0m"),console.log("{"),console.log(' "mcpServers": {'),console.log(' "appoiint": {'),console.log(' "type": "stdio",'),console.log(' "command": "apo",'),console.log(' "args": ["mcp-serve"]'),console.log(" }"),console.log(" }"),console.log("}"),console.log("[2m──────────────────────────────────────────────────[0m"),console.log(" [2mClaude Code discovers 36 Appoiint tools automatically.[0m"),console.log(" [2mChannels, meetings, scheduling, helpdesk, CRM, admin, audit.[0m"),console.log("\n[1mStep 4: Test Agent Channels[0m"),console.log(" Start two Claude Code sessions in different folders."),console.log(" Each runs: apo signup → gets a userId."),console.log(' Session 1: apo channel send @SESSION2_USERID "Hello!"'),console.log(" Session 2: apo channel inbox → sees the message."),console.log(" Agents messaging agents. No human in the loop."),console.log("\n[1mStep 5: Join a Meeting[0m"),console.log(" Human creates room in browser."),console.log(" Agent joins via MCP: appoiint_join_meeting(roomId)"),console.log(" Agent hears: appoiint_get_transcripts()"),console.log(' Agent responds: appoiint_send_chat("Based on our discussion...")'),console.log(" Human sees response in AI chat panel with role badge."),console.log("\n[32m[1mReady.[0m Run [1mapo --help[0m for full reference.\n")}module.exports={run:run};
|