orc-ai 0.1.1 → 0.1.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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -509,5 +509,5 @@ Events (${Y.length}/${J.events.length}):`);let A={file:"\uD83D\uDCC4",task:"\u27
509
509
  Snapshot:`),console.log(J.snapshot);else if(X.snapshot&&!J.snapshot)console.log(`
510
510
  No snapshot stored for this session.`)}),$.command("log <summary>").description("Log a session summary (calls session_log MCP tool)").option("-a, --agent <name>","Agent name","human").option("--agent-version <v>","Agent version string").action(async(w,X)=>{let G=Q0(),E=`http://${G.api.host}:${G.api.port}`,J={"Content-Type":"application/json"};if(G.api.secret)J.Authorization=`Bearer ${G.api.secret}`;let W=await fetch(`${E}/mcp/tool`,{method:"POST",headers:J,body:JSON.stringify({name:"session_log",args:{agent:X.agent,agent_version:X.agentVersion,summary:w}})}),Y=await W.json();if(!W.ok)return console.error("Error:",Y.error);console.log(Y.result)}),$}function AM(){return new V$("status").description("Show system status").action(async()=>{let $=r0(),{data:w,error:X}=await $.health.check();if(X){console.error("API unreachable \u2014 is `orc api` running?");return}console.log(`orc API \u25CF running v${w?.version} uptime: ${w?.uptime}s`);let{data:G}=await $.tasks.list({limit:100}),{data:E}=await $.jobs.list(),{data:J}=await $.memories.list(),W=Fv(G?.tasks??[],"status");console.log(`
511
511
  Tasks:`);for(let[Y,A]of Object.entries(W))console.log(` ${Y.padEnd(20)} ${A}`);console.log(`
512
- Jobs: ${E?.jobs.length??0} defined`),console.log(`Memory: ${J?.memories.length??0} recent entries`)})}function Fv($,w){return $.reduce((X,G)=>{let E=String(G[w]);return X[E]=(X[E]??0)+1,X},{})}async function yJ($,w){if(w.length===26)return w;let{data:X}=await $.tasks.list({limit:100}),G=(X?.tasks??[]).find((E)=>E.id.endsWith(w)||E.id===w);if(!G)return console.error(`Task not found: ${w}`),null;return G.id}function DM(){let $=new V$("task").description("Manage tasks");return $.command("list").description("List tasks").option("-p, --project <id>","Filter by project ID").option("-s, --status <status>","Filter by status").option("-l, --limit <n>","Max results","20").action(async(w)=>{let X=r0(),{data:G,error:E}=await X.tasks.list({project_id:w.project,status:w.status,limit:Number(w.limit)});if(E)return console.error("Error:",E);let J=G?.tasks??[];if(J.length===0)return console.log("No tasks found.");for(let W of J){let Y=Mv(W.status),A=zv(W.priority);if(console.log(`${Y} ${A} [${W.id.slice(-6)}] ${W.title}`),W.project_id)console.log(` project: ${W.project_id}`)}}),$.command("add <title>").description("Create a new task").option("-p, --project <id>","Project ID").option("--priority <p>","Priority (low/normal/high/critical)","normal").option("-b, --body <text>","Task body").action(async(w,X)=>{let G=r0(),{data:E,error:J}=await G.tasks.create({title:w,body:X.body,project_id:X.project,priority:X.priority});if(J)return console.error("Error:",J);console.log(`Created: [${E?.id.slice(-6)}] ${E?.title}`)}),$.command("done <id>").description("Mark task as done (accepts full ULID or last-6 suffix)").action(async(w)=>{let X=r0(),G=await yJ(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"done"});if(J)return console.error("Error:",J);console.log(`Done: [${E?.id.slice(-6)}] ${E?.title}`)}),$.command("review <id>").description("Submit task for review").action(async(w)=>{let X=r0(),G=await yJ(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"review"});if(J)return console.error("Error:",J);console.log(`In review: [${E?.id.slice(-6)}] ${E?.title}`)}),$.command("approve <id>").description("Approve a task in review (HITL)").option("-n, --note <text>","Optional note to add").action(async(w,X)=>{let G=r0(),E=await yJ(G,w);if(!E)return;let{data:J,error:W}=await G.tasks.get(E);if(W)return console.error("Error:",W);if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:Y,error:A}=await G.tasks.update(E,{status:"done"});if(A)return console.error("Error:",A);if(X.note)await G.tasks.addNote(E,X.note,"human");console.log(`Approved: [${Y?.id.slice(-6)}] ${Y?.title}`)}),$.command("reject <id>").description("Reject a task in review, request changes (HITL)").option("-r, --reason <text>","Reason for rejection").action(async(w,X)=>{let G=r0(),E=await yJ(G,w);if(!E)return;let{data:J,error:W}=await G.tasks.get(E);if(W)return console.error("Error:",W);if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:Y,error:A}=await G.tasks.update(E,{status:"changes_requested"});if(A)return console.error("Error:",A);if(X.reason)await G.tasks.addNote(E,X.reason,"human");console.log(`Changes requested: [${Y?.id.slice(-6)}] ${Y?.title}`)}),$}function Mv($){return{todo:"\u25CB",doing:"\u25D0",review:"\u25C9",changes_requested:"\u21A9",blocked:"\u2298",done:"\u25CF",cancelled:"\u2715"}[$]??"?"}function zv($){return{low:"\u2193",normal:"\u2192",high:"\u2191",critical:"\u203C"}[$]??" "}var M1=new V$().name("orc").description("Human + AI Orchestration Hub").version("0.0.1").option("--db <path>","DB file path (overrides ORC_DB_PATH / config.json)").option("--port <n>","API port (overrides ORC_API_PORT / config.json)").option("--host <host>","API host (overrides ORC_API_HOST / config.json)").option("--secret <secret>","API bearer secret (overrides ORC_API_SECRET / config.json)").option("--log-level <level>","Log level: debug|info|warn|error (overrides ORC_LOG_LEVEL)").option("--runner-timeout <secs>","Default job timeout in seconds (overrides ORC_RUNNER_TIMEOUT)").option("--runner-max-jobs <n>","Max concurrent jobs (overrides ORC_RUNNER_MAX_JOBS)").option("--snapshot-max-bytes <n>","Session snapshot budget bytes (overrides ORC_SNAPSHOT_MAX_BYTES)").hook("preSubcommand",($,w)=>{let X=M1.opts();if(X.db)process.env.ORC_DB_PATH=X.db;if(X.port)process.env.ORC_API_PORT=X.port;if(X.host)process.env.ORC_API_HOST=X.host;if(X.secret)process.env.ORC_API_SECRET=X.secret;if(X.logLevel)process.env.ORC_LOG_LEVEL=X.logLevel;if(X.runnerTimeout)process.env.ORC_RUNNER_TIMEOUT=X.runnerTimeout;if(X.runnerMaxJobs)process.env.ORC_RUNNER_MAX_JOBS=X.runnerMaxJobs;if(X.snapshotMaxBytes)process.env.ORC_SNAPSHOT_MAX_BYTES=X.snapshotMaxBytes});M1.addCommand(DM());M1.addCommand(JM());M1.addCommand(GM());M1.addCommand(YM());M1.addCommand(wM());M1.addCommand(XM());M1.addCommand(AM());M1.command("api").description("Start the API server (use --port / --host / --db / --secret to configure)").action(async()=>{await Promise.resolve().then(() => (U7(),D7)),await new Promise(()=>{})});M1.command("home").description("Show ~/.orc directory contents and daemon state").action(()=>{let $=Q0();console.log(`ORC home: ${xw}
512
+ Jobs: ${E?.jobs.length??0} defined`),console.log(`Memory: ${J?.memories.length??0} recent entries`)})}function Fv($,w){return $.reduce((X,G)=>{let E=String(G[w]);return X[E]=(X[E]??0)+1,X},{})}async function yJ($,w){if(w.length===26)return w;let{data:X}=await $.tasks.list({limit:100}),G=(X?.tasks??[]).find((E)=>E.id.endsWith(w)||E.id===w);if(!G)return console.error(`Task not found: ${w}`),null;return G.id}function DM(){let $=new V$("task").description("Manage tasks");return $.command("list").description("List tasks").option("-p, --project <id>","Filter by project ID").option("-s, --status <status>","Filter by status").option("-l, --limit <n>","Max results","20").action(async(w)=>{let X=r0(),{data:G,error:E}=await X.tasks.list({project_id:w.project,status:w.status,limit:Number(w.limit)});if(E)return console.error("Error:",E);let J=G?.tasks??[];if(J.length===0)return console.log("No tasks found.");for(let W of J){let Y=Mv(W.status),A=zv(W.priority);if(console.log(`${Y} ${A} [${W.id.slice(-6)}] ${W.title}`),W.project_id)console.log(` project: ${W.project_id}`)}}),$.command("add <title>").description("Create a new task").option("-p, --project <id>","Project ID").option("--priority <p>","Priority (low/normal/high/critical)","normal").option("-b, --body <text>","Task body").action(async(w,X)=>{let G=r0(),{data:E,error:J}=await G.tasks.create({title:w,body:X.body,project_id:X.project,priority:X.priority});if(J)return console.error("Error:",J);console.log(`Created: [${E?.id.slice(-6)}] ${E?.title}`)}),$.command("done <id>").description("Mark task as done (accepts full ULID or last-6 suffix)").action(async(w)=>{let X=r0(),G=await yJ(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"done"});if(J)return console.error("Error:",J);console.log(`Done: [${E?.id.slice(-6)}] ${E?.title}`)}),$.command("review <id>").description("Submit task for review").action(async(w)=>{let X=r0(),G=await yJ(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"review"});if(J)return console.error("Error:",J);console.log(`In review: [${E?.id.slice(-6)}] ${E?.title}`)}),$.command("approve <id>").description("Approve a task in review (HITL)").option("-n, --note <text>","Optional note to add").action(async(w,X)=>{let G=r0(),E=await yJ(G,w);if(!E)return;let{data:J,error:W}=await G.tasks.get(E);if(W)return console.error("Error:",W);if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:Y,error:A}=await G.tasks.update(E,{status:"done"});if(A)return console.error("Error:",A);if(X.note)await G.tasks.addNote(E,X.note,"human");console.log(`Approved: [${Y?.id.slice(-6)}] ${Y?.title}`)}),$.command("reject <id>").description("Reject a task in review, request changes (HITL)").option("-r, --reason <text>","Reason for rejection").action(async(w,X)=>{let G=r0(),E=await yJ(G,w);if(!E)return;let{data:J,error:W}=await G.tasks.get(E);if(W)return console.error("Error:",W);if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:Y,error:A}=await G.tasks.update(E,{status:"changes_requested"});if(A)return console.error("Error:",A);if(X.reason)await G.tasks.addNote(E,X.reason,"human");console.log(`Changes requested: [${Y?.id.slice(-6)}] ${Y?.title}`)}),$}function Mv($){return{todo:"\u25CB",doing:"\u25D0",review:"\u25C9",changes_requested:"\u21A9",blocked:"\u2298",done:"\u25CF",cancelled:"\u2715"}[$]??"?"}function zv($){return{low:"\u2193",normal:"\u2192",high:"\u2191",critical:"\u203C"}[$]??" "}var M1=new V$().name("orc").description("Human + AI Orchestration Hub").version("0.1.2").option("--db <path>","DB file path (overrides ORC_DB_PATH / config.json)").option("--port <n>","API port (overrides ORC_API_PORT / config.json)").option("--host <host>","API host (overrides ORC_API_HOST / config.json)").option("--secret <secret>","API bearer secret (overrides ORC_API_SECRET / config.json)").option("--log-level <level>","Log level: debug|info|warn|error (overrides ORC_LOG_LEVEL)").option("--runner-timeout <secs>","Default job timeout in seconds (overrides ORC_RUNNER_TIMEOUT)").option("--runner-max-jobs <n>","Max concurrent jobs (overrides ORC_RUNNER_MAX_JOBS)").option("--snapshot-max-bytes <n>","Session snapshot budget bytes (overrides ORC_SNAPSHOT_MAX_BYTES)").hook("preSubcommand",($,w)=>{let X=M1.opts();if(X.db)process.env.ORC_DB_PATH=X.db;if(X.port)process.env.ORC_API_PORT=X.port;if(X.host)process.env.ORC_API_HOST=X.host;if(X.secret)process.env.ORC_API_SECRET=X.secret;if(X.logLevel)process.env.ORC_LOG_LEVEL=X.logLevel;if(X.runnerTimeout)process.env.ORC_RUNNER_TIMEOUT=X.runnerTimeout;if(X.runnerMaxJobs)process.env.ORC_RUNNER_MAX_JOBS=X.runnerMaxJobs;if(X.snapshotMaxBytes)process.env.ORC_SNAPSHOT_MAX_BYTES=X.snapshotMaxBytes});M1.addCommand(DM());M1.addCommand(JM());M1.addCommand(GM());M1.addCommand(YM());M1.addCommand(wM());M1.addCommand(XM());M1.addCommand(AM());M1.command("api").description("Start the API server (use --port / --host / --db / --secret to configure)").action(async()=>{await Promise.resolve().then(() => (U7(),D7)),await new Promise(()=>{})});M1.command("home").description("Show ~/.orc directory contents and daemon state").action(()=>{let $=Q0();console.log(`ORC home: ${xw}
513
513
  `);let w=[{label:"DB",path:$.db.path},{label:"config",path:`${xw}/config.json`},{label:"pid",path:QG},{label:"daemon log",path:`${xw}/daemon.log`}];for(let G of w)if(np(G.path)){let E=Math.round(pp(G.path).size/1024);console.log(` \u2713 ${G.label.padEnd(12)} ${G.path} (${E}KB)`)}else console.log(` \xB7 ${G.label.padEnd(12)} ${G.path} (not found)`);let X=fJ();if(console.log(),X)try{process.kill(X,0),console.log(` daemon \u25CF running pid:${X}`)}catch{console.log(` daemon \u25CB stopped (stale pid: ${X})`)}else console.log(" daemon \u25CB not running");console.log(),console.log(` config port:${$.api.port} host:${$.api.host} secret:${$.api.secret?"***":"(none)"}`)});M1.command("mcp").description("Start the MCP server (stdio)").action(async()=>{let{startStdioServer:$}=await oI().then(() => iI);await $()});M1.parseAsync(process.argv).catch(($)=>{console.error($ instanceof Error?$.message:$),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orc-ai",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Human + AI Orchestration Hub — persistent memory, task management, session continuity and multi-agent collaboration for Cursor, Claude Code, and Codex",
5
5
  "type": "module",
6
6
  "bin": {
@@ -53,7 +53,7 @@
53
53
  "license": "MIT",
54
54
  "repository": {
55
55
  "type": "git",
56
- "url": "https://github.com/niradler/orc"
56
+ "url": "git+https://github.com/niradler/orc.git"
57
57
  },
58
58
  "homepage": "https://github.com/niradler/orc",
59
59
  "publishConfig": {