orc-ai 0.1.8 → 0.1.9

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 +1 -1
package/dist/index.js CHANGED
@@ -593,5 +593,5 @@ Events (${W.length}/${J.events.length}):`);let U={file:"\uD83D\uDCC4",task:"\u27
593
593
  Snapshot:`),console.log(J.snapshot);else if(X.snapshot&&!J.snapshot)console.log(`
594
594
  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=s(),E=`http://${G.api.host}:${G.api.port}`,J={"Content-Type":"application/json"};if(G.api.secret)J.Authorization=`Bearer ${G.api.secret}`;let A=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}})}),W=await A.json();if(!A.ok)return console.error("Error:",W.error);if(l())return E0(W);console.log(W.result)}),$}import{readFileSync as pf}from"fs";function A7($,w){return`\x1B[${w}m${$}\x1B[0m`}function hQ(){let $=new G$("skill").description("Manage skills");return $.command("list").description("List installed skills").option("-q, --query <q>","Keyword search").option("--source <source>","Filter by source (builtin|user)").option("--reload","Force cache rebuild").action(async(w)=>{let X=G0(),{data:G,error:E}=await X.skills.list({q:w.query,source:w.source,reload:w.reload});if(E)return console.error("Error:",E);let J=G?.skills??[];if(l())return E0({skills:J});if(J.length===0)return console.log("No skills found.");for(let A of J){let W=A.source==="user"?A7(" [user]","36"):"",U=A.name.length>30?`${A.name.slice(0,29)}\u2026`:A.name,Y=A.description?` \u2014 ${A.description.slice(0,50)}`:"";console.log(` ${U.padEnd(32)}${W}${Y}`)}}),$.command("read <name>").description("Read a skill").option("--ref <filename>","Read a specific reference file").action(async(w,X)=>{let G=G0(),{data:E,error:J}=await G.skills.read(w,X.ref);if(J)return console.error("Error:",J);if(!E)return console.error("Skill not found.");if(l())return E0(E);if(X.ref){let A=E;console.log(A7(`# ${A.name}`,"1")),console.log(),console.log(A.content)}else{let A=E;if(console.log(A7(`# ${A.name}`,"1")),A.description)console.log(` ${A.description}`);if(console.log(` source: ${A.source}`),console.log(` path: ${A.path}`),A.references.length>0)console.log(` refs: ${A.references.map((W)=>W.name).join(", ")}`);console.log(),console.log(A.content)}}),$.command("create <name>").description("Create a new user skill").option("-c, --content <content>","SKILL.md content (or pipe via stdin)").option("-f, --file <path>","Read content from file").action(async(w,X)=>{let G;if(X.file)G=pf(X.file,"utf-8");else if(X.content)G=X.content;else{let W=[];for await(let U of process.stdin)W.push(U);G=Buffer.concat(W).toString("utf-8")}if(!G.trim())return console.error("Error: No content provided. Use --content, --file, or pipe via stdin.");let E=G0(),{data:J,error:A}=await E.skills.create({name:w,content:G});if(A)return console.error("Error:",A);if(!J)return console.error("Failed to create skill.");if(l())return E0(J);console.log(`Created skill: ${J.name} at ${J.path}`)}),$}function uQ(){return new G$("status").description("Show system status").action(async()=>{let $=G0(),{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();if(l())return E0({api:w,tasks:G?.tasks??[],jobs:E?.jobs??[],memories:J?.memories??[]});let A=rf(G?.tasks??[],"status");console.log(`
595
595
  Tasks:`);for(let[W,U]of Object.entries(A))console.log(` ${W.padEnd(20)} ${U}`);console.log(`
596
- Jobs: ${E?.jobs.length??0} defined`),console.log(`Memory: ${J?.memories.length??0} recent entries`)})}function rf($,w){return $.reduce((X,G)=>{let E=String(G[w]);return X[E]=(X[E]??0)+1,X},{})}U$();async function fX($,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 mQ(){let $=new G$("task").description("Manage tasks");return $.command("list").description("List tasks").option("-p, --project <name>","Filter by project name").option("--no-project","Show all tasks across projects").option("-s, --status <status>","Filter by status").option("-t, --tag <tag>","Filter by tag").option("-l, --limit <n>","Max results","20").option("--flat","Disable status grouping").action(async(w)=>{let X=G0(),G=w.project===!1,E=G?null:await g1(X,{project:w.project,noProject:G}),{data:J,error:A}=await X.tasks.list({...E?{project_id:E.id}:{},status:w.status,tag:w.tag,limit:Number(w.limit)});if(A){if(l())return B1(String(A));return console.error("Error:",A)}let W=J?.tasks??[];if(l())return E0({tasks:W,project:E?.name??null});if(W.length===0)return console.log("No tasks found.");let U=new Map;if(G){let{data:D}=await X.projects.list({limit:100});for(let N of D?.projects??[])U.set(N.id,N.name)}else if(E)console.log(xX(E.name,"1")),console.log();let Y=G;if(w.status||w.flat)for(let D of W){let N=cQ(D,Y?U:void 0);console.log(N)}else{let D=["review","changes_requested","doing","blocked","todo"],N=new Map;for(let H of W){let L=N.get(H.status)??[];L.push(H),N.set(H.status,L)}for(let H of D){let L=N.get(H);if(!L||L.length===0)continue;let F=`\u2500\u2500 ${H} (${L.length}) `;console.log(W7(F.padEnd(50,"\u2500"),H));for(let M of L)console.log(cQ(M,Y?U:void 0));console.log()}}}),$.command("add <title>").description("Create a new task").option("-p, --project <name>","Project name").option("--no-project","Create without project").option("--priority <p>","Priority (low/normal/high/critical)","normal").option("-b, --body <text>","Task body").action(async(w,X)=>{let G=G0(),E=X.project===!1,J=E?null:await g1(G,{project:X.project,noProject:E}),{data:A,error:W}=await G.tasks.create({title:w,body:X.body,...J?{project_id:J.id}:{},priority:X.priority});if(W){if(l())return B1(String(W));return console.error("Error:",W)}if(l())return E0(A);console.log(`Created: [${i(A?.id)}] ${A?.title}`)}),$.command("done <id>").description("Mark task as done (accepts full ULID or last-6 suffix)").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"done"});if(J){if(l())return B1(String(J));return console.error("Error:",J)}if(l())return E0(E);console.log(`Done: [${i(E?.id)}] ${E?.title}`)}),$.command("review <id>").description("Submit task for review").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"review"});if(J){if(l())return B1(String(J));return console.error("Error:",J)}if(l())return E0(E);console.log(`In review: [${i(E?.id)}] ${E?.title}`)}),$.command("approve <id>").description("Approve a task in review (HITL)").option("-c, --comment <text>","Optional comment to add").action(async(w,X)=>{let G=G0(),E=await fX(G,w);if(!E)return;let{data:J,error:A}=await G.tasks.get(E);if(A){if(l())return B1(String(A));return console.error("Error:",A)}if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:W,error:U}=await G.tasks.update(E,{status:"done"});if(U){if(l())return B1(String(U));return console.error("Error:",U)}if(X.comment)await G.tasks.addComment(E,X.comment,"human");if(l())return E0(W);console.log(`Approved: [${i(W?.id)}] ${W?.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=G0(),E=await fX(G,w);if(!E)return;let{data:J,error:A}=await G.tasks.get(E);if(A){if(l())return B1(String(A));return console.error("Error:",A)}if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:W,error:U}=await G.tasks.update(E,{status:"changes_requested"});if(U){if(l())return B1(String(U));return console.error("Error:",U)}if(X.reason)await G.tasks.addComment(E,X.reason,"human");if(l())return E0(W);console.log(`Changes requested: [${i(W?.id)}] ${W?.title}`)}),$.command("show <id>").description("Show task details").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.get(G);if(J){if(l())return B1(String(J));return console.error("Error:",J)}if(!E)return console.error("Task not found");if(l()){let{data:Y}=await X.tasks.listLinks(G),D=Y?.links??[];return E0({...E,links:D})}let A=(Y,D)=>{if(D!=null)console.log(` ${xX(Y.padEnd(14),"2")} ${D}`)};if(console.log(),console.log(` ${W7(U7(E.status),E.status)} ${xX(E.title,"1")}`),console.log(),A("ID",E.id),A("Status",`${U7(E.status)} ${E.status}`),A("Priority",`${nQ(E.priority)} ${E.priority}`),A("Progress",`${E.progress}%`),A("Project",E.project_id??void 0),A("Tags",E.tags?.join(", ")??void 0),A("Due",E.due_at??void 0),A("Author",E.author),A("Claimed by",E.claimed_by??void 0),A("Created",E.created_at),A("Updated",E.updated_at),E.body)console.log(),console.log(` ${xX("Body","2")}`),console.log(` ${E.body}`);let{data:W}=await X.tasks.listLinks(G),U=W?.links??[];if(U.length>0){console.log(),console.log(` ${xX("Links","2")}`);for(let Y of U){let D=Y.from_task_id===G?Y.to_task_id:Y.from_task_id;console.log(` ${Y.link_type} \u2192 [${i(D)}]`)}}console.log()}),$.command("update <id>").description("Update a task").option("--title <t>","New title").option("--body <text>","New body").option("--status <s>","New status (todo/doing/review/changes_requested/blocked/done/cancelled)").option("--priority <p>","Priority (low/normal/high/critical)").option("--progress <n>","Progress (0-100)").option("--tags <csv>","Comma-separated tags").option("-p, --project <name>","Move to project").option("--no-project","Remove from project").action(async(w,X)=>{let G=G0(),E=await fX(G,w);if(!E)return;let J={};if(X.title)J.title=X.title;if(X.body)J.body=X.body;if(X.status)J.status=X.status;if(X.priority)J.priority=X.priority;if(X.progress!==void 0&&X.progress!==!0)J.progress=Number(X.progress);if(X.tags)J.tags=X.tags.split(",").map((Y)=>Y.trim());if(X.project===!1)J.project_id=null;else if(typeof X.project==="string"){let Y=await g1(G,{project:X.project,noProject:!1});if(Y)J.project_id=Y.id}if(Object.keys(J).length===0)return console.error("No updates specified. Use --help to see options.");if(D1())return O1("update",`task [${i(E)}]`,J);let{data:W,error:U}=await G.tasks.update(E,J);if(U){if(l())return B1(String(U));return console.error("Error:",U)}if(l())return E0(W);console.log(`Updated: [${i(W?.id)}] ${W?.title}`)}),$.command("delete <id>").description("Delete a task").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;if(D1())return O1("delete",`task [${i(G)}]`);let{error:E}=await X.tasks.delete(G);if(E){if(l())return B1(String(E));return console.error("Error:",E)}if(l())return E0({deleted:G});console.log(`Deleted: [${i(G)}]`)}),$}function xX($,w){return process.stdout.isTTY?`\x1B[${w}m${$}\x1B[0m`:$}var of={review:"33",changes_requested:"33",doing:"36",blocked:"31",todo:"2",done:"32",cancelled:"2"};function W7($,w){return xX($,of[w]??"0")}function U7($){return{todo:"\u25CB",doing:"\u25D0",review:"\u25C9",changes_requested:"\u21A9",blocked:"\u2298",done:"\u25CF",cancelled:"\u2715"}[$]??"?"}function nQ($){return{low:"\u2193",normal:"\u2192",high:"\u2191",critical:"\u203C"}[$]??" "}function cQ($,w){let X=U7($.status),G=nQ($.priority),E=i($.id),J=$.title.length>40?`${$.title.slice(0,39)}\u2026`:$.title,A=` ${W7(X,$.status)} ${G} [${E}] ${J.padEnd(40)}`;if(w&&$.project_id)A+=` ${xX(w.get($.project_id)??i($.project_id),"2")}`;return A}var i$=new G$().name("orc").description("Human + AI Orchestration Hub").version(WG).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)").option("--json","Machine-readable JSON output").option("--dry-run","Preview changes without executing").hook("preSubcommand",($,w)=>{let X=i$.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});i$.addCommand(mQ());i$.addCommand(bQ());i$.addCommand(vQ());i$.addCommand(kQ());i$.addCommand(gQ());i$.addCommand(qQ());i$.addCommand(SQ());i$.addCommand(hQ());i$.addCommand(uQ());i$.addCommand(xQ());i$.command("api").description("Start the API server (use --port / --host / --db / --secret to configure)").action(async()=>{await Promise.resolve().then(() => (X7(),w7)),await new Promise(()=>{})});i$.command("home").description("Show ~/.orc directory contents and daemon state").action(()=>{let $=s();console.log(`ORC home: ${ew}
596
+ Jobs: ${E?.jobs.length??0} defined`),console.log(`Memory: ${J?.memories.length??0} recent entries`)})}function rf($,w){return $.reduce((X,G)=>{let E=String(G[w]);return X[E]=(X[E]??0)+1,X},{})}U$();async function fX($,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 mQ(){let $=new G$("task").description("Manage tasks");return $.command("list").description("List tasks").option("-p, --project <name>","Filter by project name").option("--no-project","Show all tasks across projects").option("-s, --status <status>","Filter by status").option("-t, --tag <tag>","Filter by tag").option("-l, --limit <n>","Max results","20").option("--flat","Disable status grouping").action(async(w)=>{let X=G0(),G=w.project===!1,E=G?null:await g1(X,{project:w.project,noProject:G}),{data:J,error:A}=await X.tasks.list({...E?{project_id:E.id}:{},status:w.status,tag:w.tag,limit:Number(w.limit)});if(A){if(l())return B1(String(A));return console.error("Error:",A)}let W=J?.tasks??[];if(l())return E0({tasks:W,project:E?.name??null});if(W.length===0)return console.log("No tasks found.");let U=new Map;if(G){let{data:D}=await X.projects.list({limit:100});for(let N of D?.projects??[])U.set(N.id,N.name)}else if(E)console.log(xX(E.name,"1")),console.log();let Y=G;if(w.status||w.flat)for(let D of W){let N=cQ(D,Y?U:void 0);console.log(N)}else{let D=["review","changes_requested","doing","blocked","todo"],N=new Map;for(let H of W){let L=N.get(H.status)??[];L.push(H),N.set(H.status,L)}for(let H of D){let L=N.get(H);if(!L||L.length===0)continue;let F=`\u2500\u2500 ${H} (${L.length}) `;console.log(W7(F.padEnd(50,"\u2500"),H));for(let M of L)console.log(cQ(M,Y?U:void 0));console.log()}}}),$.command("add <title>").description("Create a new task").option("-p, --project <name>","Project name").option("--no-project","Create without project").option("--priority <p>","Priority (low/normal/high/critical)","normal").option("-b, --body <text>","Task body").option("--skill <name>","Skill for agent execution (e.g. orc-coder)").option("--backend <backend>","Agent backend (claude|codex|cursor)").action(async(w,X)=>{let G=G0(),E=X.project===!1,J=E?null:await g1(G,{project:X.project,noProject:E}),{data:A,error:W}=await G.tasks.create({title:w,body:X.body,...J?{project_id:J.id}:{},priority:X.priority,skill_name:X.skill});if(W){if(l())return B1(String(W));return console.error("Error:",W)}if(l())return E0(A);console.log(`Created: [${i(A?.id)}] ${A?.title}`)}),$.command("done <id>").description("Mark task as done (accepts full ULID or last-6 suffix)").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"done"});if(J){if(l())return B1(String(J));return console.error("Error:",J)}if(l())return E0(E);console.log(`Done: [${i(E?.id)}] ${E?.title}`)}),$.command("review <id>").description("Submit task for review").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.update(G,{status:"review"});if(J){if(l())return B1(String(J));return console.error("Error:",J)}if(l())return E0(E);console.log(`In review: [${i(E?.id)}] ${E?.title}`)}),$.command("approve <id>").description("Approve a task in review (HITL)").option("-c, --comment <text>","Optional comment to add").action(async(w,X)=>{let G=G0(),E=await fX(G,w);if(!E)return;let{data:J,error:A}=await G.tasks.get(E);if(A){if(l())return B1(String(A));return console.error("Error:",A)}if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:W,error:U}=await G.tasks.update(E,{status:"done"});if(U){if(l())return B1(String(U));return console.error("Error:",U)}if(X.comment)await G.tasks.addComment(E,X.comment,"human");if(l())return E0(W);console.log(`Approved: [${i(W?.id)}] ${W?.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=G0(),E=await fX(G,w);if(!E)return;let{data:J,error:A}=await G.tasks.get(E);if(A){if(l())return B1(String(A));return console.error("Error:",A)}if(J?.status!=="review")return console.error(`Task is not in review (current: ${J?.status})`);let{data:W,error:U}=await G.tasks.update(E,{status:"changes_requested"});if(U){if(l())return B1(String(U));return console.error("Error:",U)}if(X.reason)await G.tasks.addComment(E,X.reason,"human");if(l())return E0(W);console.log(`Changes requested: [${i(W?.id)}] ${W?.title}`)}),$.command("show <id>").description("Show task details").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;let{data:E,error:J}=await X.tasks.get(G);if(J){if(l())return B1(String(J));return console.error("Error:",J)}if(!E)return console.error("Task not found");if(l()){let{data:Y}=await X.tasks.listLinks(G),D=Y?.links??[];return E0({...E,links:D})}let A=(Y,D)=>{if(D!=null)console.log(` ${xX(Y.padEnd(14),"2")} ${D}`)};if(console.log(),console.log(` ${W7(U7(E.status),E.status)} ${xX(E.title,"1")}`),console.log(),A("ID",E.id),A("Status",`${U7(E.status)} ${E.status}`),A("Priority",`${nQ(E.priority)} ${E.priority}`),A("Progress",`${E.progress}%`),A("Project",E.project_id??void 0),A("Tags",E.tags?.join(", ")??void 0),A("Due",E.due_at??void 0),A("Author",E.author),A("Claimed by",E.claimed_by??void 0),A("Created",E.created_at),A("Updated",E.updated_at),E.body)console.log(),console.log(` ${xX("Body","2")}`),console.log(` ${E.body}`);let{data:W}=await X.tasks.listLinks(G),U=W?.links??[];if(U.length>0){console.log(),console.log(` ${xX("Links","2")}`);for(let Y of U){let D=Y.from_task_id===G?Y.to_task_id:Y.from_task_id;console.log(` ${Y.link_type} \u2192 [${i(D)}]`)}}console.log()}),$.command("update <id>").description("Update a task").option("--title <t>","New title").option("--body <text>","New body").option("--status <s>","New status (todo/doing/review/changes_requested/blocked/done/cancelled)").option("--priority <p>","Priority (low/normal/high/critical)").option("--progress <n>","Progress (0-100)").option("--tags <csv>","Comma-separated tags").option("-p, --project <name>","Move to project").option("--no-project","Remove from project").action(async(w,X)=>{let G=G0(),E=await fX(G,w);if(!E)return;let J={};if(X.title)J.title=X.title;if(X.body)J.body=X.body;if(X.status)J.status=X.status;if(X.priority)J.priority=X.priority;if(X.progress!==void 0&&X.progress!==!0)J.progress=Number(X.progress);if(X.tags)J.tags=X.tags.split(",").map((Y)=>Y.trim());if(X.project===!1)J.project_id=null;else if(typeof X.project==="string"){let Y=await g1(G,{project:X.project,noProject:!1});if(Y)J.project_id=Y.id}if(Object.keys(J).length===0)return console.error("No updates specified. Use --help to see options.");if(D1())return O1("update",`task [${i(E)}]`,J);let{data:W,error:U}=await G.tasks.update(E,J);if(U){if(l())return B1(String(U));return console.error("Error:",U)}if(l())return E0(W);console.log(`Updated: [${i(W?.id)}] ${W?.title}`)}),$.command("delete <id>").description("Delete a task").action(async(w)=>{let X=G0(),G=await fX(X,w);if(!G)return;if(D1())return O1("delete",`task [${i(G)}]`);let{error:E}=await X.tasks.delete(G);if(E){if(l())return B1(String(E));return console.error("Error:",E)}if(l())return E0({deleted:G});console.log(`Deleted: [${i(G)}]`)}),$}function xX($,w){return process.stdout.isTTY?`\x1B[${w}m${$}\x1B[0m`:$}var of={review:"33",changes_requested:"33",doing:"36",blocked:"31",todo:"2",done:"32",cancelled:"2"};function W7($,w){return xX($,of[w]??"0")}function U7($){return{todo:"\u25CB",doing:"\u25D0",review:"\u25C9",changes_requested:"\u21A9",blocked:"\u2298",done:"\u25CF",cancelled:"\u2715"}[$]??"?"}function nQ($){return{low:"\u2193",normal:"\u2192",high:"\u2191",critical:"\u203C"}[$]??" "}function cQ($,w){let X=U7($.status),G=nQ($.priority),E=i($.id),J=$.title.length>40?`${$.title.slice(0,39)}\u2026`:$.title,A=` ${W7(X,$.status)} ${G} [${E}] ${J.padEnd(40)}`;if(w&&$.project_id)A+=` ${xX(w.get($.project_id)??i($.project_id),"2")}`;return A}var i$=new G$().name("orc").description("Human + AI Orchestration Hub").version(WG).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)").option("--json","Machine-readable JSON output").option("--dry-run","Preview changes without executing").hook("preSubcommand",($,w)=>{let X=i$.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});i$.addCommand(mQ());i$.addCommand(bQ());i$.addCommand(vQ());i$.addCommand(kQ());i$.addCommand(gQ());i$.addCommand(qQ());i$.addCommand(SQ());i$.addCommand(hQ());i$.addCommand(uQ());i$.addCommand(xQ());i$.command("api").description("Start the API server (use --port / --host / --db / --secret to configure)").action(async()=>{await Promise.resolve().then(() => (X7(),w7)),await new Promise(()=>{})});i$.command("home").description("Show ~/.orc directory contents and daemon state").action(()=>{let $=s();console.log(`ORC home: ${ew}
597
597
  `);let w=[{label:"DB",path:$.db.path},{label:"config",path:`${ew}/config.json`},{label:"pid",path:hG},{label:"daemon log",path:`${ew}/daemon.log`}];for(let G of w)if(Ki(G.path)){let E=Math.round(ji(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=MJ();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)"}`)});i$.command("mcp").description("Start the MCP server (stdio)").action(async()=>{let{startStdioServer:$}=await q2().then(() => P2);await $()});i$.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.8",
3
+ "version": "0.1.9",
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": {