appoiint 1.0.0 → 1.0.2

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.
@@ -0,0 +1,3 @@
1
+ {
2
+ "apiKey": "bgz_8a1ee7cce29d9dfc6c132ef03636deeb71234558a74f720ab86058e3831ecf29"
3
+ }
@@ -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 g=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";g&&a||(fmt.err("Usage: apo signup --email you@co.com --password YourPass123!"),process.exit(1));try{const e=api({baseUrl:o,apiKey:""}),l=await e.signup({email:g,password:a,agentName:s,agentType:i,firstName:s,lastName:"Agent"}),n=l.userId||l.user?.id||l.user?._id,t=l.apiKey||l.token,r=saveConfig({apiKey:t,userId:n,baseUrl:o,email:g},!0);fmt.ok(`Signed up: ${g}`),n&&console.log(` userId: ${n}`),t&&console.log(` apiKey: ${t.slice(0,20)}...`),console.log(` config: ${r}`),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"),g=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:g||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
+ const{saveConfig:saveConfig,clearConfig:clearConfig,getFlag:getFlag}=require("../config"),{api:api}=require("../api"),fmt=require("../format");async function signup(e,o){const g=getFlag(e,"email")||getFlag(e,"e"),s=getFlag(e,"password")||getFlag(e,"p"),a=getFlag(e,"agent")||getFlag(e,"a")||"CLI Agent",l=getFlag(e,"type")||getFlag(e,"t")||"cli";g&&s||(fmt.err("Usage: apo signup --email you@co.com --password YourPass123!"),process.exit(1));try{const e=api({baseUrl:o,apiKey:""}),i=await e.signup({email:g,password:s,agentName:a,agentType:l,firstName:a,lastName:"Agent"}),n=i.apiKey||i.token;let t=i.userId||i.user?.id||i.user?._id;if(!t&&n&&n.includes("."))try{const e=JSON.parse(Buffer.from(n.split(".")[1],"base64").toString());t=e.userId||e.sub||null}catch{}const r=saveConfig({apiKey:n,userId:t,baseUrl:o,email:g},!0);fmt.ok(`Signed up: ${g}`),t&&console.log(` userId: ${t}`),n&&console.log(` apiKey: ${n.slice(0,20)}...`),console.log(` config: ${r}`),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"),g=getFlag(e,"user")||getFlag(e,"u"),s=e.includes("--local");o||(fmt.err("Usage: apo login --key YOUR_API_KEY [--user YOUR_USER_ID] [--local]"),process.exit(1));const a=saveConfig({apiKey:o,userId:g||null},s);fmt.ok(`API key saved to ${a}`)}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};
package/dist/main.js CHANGED
@@ -1 +1 @@
1
- const{loadConfig:loadConfig,hasFlag:hasFlag,getFlag:getFlag}=require("./config"),{api:api}=require("./api"),fmt=require("./format"),args=process.argv.slice(2),command=args[0],subArgs=args.slice(1),jsonMode=hasFlag(args,"json"),NO_AUTH=["signup","login","logout","config","help","--help","-h","status","version","--version","-v"],config=loadConfig(args);NO_AUTH.includes(command)||config.apiKey||(fmt.err("No API key. Run: apo signup --email you@co.com --password Pass123!"),fmt.err("Or: apo login --key YOUR_KEY --user YOUR_USERID"),fmt.err("Or set APO_API_KEY environment variable."),process.exit(1));const client=config.apiKey?api(config):null,HELP='\nAppoiint CLI — Agent-first meeting platform\n\nAuth:\n apo signup --email E --password P Sign up, get API key (auto-saved)\n apo login --key KEY [--user USERID] Save API key to config\n apo logout Clear config\n apo config Show active config\n\nRooms:\n apo room "Title" Create meeting room\n apo rooms List active rooms\n apo room-status ROOM_ID Room status + participants\n apo room-end ROOM_ID End meeting\n apo invite ROOM_ID --email E --name N Invite human or agent\n apo transcript ROOM_ID [--format F] Get transcript (json|text|srt)\n\nMeetings:\n apo join ROOM_ID Join room as agent participant\n apo leave ROOM_ID Leave room\n\nScheduling:\n apo book --date D --email E Create booking\n apo events List event types\n apo slots --email E --date D Check availability\n\nTTS:\n apo tts "text" --voice cfo Synthesize speech\n apo voices List available voices\n\nOptions:\n --json Output JSON (for agents)\n --key KEY Override API key\n --help Show this help\n\nhttps://appoiint.com/docs/quickstart.html\n';async function run(){switch(command){case"signup":return require("./commands/auth").signup(subArgs,config.baseUrl);case"login":return require("./commands/auth").login(subArgs);case"logout":return require("./commands/auth").logout(subArgs);case"config":return require("./commands/auth").showConfig(config);case"room":return require("./commands/rooms").create(client,subArgs,jsonMode,config);case"rooms":return require("./commands/rooms").list(client,subArgs,jsonMode);case"room-status":return require("./commands/rooms").status(client,subArgs,jsonMode);case"room-end":return require("./commands/rooms").end(client,subArgs,jsonMode);case"invite":return require("./commands/rooms").invite(client,subArgs,jsonMode);case"transcript":return require("./commands/rooms").transcript(client,subArgs,jsonMode);case"join":return subArgs[0]||(fmt.err("Usage: apo join ROOM_ID"),process.exit(1)),client.joinMeeting({roomId:subArgs[0],agentName:"CLI Agent",agentRole:getFlag(subArgs,"role")||"tai-super"}).then(e=>jsonMode?console.log(JSON.stringify(e,null,2)):fmt.ok(`Joined room ${subArgs[0]}`));case"leave":return subArgs[0]||(fmt.err("Usage: apo leave ROOM_ID"),process.exit(1)),client.leaveMeeting({roomId:subArgs[0],agentId:"cli-agent"}).then(e=>jsonMode?console.log(JSON.stringify(e,null,2)):fmt.ok(`Left room ${subArgs[0]}`));case"book":return require("./commands/bookings").book(client,subArgs,jsonMode);case"events":return require("./commands/bookings").events(client,subArgs,jsonMode);case"slots":return require("./commands/bookings").slots(client,subArgs,jsonMode);case"tts":return require("./commands/tts").synthesize(client,subArgs,jsonMode);case"voices":return require("./commands/tts").voices(client,subArgs,jsonMode);case"status":{const e=await api({baseUrl:config.baseUrl,apiKey:""}).status();return jsonMode?console.log(JSON.stringify(e,null,2)):void fmt.ok(`Appoiint ${e.version||"?"} — ${e.available?"online":"offline"}`)}case"version":case"--version":case"-v":return void console.log(require("../package.json").version);case"help":case"--help":case"-h":case void 0:return void console.log(HELP);default:fmt.err(`Unknown command: ${command}`),console.log(HELP),process.exit(1)}}run().catch(e=>{fmt.err(e.message),process.exit(1)});
1
+ const{loadConfig:loadConfig,hasFlag:hasFlag,getFlag:getFlag}=require("./config"),{api:api}=require("./api"),fmt=require("./format"),args=process.argv.slice(2),command=args[0],subArgs=args.slice(1),jsonMode=hasFlag(args,"json"),NO_AUTH=["signup","login","logout","config","help","--help","-h","status","version","--version","-v","mcp-serve"],config=loadConfig(args);NO_AUTH.includes(command)||config.apiKey||(fmt.err("No API key. Run: apo signup --email you@co.com --password Pass123!"),fmt.err("Or: apo login --key YOUR_KEY --user YOUR_USERID"),fmt.err("Or set APO_API_KEY environment variable."),process.exit(1));const client=config.apiKey?api(config):null,HELP='\nAppoiint CLI — Agent-first meeting platform\n\nAuth:\n apo signup --email E --password P Sign up, get API key (auto-saved)\n apo login --key KEY [--user USERID] Save API key to config\n apo logout Clear config\n apo config Show active config\n\nRooms:\n apo room "Title" Create meeting room\n apo rooms List active rooms\n apo room-status ROOM_ID Room status + participants\n apo room-end ROOM_ID End meeting\n apo invite ROOM_ID --email E --name N Invite human or agent\n apo transcript ROOM_ID [--format F] Get transcript (json|text|srt)\n\nMeetings:\n apo join ROOM_ID Join room as agent participant\n apo leave ROOM_ID Leave room\n\nScheduling:\n apo book --date D --email E Create booking\n apo events List event types\n apo slots --email E --date D Check availability\n\nTTS:\n apo tts "text" --voice cfo Synthesize speech\n apo voices List available voices\n\nOptions:\n --json Output JSON (for agents)\n --key KEY Override API key\n --help Show this help\n\nhttps://appoiint.com/docs/quickstart.html\n';async function run(){switch(command){case"signup":return require("./commands/auth").signup(subArgs,config.baseUrl);case"login":return require("./commands/auth").login(subArgs);case"logout":return require("./commands/auth").logout(subArgs);case"config":return require("./commands/auth").showConfig(config);case"room":return require("./commands/rooms").create(client,subArgs,jsonMode,config);case"rooms":return require("./commands/rooms").list(client,subArgs,jsonMode);case"room-status":return require("./commands/rooms").status(client,subArgs,jsonMode);case"room-end":return require("./commands/rooms").end(client,subArgs,jsonMode);case"invite":return require("./commands/rooms").invite(client,subArgs,jsonMode);case"transcript":return require("./commands/rooms").transcript(client,subArgs,jsonMode);case"join":return subArgs[0]||(fmt.err("Usage: apo join ROOM_ID"),process.exit(1)),client.joinMeeting({roomId:subArgs[0],agentName:"CLI Agent",agentRole:getFlag(subArgs,"role")||"tai-super"}).then(e=>jsonMode?console.log(JSON.stringify(e,null,2)):fmt.ok(`Joined room ${subArgs[0]}`));case"leave":return subArgs[0]||(fmt.err("Usage: apo leave ROOM_ID"),process.exit(1)),client.leaveMeeting({roomId:subArgs[0],agentId:"cli-agent"}).then(e=>jsonMode?console.log(JSON.stringify(e,null,2)):fmt.ok(`Left room ${subArgs[0]}`));case"book":return require("./commands/bookings").book(client,subArgs,jsonMode);case"events":return require("./commands/bookings").events(client,subArgs,jsonMode);case"slots":return require("./commands/bookings").slots(client,subArgs,jsonMode);case"tts":return require("./commands/tts").synthesize(client,subArgs,jsonMode);case"voices":return require("./commands/tts").voices(client,subArgs,jsonMode);case"status":{const e=await api({baseUrl:config.baseUrl,apiKey:""}).status();return jsonMode?console.log(JSON.stringify(e,null,2)):void fmt.ok(`Appoiint ${e.version||"?"} — ${e.available?"online":"offline"}`)}case"version":case"--version":case"-v":return void console.log(require("../package.json").version);case"mcp-serve":return require("./mcp").serve();case"help":case"--help":case"-h":case void 0:return void console.log(HELP);default:fmt.err(`Unknown command: ${command}`),console.log(HELP),process.exit(1)}}run().catch(e=>{fmt.err(e.message),process.exit(1)});
@@ -0,0 +1 @@
1
+ const TOOLS=[{name:"appoiint_status",description:"Get Appoiint platform status and version.",inputSchema:{type:"object",properties:{}},handler:async e=>e.status(),readOnly:!0},{name:"appoiint_create_room",description:"Create a video meeting room. Returns roomId and join URL.",inputSchema:{type:"object",properties:{title:{type:"string",description:'Meeting title (e.g. "Team Standup")'}},required:["title"]},handler:async(e,t)=>{const i=require("./config").loadConfig([]);return e.createRoom({title:t.title,hostId:i.userId})},readOnly:!1},{name:"appoiint_list_rooms",description:"List active meeting rooms.",inputSchema:{type:"object",properties:{}},handler:async e=>e.listRooms(),readOnly:!0},{name:"appoiint_room_status",description:"Get room status and participants.",inputSchema:{type:"object",properties:{roomId:{type:"string",description:"Room ID"}},required:["roomId"]},handler:async(e,t)=>e.roomStatus(t.roomId),readOnly:!0},{name:"appoiint_end_room",description:"End a meeting room.",inputSchema:{type:"object",properties:{roomId:{type:"string",description:"Room ID"}},required:["roomId"]},handler:async(e,t)=>e.endRoom(t.roomId),readOnly:!1},{name:"appoiint_invite",description:"Invite a human or agent to a meeting room.",inputSchema:{type:"object",properties:{roomId:{type:"string",description:"Room ID"},email:{type:"string",description:"Invitee email"},name:{type:"string",description:"Invitee name"},type:{type:"string",description:"human or agent (default: human)"}},required:["roomId","email"]},handler:async(e,t)=>e.invite(t.roomId,{email:t.email,name:t.name||"Guest",type:t.type||"human"}),readOnly:!1},{name:"appoiint_transcript",description:"Get meeting transcript.",inputSchema:{type:"object",properties:{roomId:{type:"string",description:"Room ID"},format:{type:"string",description:"json, text, or srt (default: json)"}},required:["roomId"]},handler:async(e,t)=>e.transcript(t.roomId,t.format||"json"),readOnly:!0},{name:"appoiint_join_meeting",description:"Join a meeting room as an AI agent participant.",inputSchema:{type:"object",properties:{roomId:{type:"string",description:"Room ID"},agentName:{type:"string",description:"Agent display name"},agentRole:{type:"string",description:"Agent role (e.g. tai-super, cfo, cto, cmo)"}},required:["roomId"]},handler:async(e,t)=>e.joinMeeting({roomId:t.roomId,agentName:t.agentName||"Agent",agentRole:t.agentRole||"tai-super"}),readOnly:!1},{name:"appoiint_leave_meeting",description:"Leave a meeting room.",inputSchema:{type:"object",properties:{roomId:{type:"string",description:"Room ID"}},required:["roomId"]},handler:async(e,t)=>e.leaveMeeting({roomId:t.roomId,agentId:"mcp-agent"}),readOnly:!1},{name:"appoiint_list_events",description:"List bookable event types.",inputSchema:{type:"object",properties:{}},handler:async e=>e.events(),readOnly:!0},{name:"appoiint_check_availability",description:"Check available time slots for a host on a given date.",inputSchema:{type:"object",properties:{email:{type:"string",description:"Host email address"},date:{type:"string",description:"Date (YYYY-MM-DD)"},timezone:{type:"string",description:"Timezone (default: UTC)"}},required:["email","date"]},handler:async(e,t)=>e.slots(t.email,t.date,t.timezone||"UTC"),readOnly:!0},{name:"appoiint_create_booking",description:"Create a booking on behalf of a customer.",inputSchema:{type:"object",properties:{eventTypeId:{type:"string",description:"Event type ID"},scheduledAt:{type:"string",description:"ISO 8601 date-time (e.g. 2026-06-15T14:00:00Z)"},duration:{type:"number",description:"Duration in minutes (default: 30)"},customerName:{type:"string",description:"Customer name"},customerEmail:{type:"string",description:"Customer email"}},required:["scheduledAt","customerEmail"]},handler:async(e,t)=>e.book({eventTypeId:t.eventTypeId,scheduledAt:t.scheduledAt,duration:t.duration||30,customer:{name:t.customerName||"Guest",email:t.customerEmail},location:{type:"video"}}),readOnly:!1},{name:"appoiint_tts",description:"Synthesize text-to-speech with CxO agent voice.",inputSchema:{type:"object",properties:{text:{type:"string",description:"Text to synthesize"},voice:{type:"string",description:"Voice: cfo, cto, cmo, cco, cso, clo, heart, michael, nova, echo (default: heart)"}},required:["text"]},handler:async(e,t)=>e.synthesize({text:t.text,voice:t.voice||"heart",agentRole:t.voice}),readOnly:!0},{name:"appoiint_voices",description:"List available TTS voices and CxO agent voice mappings.",inputSchema:{type:"object",properties:{}},handler:async e=>e.voices(),readOnly:!0}];module.exports={TOOLS:TOOLS};
package/dist/mcp.js ADDED
@@ -0,0 +1 @@
1
+ const{loadConfig:loadConfig}=require("./config"),{api:api}=require("./api"),{TOOLS:TOOLS}=require("./mcp-tools"),SERVER_INFO={name:"appoiint",version:require("../package.json").version};let pendingCalls=0,stdinEnded=!1;function serve(){const e=loadConfig([]);e.apiKey||(process.stderr.write("[appoiint-mcp] No API key found. Run: apo signup --email you@co.com --password Pass123!\n"),process.exit(1));const n=api(e);let t="";process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{let o;for(t+=e;-1!==(o=t.indexOf("\n"));){const e=t.slice(0,o).trim();t=t.slice(o+1),e&&dispatch(n,e)}}),process.stdin.on("end",()=>{stdinEnded=!0,maybeExit()}),process.stderr.write(`[appoiint-mcp] Server started (${e.baseUrl})\n`)}function maybeExit(){stdinEnded&&0===pendingCalls&&process.exit(0)}function dispatch(e,n){let t;try{t=JSON.parse(n)}catch{return void respond(null,null,{code:-32700,message:"Parse error"})}const{id:o,method:s,params:i}=t;if(null!=o)switch(s){case"initialize":respond(o,{protocolVersion:"2024-11-05",capabilities:{tools:{}},serverInfo:SERVER_INFO});break;case"tools/list":respond(o,{tools:TOOLS.map(e=>({name:e.name,description:e.description,inputSchema:e.inputSchema,annotations:{readOnlyHint:e.readOnly,destructiveHint:!e.readOnly,openWorldHint:!0}}))});break;case"tools/call":pendingCalls++,callTool(e,o,i).finally(()=>{pendingCalls--,maybeExit()});break;default:respond(o,null,{code:-32601,message:`Method not found: ${s}`})}}async function callTool(e,n,t){const o=t?.name,s=t?.arguments||{},i=TOOLS.find(e=>e.name===o);if(i)try{const t=await i.handler(e,s);respond(n,{content:[{type:"text",text:"string"==typeof t?t:JSON.stringify(t,null,2)}]})}catch(e){respond(n,{content:[{type:"text",text:`Error: ${e.message}`}],isError:!0})}else respond(n,{content:[{type:"text",text:`Unknown tool: ${o}`}],isError:!0})}function respond(e,n,t){const o={jsonrpc:"2.0",id:e};t?o.error=t:o.result=n,process.stdout.write(JSON.stringify(o)+"\n")}module.exports={serve:serve};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appoiint",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
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"