appoiint 1.0.3 → 1.0.4

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.
@@ -1 +1 @@
1
- const fmt=require("../format"),ADMIN_ROLES=["admin","owner","manager","superadmin"];async function run(e,t,o,n){const r=t[0];if(r||(fmt.err("Usage: apo diagnose ROOM_ID"),process.exit(1)),n.apiKey&&n.apiKey.includes("."))try{const e=JSON.parse(Buffer.from(n.apiKey.split(".")[1],"base64").toString());ADMIN_ROLES.includes(e.role)||(fmt.err(`Access denied. diagnose requires admin role (your role: ${e.role})`),process.exit(1))}catch{}let s;try{s=require("socket.io-client")}catch{return fmt.err("socket.io-client not installed. Run: npm install -g socket.io-client"),fmt.info("Falling back to HTTP-only diagnostics..."),httpDiagnose(e,r,o,n)}const a=n.baseUrl,i={roomId:r,baseUrl:a,connected:!1,joined:!1,peers:[],agentPeers:[],humanPeers:[],transcriptsReceived:0,agentChatsReceived:0,testChatSent:!1,testChatEcho:!1,errors:[]};return console.log(`\n Diagnosing room ${r} on ${a}\n`),new Promise(e=>{const t=setTimeout(()=>c("Timeout (15s)"),15e3),n=s(a,{transports:["websocket"],reconnection:!1});function c(r){clearTimeout(t),r&&i.errors.push(r),n.disconnect(),console.log("\n ── Diagnosis ──\n"),[["Socket.IO connected",i.connected],["Joined room",i.joined],["Human peers present",i.humanPeers.length>0],["Transcripts received (agent can hear)",i.transcriptsReceived>0],["Test agentChat sent",i.testChatSent],["agentChat echo (broadcast works)",i.testChatEcho||i.agentChatsReceived>0]].forEach(([e,t])=>{console.log(` ${t?"✓":"✗"} ${e}`)}),i.errors.length&&(console.log("\n Errors:"),i.errors.forEach(e=>console.log(` ✗ ${e}`))),i.transcriptsReceived||(console.log("\n ⚠ No transcripts — is notetaker running? Human must speak for STT to produce text."),console.log(" ⚠ Chain: Human speaks → GroqSTT → onTranscript → signalingSocket.emit(transcript) → server relay → agent")),console.log(""),o&&console.log(JSON.stringify(i,null,2)),e()}n.on("connect",()=>{i.connected=!0,fmt.ok("Socket.IO connected"),n.emit("join",{channel:r,peer_name:"apo-diagnose",peer_uuid:`diag-${Date.now()}`,peer_type:"agent",peer_agent_id:"apo-diagnose",peer_agent_role:"diagnostic",peer_video:!1,peer_audio:!1,peer_video_status:!1,peer_audio_status:!1,peer_screen_status:!1,peer_hand_status:!1,peer_rec_status:!1,peer_privacy_status:!1,peer_info:{osName:"Node.js",osVersion:process.version,browserName:"apo-diagnose",browserVersion:"1.0"}})}),n.on("addPeer",e=>{i.joined=!0;const t=e.peers?Object.values(e.peers):[];i.peers=t.map(e=>({name:e.peer_name,type:e.peer_type||"human",role:e.peer_agent_role||null})),i.agentPeers=i.peers.filter(e=>"agent"===e.type),i.humanPeers=i.peers.filter(e=>"agent"!==e.type),fmt.ok(`Joined room — ${i.peers.length} peer(s)`),i.peers.forEach(e=>{const t="agent"===e.type?`[${e.role||"agent"}]`:"[human]";console.log(` ${t} ${e.name}`)}),setTimeout(()=>{n.emit("agentChat",{peer_name:"apo-diagnose",peer_agent_role:"diagnostic",msg:"[DIAGNOSTIC] Test message from apo diagnose"}),i.testChatSent=!0,fmt.ok("Test agentChat sent")},1e3),setTimeout(()=>c(),5e3)}),n.on("transcript",e=>{i.transcriptsReceived++,fmt.ok(`Transcript received: "${(e.text||"").slice(0,60)}..." from ${e.peer_name}`)}),n.on("agentChat",e=>{i.agentChatsReceived++,e.msg&&e.msg.includes("[DIAGNOSTIC]")&&(i.testChatEcho=!0),fmt.ok(`agentChat received: "${(e.msg||"").slice(0,60)}..." from ${e.peer_name}`)}),n.on("peerAction",e=>{"startNotetaker"===e.action&&fmt.ok("startNotetaker peerAction received (auto-notetaker triggered)")}),n.on("unauthorized",()=>{i.errors.push("unauthorized — room requires auth token"),fmt.err("Unauthorized — room requires peer_token")}),n.on("connect_error",e=>{i.errors.push(`connect_error: ${e.message}`),fmt.err(`Connection error: ${e.message}`),c("connect_error")}),n.on("disconnect",e=>{i.joined||(i.errors.push(`disconnected before join: ${e}`),fmt.err(`Disconnected: ${e}`))})})}async function httpDiagnose(e,t,o,n){console.log(" HTTP-only diagnostics (no Socket.IO client)\n");try{const n=await e.roomStatus(t);fmt.ok(`Room found: ${n.title||t}`),console.log(` Status: ${n.status}`),console.log(` Participants: ${(n.participants||[]).length}`),o&&console.log(JSON.stringify(n,null,2))}catch(e){fmt.err(`Room status failed: ${e.message}`)}try{const t=await e.status();fmt.ok(`Platform: v${t.version} — ${t.available?"online":"offline"}`)}catch(e){fmt.err(`Status failed: ${e.message}`)}}module.exports={run:run};
1
+ const fmt=require("../format");async function run(e,o,n,t){const s=o[0];s||(fmt.err("Usage: apo diagnose ROOM_ID"),process.exit(1));const r={roomId:s,baseUrl:t.baseUrl,platform:null,room:null,participants:[],agentPeers:[],humanPeers:[],checks:{},errors:[]};console.log(`\n Diagnosing room ${s} on ${t.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(s);r.room=o,r.checks.roomFound=!0,fmt.ok(`Room: ${o.title||s}`),console.log(` Status: ${o.status||"unknown"}`);const n=o.participants||[];r.participants=n,r.agentPeers=n.filter(e=>"agent"===e.peer_type),r.humanPeers=n.filter(e=>"agent"!==e.peer_type||!e.peer_type),n.length?(console.log(` Participants: ${n.length}`),n.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(),n=Array.isArray(o)?o:o?.eventTypes||[];r.checks.eventsEndpoint=!0,fmt.ok(`Events endpoint: ${n.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 n=o.primary||"unknown";fmt.ok(`TTS: ${n} (${(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.listRooms(),n=Array.isArray(o)?o:o?.rooms||[];r.checks.roomsEndpoint=!0,fmt.ok(`Rooms endpoint: ${n.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],["Rooms endpoint (getMeetingsByHost)",r.checks.roomsEndpoint]].forEach(([e,o])=>{console.log(` ${o?"✓":"✗"} ${e}`)}),r.errors.length&&(console.log("\n Errors:"),r.errors.forEach(e=>console.log(` ✗ ${e}`))),console.log("\n ── Agent Meeting Chain ──\n"),console.log(" Human speaks → GroqSTT → 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(""),n&&console.log(JSON.stringify(r,null,2))}module.exports={run:run};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appoiint",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Appoiint CLI — schedule meetings, create rooms, join video calls. Agent-first meeting platform.",
5
5
  "bin": {
6
6
  "apo": "bin/cli.js"