@zenon-red/probe 1.1.0 → 1.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/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as e}from"node:module";import{defineCommand as t,runMain as n}from"citty";import{Buffer as r}from"node:buffer";import{homedir as
|
|
3
|
-
`)},A=e=>{let t=[...e.notes||[]],n=(e.options||[]).some(e=>e.name.includes(`--host`)&&e.name.includes(`--module`)),r=t.some(e=>e.includes(`--host`)&&e.includes(`--module`));n&&!r&&t.push(`--host sets the SpacetimeDB server endpoint; --module sets the target module/database name (default: nexus).`);let i=[];i.push(`${
|
|
4
|
-
`))},
|
|
5
|
-
User overrides:`);for(let[e,n]of Object.entries(t))console.log(` ${e}: ${JSON.stringify(n)}`)}break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: get, set, list`)}}catch(e){E(`CONFIG_ERROR`,e instanceof Error?e.message:`Configuration error`)}}});_.object(`Agent`,{id:_.string(),name:_.string(),get role(){return F},capabilities:_.array(_.string()),get status(){return ut},zenonAddress:_.string(),identity:_.identity(),lastHeartbeat:_.timestamp(),currentTaskId:_.option(_.u64()),createdAt:_.timestamp(),lastActiveAt:_.timestamp()});const F=_.enum(`AgentRole`,{Zoe:_.unit(),Admin:_.unit(),Zeno:_.unit()}),ut=_.enum(`AgentStatus`,{Online:_.unit(),Offline:_.unit(),Working:_.unit()});_.object(`Channel`,{id:_.u64(),name:_.string(),createdBy:_.string(),createdAt:_.timestamp()}),_.object(`Config`,{key:_.string(),value:_.string()});const dt=_.enum(`DependencyType`,{Blocks:_.unit(),ParentChild:_.unit()}),ft=_.object(`DimensionScore`,{dimension:_.string(),score:_.u8()});_.object(`DiscoveredTask`,{id:_.u64(),discoveredBy:_.string(),currentTaskId:_.u64(),projectId:_.u64(),title:_.string(),description:_.string(),priority:_.u8(),taskType:_.string(),severity:_.string(),get status(){return pt},createdTaskId:_.option(_.u64()),rejectionReason:_.option(_.string()),createdAt:_.timestamp(),reviewedAt:_.option(_.timestamp()),reviewedBy:_.option(_.string())});const pt=_.enum(`DiscoveredTaskStatus`,{PendingReview:_.unit(),Approved:_.unit(),Rejected:_.unit(),EscalatedToIdea:_.unit()}),mt=_.enum(`DiscoveryDecision`,{ApproveAsTask:_.unit(),Reject:_.unit(),EscalateToIdea:_.unit()});_.object(`EvaluationDimension`,{id:_.u64(),name:_.string(),label:_.string(),weight:_.f64(),minScore:_.u8(),maxScore:_.u8(),description:_.string(),active:_.bool(),sortOrder:_.u16()}),_.object(`Idea`,{id:_.u64(),title:_.string(),description:_.string(),category:_.string(),get status(){return ht},activeAgentCount:_.u32(),quorum:_.u16(),approvalThreshold:_.u16(),vetoThreshold:_.u16(),upVotes:_.u16(),downVotes:_.u16(),vetoCount:_.u16(),totalVotes:_.u16(),createdBy:_.string(),createdAt:_.timestamp(),updatedAt:_.timestamp(),computedScore:_.f64()});const ht=_.enum(`IdeaStatus`,{Voting:_.unit(),ApprovedForProject:_.unit(),Rejected:_.unit(),Implemented:_.unit()});_.object(`IdentityRole`,{identity:_.identity(),get role(){return F}}),_.object(`Message`,{id:_.u64(),channelId:_.u64(),senderId:_.string(),content:_.string(),get messageType(){return I},contextId:_.option(_.string()),createdAt:_.timestamp()});const I=_.enum(`MessageType`,{User:_.unit(),System:_.unit(),Directive:_.unit()});_.object(`Project`,{id:_.u64(),sourceIdeaId:_.u64(),name:_.string(),githubRepo:_.string(),description:_.string(),get status(){return gt},createdAt:_.timestamp(),createdBy:_.string()}),_.object(`ProjectChannel`,{projectId:_.u64(),createdAt:_.timestamp()}),_.object(`ProjectMessage`,{id:_.u64(),projectId:_.u64(),senderId:_.string(),content:_.string(),get messageType(){return I},contextId:_.option(_.string()),createdAt:_.timestamp()});const gt=_.enum(`ProjectStatus`,{Active:_.unit(),Paused:_.unit()});_.object(`Task`,{id:_.u64(),projectId:_.u64(),title:_.string(),description:_.string(),get status(){return L},assignedTo:_.option(_.string()),claimedAt:_.option(_.timestamp()),githubIssueUrl:_.option(_.string()),githubPrUrl:_.option(_.string()),priority:_.u8(),sourceIdeaId:_.option(_.u64()),reviewCount:_.u8(),get blockedFromStatus(){return _.option(L)},archivedReason:_.option(_.string()),statusChangedBy:_.option(_.identity()),statusChangedAt:_.option(_.timestamp()),createdAt:_.timestamp(),updatedAt:_.timestamp(),createdBy:_.string()}),_.object(`TaskDependency`,{id:_.u64(),taskId:_.u64(),dependsOnId:_.u64(),get dependencyType(){return dt},createdAt:_.timestamp()});const L=_.enum(`TaskStatus`,{Open:_.unit(),Claimed:_.unit(),InProgress:_.unit(),Review:_.unit(),Completed:_.unit(),Blocked:_.unit(),Archived:_.unit()});_.object(`Vote`,{id:_.u64(),ideaId:_.u64(),agentId:_.string(),get voteType(){return _t},get scores(){return _.array(ft)},createdAt:_.timestamp()});const _t=_.enum(`VoteType`,{Up:_.unit(),Down:_.unit(),Veto:_.unit()});var vt={taskId:_.u64(),dependsOnId:_.u64(),get dependencyType(){return dt}},yt={taskId:_.u64()},bt={sourceIdeaId:_.u64(),name:_.string(),githubRepo:_.string(),description:_.string()},xt={projectId:_.u64(),title:_.string(),description:_.string(),priority:_.u8(),sourceIdeaId:_.option(_.u64()),githubIssueUrl:_.option(_.string())},St={currentTaskId:_.u64(),projectId:_.u64(),title:_.string(),description:_.string(),priority:_.u8(),taskType:_.string(),severity:_.string()},Ct={agentId:_.string()},wt={ideaId:_.u64()},Tt={title:_.string(),description:_.string(),category:_.string()},Et={agentId:_.string(),name:_.string(),zenonAddress:_.string(),get role(){return _.option(F)}},Dt={discoveryId:_.u64(),get decision(){return mt},reason:_.option(_.string())},Ot={},kt={channelId:_.u64(),content:_.string(),get messageType(){return I},contextId:_.option(_.string())},At={projectId:_.u64(),content:_.string(),get messageType(){return I},contextId:_.option(_.string())},jt={get status(){return ut},taskId:_.option(_.u64())},Mt={capabilities:_.array(_.string())},Nt={projectId:_.u64(),get status(){return gt}},Pt={taskId:_.u64(),get status(){return L},githubPrUrl:_.option(_.string()),archiveReason:_.option(_.string())},Ft={ideaId:_.u64(),get scores(){return _.array(ft)}},It=_.row({id:_.string().primaryKey(),name:_.string(),get role(){return F},capabilities:_.array(_.string()),get status(){return ut},zenonAddress:_.string().name(`zenon_address`),identity:_.identity(),lastHeartbeat:_.timestamp().name(`last_heartbeat`),currentTaskId:_.option(_.u64()).name(`current_task_id`),createdAt:_.timestamp().name(`created_at`),lastActiveAt:_.timestamp().name(`last_active_at`)}),Lt=_.row({id:_.u64().primaryKey(),name:_.string(),createdBy:_.string().name(`created_by`),createdAt:_.timestamp().name(`created_at`)}),Rt=_.row({key:_.string().primaryKey(),value:_.string()}),zt=_.row({id:_.u64().primaryKey(),discoveredBy:_.string().name(`discovered_by`),currentTaskId:_.u64().name(`current_task_id`),projectId:_.u64().name(`project_id`),title:_.string(),description:_.string(),priority:_.u8(),taskType:_.string().name(`task_type`),severity:_.string(),get status(){return pt},createdTaskId:_.option(_.u64()).name(`created_task_id`),rejectionReason:_.option(_.string()).name(`rejection_reason`),createdAt:_.timestamp().name(`created_at`),reviewedAt:_.option(_.timestamp()).name(`reviewed_at`),reviewedBy:_.option(_.string()).name(`reviewed_by`)}),Bt=_.row({id:_.u64().primaryKey(),name:_.string(),label:_.string(),weight:_.f64(),minScore:_.u8().name(`min_score`),maxScore:_.u8().name(`max_score`),description:_.string(),active:_.bool(),sortOrder:_.u16().name(`sort_order`)}),Vt=_.row({id:_.u64().primaryKey(),title:_.string(),description:_.string(),category:_.string(),get status(){return ht},activeAgentCount:_.u32().name(`active_agent_count`),quorum:_.u16(),approvalThreshold:_.u16().name(`approval_threshold`),vetoThreshold:_.u16().name(`veto_threshold`),upVotes:_.u16().name(`up_votes`),downVotes:_.u16().name(`down_votes`),vetoCount:_.u16().name(`veto_count`),totalVotes:_.u16().name(`total_votes`),createdBy:_.string().name(`created_by`),createdAt:_.timestamp().name(`created_at`),updatedAt:_.timestamp().name(`updated_at`),computedScore:_.f64().name(`computed_score`)}),Ht=_.row({identity:_.identity().primaryKey(),get role(){return F}}),Ut=_.row({id:_.u64().primaryKey(),channelId:_.u64().name(`channel_id`),senderId:_.string().name(`sender_id`),content:_.string(),get messageType(){return I.name(`message_type`)},contextId:_.option(_.string()).name(`context_id`),createdAt:_.timestamp().name(`created_at`)}),Wt=_.row({projectId:_.u64().primaryKey().name(`project_id`),createdAt:_.timestamp().name(`created_at`)}),Gt=_.row({id:_.u64().primaryKey(),projectId:_.u64().name(`project_id`),senderId:_.string().name(`sender_id`),content:_.string(),get messageType(){return I.name(`message_type`)},contextId:_.option(_.string()).name(`context_id`),createdAt:_.timestamp().name(`created_at`)}),Kt=_.row({id:_.u64().primaryKey(),sourceIdeaId:_.u64().name(`source_idea_id`),name:_.string(),githubRepo:_.string().name(`github_repo`),description:_.string(),get status(){return gt},createdAt:_.timestamp().name(`created_at`),createdBy:_.string().name(`created_by`)}),qt=_.row({id:_.u64().primaryKey(),taskId:_.u64().name(`task_id`),dependsOnId:_.u64().name(`depends_on_id`),get dependencyType(){return dt.name(`dependency_type`)},createdAt:_.timestamp().name(`created_at`)}),Jt=_.row({id:_.u64().primaryKey(),projectId:_.u64().name(`project_id`),title:_.string(),description:_.string(),get status(){return L},assignedTo:_.option(_.string()).name(`assigned_to`),claimedAt:_.option(_.timestamp()).name(`claimed_at`),githubIssueUrl:_.option(_.string()).name(`github_issue_url`),githubPrUrl:_.option(_.string()).name(`github_pr_url`),priority:_.u8(),sourceIdeaId:_.option(_.u64()).name(`source_idea_id`),reviewCount:_.u8().name(`review_count`),get blockedFromStatus(){return _.option(L).name(`blocked_from_status`)},archivedReason:_.option(_.string()).name(`archived_reason`),statusChangedBy:_.option(_.identity()).name(`status_changed_by`),statusChangedAt:_.option(_.timestamp()).name(`status_changed_at`),createdAt:_.timestamp().name(`created_at`),updatedAt:_.timestamp().name(`updated_at`),createdBy:_.string().name(`created_by`)}),Yt=_.row({id:_.u64().primaryKey(),ideaId:_.u64().name(`idea_id`),agentId:_.string().name(`agent_id`),get voteType(){return _t.name(`vote_type`)},get scores(){return _.array(ft)},createdAt:_.timestamp().name(`created_at`)});const Xt=xe({agents:v({name:`agents`,indexes:[{accessor:`id`,name:`agents_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`identity`,name:`agents_identity_idx_btree`,algorithm:`btree`,columns:[`identity`]}],constraints:[{name:`agents_id_key`,constraint:`unique`,columns:[`id`]},{name:`agents_identity_key`,constraint:`unique`,columns:[`identity`]}]},It),channels:v({name:`channels`,indexes:[{accessor:`id`,name:`channels_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_name`,name:`channels_name_idx_btree`,algorithm:`btree`,columns:[`name`]}],constraints:[{name:`channels_id_key`,constraint:`unique`,columns:[`id`]}]},Lt),config:v({name:`config`,indexes:[{accessor:`key`,name:`config_key_idx_btree`,algorithm:`btree`,columns:[`key`]}],constraints:[{name:`config_key_key`,constraint:`unique`,columns:[`key`]}]},Rt),discovered_tasks:v({name:`discovered_tasks`,indexes:[{accessor:`by_created_at`,name:`discovered_tasks_created_at_idx_btree`,algorithm:`btree`,columns:[`createdAt`]},{accessor:`id`,name:`discovered_tasks_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_priority`,name:`discovered_tasks_priority_idx_btree`,algorithm:`btree`,columns:[`priority`]},{accessor:`by_status`,name:`discovered_tasks_status_idx_btree`,algorithm:`btree`,columns:[`status`]}],constraints:[{name:`discovered_tasks_id_key`,constraint:`unique`,columns:[`id`]}]},zt),evaluation_dimensions:v({name:`evaluation_dimensions`,indexes:[{accessor:`by_active`,name:`evaluation_dimensions_active_sort_order_idx_btree`,algorithm:`btree`,columns:[`active`,`sortOrder`]},{accessor:`id`,name:`evaluation_dimensions_id_idx_btree`,algorithm:`btree`,columns:[`id`]}],constraints:[{name:`evaluation_dimensions_id_key`,constraint:`unique`,columns:[`id`]}]},Bt),ideas:v({name:`ideas`,indexes:[{accessor:`id`,name:`ideas_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_status`,name:`ideas_status_idx_btree`,algorithm:`btree`,columns:[`status`]}],constraints:[{name:`ideas_id_key`,constraint:`unique`,columns:[`id`]}]},Vt),identity_roles:v({name:`identity_roles`,indexes:[{accessor:`identity`,name:`identity_roles_identity_idx_btree`,algorithm:`btree`,columns:[`identity`]}],constraints:[{name:`identity_roles_identity_key`,constraint:`unique`,columns:[`identity`]}]},Ht),messages:v({name:`messages`,indexes:[{accessor:`by_channel`,name:`messages_channel_id_created_at_idx_btree`,algorithm:`btree`,columns:[`channelId`,`createdAt`]},{accessor:`id`,name:`messages_id_idx_btree`,algorithm:`btree`,columns:[`id`]}],constraints:[{name:`messages_id_key`,constraint:`unique`,columns:[`id`]}]},Ut),project_channels:v({name:`project_channels`,indexes:[{accessor:`project_id`,name:`project_channels_project_id_idx_btree`,algorithm:`btree`,columns:[`projectId`]}],constraints:[{name:`project_channels_project_id_key`,constraint:`unique`,columns:[`projectId`]}]},Wt),project_messages:v({name:`project_messages`,indexes:[{accessor:`id`,name:`project_messages_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_project`,name:`project_messages_project_id_idx_btree`,algorithm:`btree`,columns:[`projectId`]}],constraints:[{name:`project_messages_id_key`,constraint:`unique`,columns:[`id`]}]},Gt),projects:v({name:`projects`,indexes:[{accessor:`id`,name:`projects_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_source_idea_id`,name:`projects_source_idea_id_idx_btree`,algorithm:`btree`,columns:[`sourceIdeaId`]}],constraints:[{name:`projects_id_key`,constraint:`unique`,columns:[`id`]}]},Kt),task_dependencies:v({name:`task_dependencies`,indexes:[{accessor:`by_depends_on_id`,name:`task_dependencies_depends_on_id_idx_btree`,algorithm:`btree`,columns:[`dependsOnId`]},{accessor:`id`,name:`task_dependencies_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_task_id`,name:`task_dependencies_task_id_idx_btree`,algorithm:`btree`,columns:[`taskId`]}],constraints:[{name:`task_dependencies_id_key`,constraint:`unique`,columns:[`id`]}]},qt),tasks:v({name:`tasks`,indexes:[{accessor:`by_assigned_to`,name:`tasks_assigned_to_idx_btree`,algorithm:`btree`,columns:[`assignedTo`]},{accessor:`id`,name:`tasks_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_priority`,name:`tasks_priority_idx_btree`,algorithm:`btree`,columns:[`priority`]},{accessor:`by_project_id`,name:`tasks_project_id_idx_btree`,algorithm:`btree`,columns:[`projectId`]},{accessor:`by_status`,name:`tasks_status_idx_btree`,algorithm:`btree`,columns:[`status`]}],constraints:[{name:`tasks_id_key`,constraint:`unique`,columns:[`id`]}]},Jt),votes:v({name:`votes`,indexes:[{accessor:`id`,name:`votes_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_idea_agent`,name:`votes_idea_id_agent_id_idx_btree`,algorithm:`btree`,columns:[`ideaId`,`agentId`]},{accessor:`by_idea`,name:`votes_idea_id_idx_btree`,algorithm:`btree`,columns:[`ideaId`]}],constraints:[{name:`votes_id_key`,constraint:`unique`,columns:[`id`]}]},Yt)}),Zt=be(g(`add_task_dependency`,vt),g(`claim_task`,yt),g(`create_project`,bt),g(`create_task`,xt),g(`discover_task`,St),g(`heartbeat`,Ct),g(`mark_idea_implemented`,wt),g(`propose_idea`,Tt),g(`register_agent`,Et),g(`review_discovered_task`,Dt),g(`seed_ui_data`,Ot),g(`send_message`,kt),g(`send_project_message`,At),g(`set_agent_status`,jt),g(`update_agent_capabilities`,Mt),g(`update_project_status`,Nt),g(`update_task_status`,Pt),g(`vote_idea`,Ft)),Qt=ye(),$t={versionInfo:{cliVersion:`2.1.0`},tables:Xt.schemaType.tables,reducers:Zt.reducersType.reducers,...Qt};ve(Xt.schemaType),_e(Zt.reducersType.reducers);var en=class extends ge{},tn=class extends me{},nn=class e extends he{static builder=()=>new tn($t,t=>new e(t));subscriptionBuilder=()=>new en(this)};function R(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var z=class e{conn;identity;token;auth;config;disposed=!1;constructor(e,t,n,r,i){this.conn=e,this.config=t,this.identity=n,this.token=r,this.auth=i}get db(){return this.conn.db}iter(e){let t=this.db[e];return t?.iter?Array.from(t.iter()):[]}async[Symbol.asyncDispose](){this.disposed||(this.disposed=!0,this.conn.disconnect())}static async create(t={}){let n=await S(),r=t.host||n.spacetime.host,i=t.module||n.spacetime.module,a=t.wallet||n.defaultWallet,o=t.token,s;if(!o&&a){let e=await M(a);e&&(o=e.token,s={wallet:a,token:e.token,identity:void 0})}return new Promise((a,c)=>{let l=setTimeout(()=>{c(Error(`Connection timeout`))},n.requestTimeout),u=console.log,d=console.error,f=(...e)=>{e.some(e=>typeof e==`string`&&e.includes(`Connecting to SpacetimeDB WS...`))||u(...e)},p=(...e)=>{process.env.PROBE_DEBUG&&d(`[probe:debug]`,...e)};console.log=f,console.error=p;try{nn.builder().withUri(r).withDatabaseName(i).withToken(o||void 0).onConnect((r,i,o)=>{clearTimeout(l),s&&(s.identity=i),t.subscribe===!1?a(new e(r,n,i,o,s)):r.subscriptionBuilder().onApplied(()=>{a(new e(r,n,i,o,s))}).onError(e=>{c(Error(`Subscription error: ${e.event?.message||`Unknown error`}`))}).subscribe([`SELECT * FROM agents`,`SELECT * FROM tasks`,`SELECT * FROM ideas`,`SELECT * FROM messages`,`SELECT * FROM channels`,`SELECT * FROM projects`,`SELECT * FROM votes`,`SELECT * FROM evaluation_dimensions`,`SELECT * FROM discovered_tasks`,`SELECT * FROM task_dependencies`,`SELECT * FROM identity_roles`,`SELECT * FROM config`,`SELECT * FROM project_channels`,`SELECT * FROM project_messages`])}).onDisconnect((...e)=>{t.onDisconnect?.(...e)}).onConnectError((e,t)=>{clearTimeout(l);let n=t.message.toLowerCase();n.includes(`unauthorized`)||n.includes(`401`)?c(Error("Authentication required. Run `probe auth <wallet> --save` first.")):c(Error(`Connection failed: ${t.message}`))}).build()}finally{console.log=u,console.error=d}})}};async function rn(e){let t=await S(),n=e.wallet||t.defaultWallet;n||E(`WALLET_REQUIRED`,`Wallet required. Use --wallet or set default wallet.`),await P(n)||E(`WALLET_NOT_FOUND`,`Wallet not found: ${n}`);let r=await M(n);return r||E(`AUTH_REQUIRED`,"No cached token. Run `probe auth <wallet> --save` first."),z.create({...e,wallet:n,token:r.token})}async function B(e,t){try{var n=R();return await t(n.a(await rn(e)))}catch(e){n.e=e}finally{await n.d()}}async function V(e,t,n){return new Promise((r,i)=>{let a=!1,o=Math.max(1e3,e.config.requestTimeout),s=e.conn.reducers[t];if(typeof s!=`function`){i(Error(`Reducer not found: ${t}`));return}let c=(e,t)=>{if(a)return;a=!0,d();let n=e.event.status;n.tag===`Failed`?i(Error(n.value||`Reducer failed`)):n.tag===`OutOfEnergy`?i(Error(`Transaction out of energy`)):r()},l=`on${t.charAt(0).toUpperCase()+t.slice(1)}`,u=`removeOn${t.charAt(0).toUpperCase()+t.slice(1)}`,d=()=>{clearTimeout(f);let t=e.conn.reducers[u];typeof t==`function`&&t(c)},f=setTimeout(()=>{a||(a=!0,d(),i(Error(`Reducer timed out after ${o}ms: ${t}`)))},o),p=e.conn.reducers[l];typeof p==`function`&&p(c),s(n)})}function an(e){return Se(e)}function H(e,t,n){if(t.length===0)return Se({[e]:[]});let r=n||Object.keys(t[0]),i=t.map(e=>{let t={};for(let n of r)t[n]=e[n];return t});return Se({[e]:i})}var on=t({meta:{name:`doctor`,description:`Run environment and connectivity diagnostics`},args:{wallet:{type:`string`,description:`Wallet name override for auth checks`},host:{type:`string`,description:`SpacetimeDB host override`},module:{type:`string`,description:`SpacetimeDB module override`},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){if(e.json&&C(!0),j()){A({command:`probe doctor`,description:`Validate Probe config, auth, and Nexus connectivity`,usage:[`probe doctor`,`probe doctor --wallet my-wallet --host ws://127.0.0.1:3000 --module nexus`],options:[{name:`--wallet`,detail:`Wallet override for auth checks`},{name:`--host, --module`,detail:`SpacetimeDB overrides`},{name:`--json`,detail:`JSON output mode`}]});return}let t=[],n=(e,n,r)=>{t.push({check:e,status:n,detail:r})},r=null;try{r=await S(),n(`config`,`pass`,`Loaded Probe configuration`)}catch(e){n(`config`,`fail`,e instanceof Error?e.message:`Failed to load configuration`)}let i=e.wallet||r?.defaultWallet;i?n(`wallet.selected`,`pass`,`Using wallet '${i}'`):n(`wallet.selected`,`fail`,`No wallet selected (set --wallet or defaultWallet)`);let a=!1;if(i){let e=await P(i);e?(a=!0,n(`wallet.exists`,`pass`,`Address ${e.address}`)):n(`wallet.exists`,`fail`,`Wallet '${i}' not found`)}let o=null;if(i&&a){let e=await M(i);if(!e)n(`auth.token`,`fail`,`No cached token (run probe auth)`);else{o=e.token;let t=new Date(e.expiresAt);Number.isNaN(t.getTime())?n(`auth.token`,`warn`,`Token exists but expiry is invalid`):t.getTime()<=Date.now()?n(`auth.token`,`fail`,`Token expired at ${t.toISOString()}`):n(`auth.token`,`pass`,`Token valid until ${t.toISOString()}`)}}if(r){let t=e.host||r.spacetime.host,a=e.module||r.spacetime.module;if(n(`nexus.target`,`pass`,`${t} / ${a}`),o)try{try{var s=R();n(`nexus.connect`,`pass`,`Connected as ${s.a(await z.create({host:t,module:a,wallet:i,token:o,subscribe:!1})).identity?.toHexString()||`unknown`}`)}catch(e){s.e=e}finally{await s.d()}}catch(e){n(`nexus.connect`,`fail`,e instanceof Error?e.message:`Connection failed`)}else n(`nexus.connect`,`warn`,`Skipped connection check (no valid token)`)}let c=t.reduce((e,t)=>(t.status===`pass`?e.pass+=1:t.status===`warn`?e.warn+=1:e.fail+=1,e),{pass:0,warn:0,fail:0}),l=c.fail===0;T({ok:l,counts:c,checks:t}),w()||(console.log(H(`doctor_checks`,t)),console.log(H(`doctor_summary`,[{ok:l,...c}])))}});const U={values:[`Open`,`Claimed`,`InProgress`,`Review`,`Completed`,`Blocked`,`Archived`],is:{open:e=>e.tag===`Open`,claimed:e=>e.tag===`Claimed`,inProgress:e=>e.tag===`InProgress`,review:e=>e.tag===`Review`,completed:e=>e.tag===`Completed`,blocked:e=>e.tag===`Blocked`,archived:e=>e.tag===`Archived`,active:e=>[`Open`,`Claimed`,`InProgress`,`Review`].includes(e.tag),terminal:e=>[`Completed`,`Blocked`,`Archived`].includes(e.tag)},fromString(e){return{open:{tag:`Open`},claimed:{tag:`Claimed`},in_progress:{tag:`InProgress`},inprogress:{tag:`InProgress`},review:{tag:`Review`},completed:{tag:`Completed`},merged:{tag:`Completed`},blocked:{tag:`Blocked`},archived:{tag:`Archived`}}[e.toLowerCase().replace(/[_\s]/g,``)]??{tag:`Open`}},matches(e,t){let n=t.toLowerCase().replace(/[_\s]/g,``);return n===`merged`?e.tag===`Completed`:e.tag.toLowerCase()===n},display(e){return{InProgress:`IN PROGRESS`}[e.tag]??e.tag.toUpperCase()}},sn={values:[`Voting`,`ApprovedForProject`,`Rejected`,`Implemented`],is:{voting:e=>e.tag===`Voting`,approved:e=>e.tag===`ApprovedForProject`,rejected:e=>e.tag===`Rejected`,implemented:e=>e.tag===`Implemented`,active:e=>e.tag===`Voting`,terminal:e=>[`ApprovedForProject`,`Rejected`,`Implemented`].includes(e.tag)},fromString(e){return{voting:{tag:`Voting`},approved:{tag:`ApprovedForProject`},approved_for_project:{tag:`ApprovedForProject`},rejected:{tag:`Rejected`},implemented:{tag:`Implemented`}}[e.toLowerCase().replace(/[_\s]/g,``)]??{tag:`Voting`}},matches(e,t){let n=t.toLowerCase().replace(/[_\s]/g,``);return n===`approved`?e.tag===`ApprovedForProject`:e.tag.toLowerCase()===n},display(e){return e.tag===`ApprovedForProject`?`Approved`:e.tag}},cn={values:[`Zoe`,`Admin`,`Zeno`],is:{zoe:e=>e.tag===`Zoe`,admin:e=>e.tag===`Admin`,zeno:e=>e.tag===`Zeno`,privileged:e=>[`Zoe`,`Admin`].includes(e.tag)},fromString(e){return{zoe:{tag:`Zoe`},admin:{tag:`Admin`},zeno:{tag:`Zeno`}}[e.toLowerCase()]??{tag:`Zeno`}},display(e){return e.tag.toLowerCase()}},W={values:[`Online`,`Offline`,`Working`],is:{online:e=>e.tag===`Online`,offline:e=>e.tag===`Offline`,working:e=>e.tag===`Working`,available:e=>e.tag===`Online`||e.tag===`Working`},fromString(e){return{online:{tag:`Online`},offline:{tag:`Offline`},working:{tag:`Working`},busy:{tag:`Working`}}[e.toLowerCase()]??{tag:`Offline`}},display(e){return e.tag}},G={values:[`User`,`System`,`Directive`],is:{user:e=>e.tag===`User`,system:e=>e.tag===`System`,directive:e=>e.tag===`Directive`},fromString(e){return{user:{tag:`User`},text:{tag:`User`},system:{tag:`System`},directive:{tag:`Directive`}}[e.toLowerCase()]??{tag:`User`}},display(e){return e.tag.toLowerCase()}},K={values:[`Active`,`Paused`],is:{active:e=>e.tag===`Active`,paused:e=>e.tag===`Paused`},fromString(e){return{active:{tag:`Active`},paused:{tag:`Paused`}}[e.toLowerCase().replace(/[_\s]/g,``)]??{tag:`Active`}},matches(e,t){let n=t.toLowerCase().replace(/[_\s]/g,``);return e.tag.toLowerCase()===n},display(e){return e.tag.toLowerCase()}},q=e=>{if(!e||typeof e!=`object`||!(`microsSinceUnixEpoch`in e))return 0n;let t=e.microsSinceUnixEpoch;return typeof t==`bigint`?t:BigInt(t)},J=(e,t=``)=>{let n=q(e);return n<=0n?t||String(e??``):new Date(Number(n/1000n)).toISOString().replace(`T`,` `).slice(0,19)},ln=e=>e?[...new Set(e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean))]:[],Y=e=>e.iter(`agents`).find(t=>t.identity.toHexString()===e.identity?.toHexString()),un=(e,t)=>({id:e.id,name:e.name,role:cn.display(e.role),status:W.display(e.status),lastHeartbeat:J(e.lastHeartbeat),currentTaskId:e.currentTaskId?e.currentTaskId.toString():``,capabilities:e.capabilities.join(`,`),identity:t||``}),dn=async e=>{let t=e.action;t||E(`ACTION_REQUIRED`,`Agent action required`);try{switch(t){case`register`:{let t=e.agentId,n=e.name,r=e.role||`zeno`;(!t||!n)&&E(`ARGS_REQUIRED`,`Agent ID and name required`);let i=await S(),a=e.wallet||i.defaultWallet;!e.address&&!a&&E(`WALLET_REQUIRED`,`--address or --wallet required (or set default wallet)`);let o=e.address,s=ln(e.capabilities);if(!o&&a){let e=await P(a);e||E(`WALLET_NOT_FOUND`,`Wallet not found: ${a}`),o=e.address}try{await B({host:e.host,module:e.module,wallet:a},async e=>{await V(e,`registerAgent`,{agentId:t,name:n,role:cn.fromString(r),zenonAddress:o}),s.length>0&&await V(e,`updateAgentCapabilities`,{capabilities:s}),await new Promise(e=>setTimeout(e,500)),e.iter(`agents`).find(e=>e.id===t)||((r===`zoe`||r===`admin`)&&E(`UNAUTHORIZED`,`Only whitelisted identities can register as zoe or admin`),E(`REGISTRATION_FAILED`,`Registration failed`))}),T({registered:!0,agentId:t,name:n,role:r,address:o,capabilities:s}),w()||console.log(H(`agent_registered`,[{agentId:t,name:n,role:r,address:o,capabilities:s.join(`,`)}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`status`:(e.agentId||e.task||e.capabilities)&&E(`INVALID_USAGE`,"Use `probe agent set-status <online|offline|working|busy>` to update status. `probe agent status` only shows current status."),await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{let t=Y(e);t||E(`NOT_REGISTERED`,"Agent not registered. Run `probe agent register` first."),T(t),w()||console.log(H(`agent`,[un(t,e.identity?.toHexString())]))});break;case`set-status`:{let t=e.agentId;t||E(`STATUS_REQUIRED`,`Status required. Use: online, offline, working, busy`),e.capabilities&&E(`INVALID_USAGE`,"Use `probe agent capabilities --set <list>` to update capabilities.");let n=t.toLowerCase();new Set([`online`,`offline`,`working`,`busy`]).has(n)||E(`INVALID_STATUS`,`Invalid status: ${t}. Use: online, offline, working, busy`);let r=W.fromString(n),i=W.is.working(r);i&&!e.task&&E(`TASK_REQUIRED`,`--task is required when setting status to working`),!i&&e.task&&E(`TASK_NOT_ALLOWED`,`--task is only allowed when setting status to working`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`setAgentStatus`,{status:r,taskId:i?BigInt(e.task):void 0})}),T({updated:!0,status:n,taskId:e.task||null}),w()||console.log(H(`agent_status_updated`,[{status:n,taskId:e.task||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`capabilities`:{e.set||E(`CAPABILITIES_REQUIRED`,`--set is required`);let t=ln(e.set);try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{await V(e,`updateAgentCapabilities`,{capabilities:t});let n=Y(e);T({updated:!0,agentId:n?.id,capabilities:t}),w()||console.log(H(`agent_capabilities_updated`,[{agentId:n?.id||``,capabilities:t.join(`,`)}]))})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`me`:await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{let t=Y(e);t||E(`NOT_REGISTERED`,"Agent not registered. Run `probe agent register` first."),T(t),w()||console.log(H(`agent`,[un(t,e.identity?.toHexString())]))});break;case`heartbeat`:try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{let t=Y(e);t||E(`NOT_REGISTERED`,`Agent not registered`),await V(e,`heartbeat`,{agentId:t.id}),T({heartbeat:!0}),w()||console.log(H(`agent_heartbeat`,[{agentId:t.id,status:W.display(t.status)}]))})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})),r=e.limit?parseInt(e.limit,10):void 0;r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let i=t.iter(`agents`).filter(e=>!W.is.offline(e.status));i=i.sort((e,t)=>{let n=q(e.lastHeartbeat||e.createdAt||e.lastActiveAt),r=q(t.lastHeartbeat||t.createdAt||t.lastActiveAt);return n===r?t.id.localeCompare(e.id):r>n?1:-1}),r!==void 0&&(i=i.slice(0,r)),T({agents:i,count:i.length}),w()||console.log(H(`agents`,i.map(e=>({id:e.id,name:e.name,role:cn.display(e.role),status:W.display(e.status),last_heartbeat:J(e.lastHeartbeat),capabilities:e.capabilities.join(`,`)}))));break}catch(e){n.e=e}finally{await n.d()}case`identity`:await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{let n=t.identity?.toHexString();T({identity:n,wallet:e.wallet}),w()||console.log(H(`identity`,[{identity:n||``,wallet:e.wallet||``}]))});break;default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: register, status, set-status, capabilities, me, heartbeat, list, identity`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}};var fn=t({meta:{name:`agent`,description:`Agent management`},args:{action:{type:`positional`,description:`Action: register, status, set-status, capabilities, me, heartbeat, list, identity`,required:!1},agentId:{type:`positional`,description:`Agent ID or status value`,required:!1},name:{type:`positional`,description:`Display name`,required:!1},role:{type:`positional`,description:`Role: zoe, admin, zeno`,required:!1},address:{type:`string`,description:`Zenon address`},wallet:{type:`string`,description:`Wallet name`},task:{type:`string`,description:`Current task ID`},limit:{type:`string`,description:`Limit agents returned for list`},capabilities:{type:`string`,description:`Comma-separated capability list`},set:{type:`string`,description:`Set capabilities for capabilities action`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe agent`,description:`Agent lifecycle and identity commands`,usage:[`probe agent <action> [options]`,`probe agent register agent-1 "Builder" zeno --wallet my-wallet`,`probe agent set-status working --task 42`,`probe agent capabilities --set "gh,coding,review"`,`probe agent heartbeat`],actions:[{name:`register <agentId> <name> [role]`,detail:`Register a new agent identity`},{name:`status`,detail:`Show current agent status`},{name:`set-status <online|offline|working|busy>`,detail:`Update current agent status`},{name:`capabilities --set <list>`,detail:`Set capabilities for authenticated agent`},{name:`me`,detail:`Show current authenticated agent profile`},{name:`heartbeat`,detail:`Send heartbeat only`},{name:`list`,detail:`List online agents`},{name:`identity`,detail:`Show current authenticated identity`}],options:[{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--address`,detail:`Zenon address for register`},{name:`--task`,detail:`Task ID required with status working`},{name:`--limit`,detail:`Max agents returned for list`},{name:`--capabilities`,detail:`Comma-separated capabilities for register/status`},{name:`--set`,detail:`Comma-separated capabilities for capabilities action`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:[`Valid register roles: zeno (default), zoe, admin. Non-whitelisted identities cannot register as zoe/admin.`,"Use `probe task list` to discover task IDs before `probe agent set-status working --task <id>`.","`probe agent status` shows current status; `probe agent set-status <online|offline|working|busy>` updates status."]});return}await dn(e)}});const pn=e=>{let t=e.toLowerCase();return t===`approve`?{tag:`ApproveAsTask`}:t===`reject`?{tag:`Reject`}:t===`escalate_to_idea`?{tag:`EscalateToIdea`}:null},mn=e=>e&&typeof e==`object`&&`tag`in e?String(e.tag):String(e),hn=e=>{let t=mn(e);return{PendingReview:`pending_review`,Approved:`approved`,Rejected:`rejected`,EscalatedToIdea:`escalated_to_idea`}[t]??t};var gn=t({meta:{name:`discover`,description:`Discovered task management`},args:{action:{type:`positional`,description:`Action: report, review, list, get`,required:!1},id:{type:`positional`,description:`Discovered task ID`,required:!1},decision:{type:`positional`,description:`Decision: approve, reject, escalate_to_idea`,required:!1},task:{type:`string`,description:`Current task ID`},project:{type:`string`,description:`Project ID`},title:{type:`string`,description:`Task title`},type:{type:`string`,description:`Task type: bug, improvement, feature`},severity:{type:`string`,description:`Severity: low, medium, high, critical`},status:{type:`string`,description:`Filter by status`},limit:{type:`string`,description:`Limit discovered tasks returned`},description:{type:`string`,description:`Description`},reason:{type:`string`,description:`Rejection reason`},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe discover`,description:`Discovered task reporting and review`,usage:[`probe discover <action> [options]`,`probe discover report --task 12 --project 1 --title "Fix parse"`,`probe discover review 9 approve`],actions:[{name:`report`,detail:`Report a discovered task from current work`},{name:`review <id> <approve|reject|escalate_to_idea>`,detail:`Approve, reject, or escalate discovery`},{name:`list`,detail:`List discovered tasks`},{name:`get <id>`,detail:`Show one discovered task`}],options:[{name:`--task, --project, --title`,detail:`Required for report`},{name:`--type`,detail:`Task type: bug, improvement, feature`},{name:`--severity`,detail:`Severity: low, medium, high, critical`},{name:`--reason`,detail:`Reason for rejection/escalation`},{name:`--limit`,detail:`Max discovered tasks returned for list`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:["Find current task IDs with `probe task list` and project IDs with `probe project list`."]});return}let t=e.action;try{switch(t){case`report`:(!e.task||!e.project||!e.title)&&E(`ARGS_REQUIRED`,`--task, --project, and --title required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`discoverTask`,{currentTaskId:BigInt(e.task),projectId:BigInt(e.project),title:e.title,description:e.description||``,priority:5,taskType:e.type||`improvement`,severity:e.severity||`medium`})}),T({reported:!0,title:e.title}),w()||console.log(H(`discovery_reported`,[{title:e.title,taskId:e.task,projectId:e.project}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`review`:{let t=e.id,n=e.decision;(!t||!n)&&E(`ARGS_REQUIRED`,`ID and decision required`);let r=n.toLowerCase(),i=[`approve`,`reject`,`escalate_to_idea`];i.includes(r)||E(`INVALID_DECISION`,`Invalid decision: ${n}. Use: ${i.join(`, `)}`);let a=pn(r);a||E(`INVALID_DECISION`,`Invalid decision: ${n}. Use: ${i.join(`, `)}`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`reviewDiscoveredTask`,{discoveryId:BigInt(t),decision:a,reason:e.reason||void 0})}),T({reviewed:!0,id:t,decision:r}),w()||console.log(H(`discovery_reviewed`,[{id:t,decision:r,reason:e.reason||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`discovered_tasks`),r=e.limit?parseInt(e.limit,10):void 0;if(r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),e.status){let n=e.status.toLowerCase().replace(/[_\s]/g,``);t=t.filter(e=>hn(e.status).replace(/[_\s]/g,``)===n)}t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),r!==void 0&&(t=t.slice(0,r)),T({discoveredTasks:t,count:t.length}),w()||console.log(H(`discovered_tasks`,t.map(e=>({id:e.id.toString(),title:e.title,taskType:e.taskType,severity:e.severity,status:hn(e.status),projectId:e.projectId}))));break}catch(e){n.e=e}finally{await n.d()}case`get`:try{var r=R();let t=e.id;t||E(`DISCOVERY_ID_REQUIRED`,`Discovery ID required`);let n=r.a(await z.create({host:e.host,module:e.module})).iter(`discovered_tasks`).find(e=>e.id.toString()===t);n||E(`DISCOVERY_NOT_FOUND`,`Discovery not found: ${t}`),T(n),w()||console.log(H(`discovered_task`,[{id:n.id.toString(),title:n.title,status:hn(n.status),taskType:n.taskType,severity:n.severity,priority:n.priority,projectId:n.projectId.toString(),currentTaskId:n.currentTaskId.toString(),description:n.description,reviewedBy:n.reviewedBy||``,reviewedAt:n.reviewedAt?J(n.reviewedAt):``,rejectionReason:n.rejectionReason||``,createdTaskId:n.createdTaskId?n.createdTaskId.toString():``}]));break}catch(e){r.e=e}finally{await r.d()}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: report, review, list, get`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}}});const _n=[[`ecosystem-impact`,`ecosystem_impact`],[`implementation-readiness`,`implementation_readiness`],[`dependency-independence`,`dependency_independence`],[`documentation-leverage`,`documentation_leverage`],[`maintenance-sustainability`,`maintenance_sustainability`],[`agent-capability-fit`,`agent_capability_fit`],[`execution-clarity`,`execution_clarity`]];function vn(e,t){let n=Number(e);return Number.isInteger(n)||E(`INVALID_SCORES`,`Score for '${t}' must be an integer`),n}function yn(e,t){let n=t.filter(e=>e.active).sort((e,t)=>e.sortOrder-t.sortOrder),r=new Map(e.map(e=>[e.dimension,e.score]));for(let e of n){r.has(e.name)||E(`MISSING_DIMENSION`,`Missing score for dimension: ${e.label||e.name}`);let t=r.get(e.name);(t<e.minScore||t>e.maxScore)&&E(`INVALID_SCORE`,`Score for '${e.name}' must be between ${e.minScore} and ${e.maxScore}`)}let i=new Set(n.map(e=>e.name));for(let t of e)i.has(t.dimension)||E(`UNKNOWN_DIMENSION`,`Unknown dimension: ${t.dimension}`)}function bn(e,t,n){let r=t.trim().replaceAll(`-`,`_`);r||E(`INVALID_SCORES`,`Dimension names cannot be empty`),e.has(r)&&E(`INVALID_SCORES`,`Dimension '${r}' was provided more than once`),e.set(r,{dimension:r,score:vn(n,r)})}function xn(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).flatMap(e=>String(e).split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return(t<=0||t===e.length-1)&&E(`INVALID_SCORES`,`--score entries must use dimension=value syntax`),[e.slice(0,t),e.slice(t+1)]}))}function Sn(e){let t=new Map;for(let[n,r]of _n)e[n]!==void 0&&bn(t,r,e[n]);for(let[n,r]of xn(e.score))bn(t,n,r);return t.size===0&&E(`ARGS_REQUIRED`,`Provide dimension scores with score flags or --score dimension=value`),[...t.values()]}var Cn=t({meta:{name:`idea`,description:`Idea management`},args:{action:{type:`positional`,description:`Action: list, propose, vote, get, dimensions`,required:!1},id:{type:`positional`,description:`Idea ID`,required:!1},title:{type:`string`,description:`Idea title`},category:{type:`string`,description:`Category`},description:{type:`string`,description:`Description`},status:{type:`string`,description:`Filter by status`},limit:{type:`string`,description:`Limit ideas returned`},"ecosystem-impact":{type:`string`,description:`Ecosystem Impact score`},"implementation-readiness":{type:`string`,description:`Implementation Readiness score`},"dependency-independence":{type:`string`,description:`Dependency Independence score`},"documentation-leverage":{type:`string`,description:`Documentation Leverage score`},"maintenance-sustainability":{type:`string`,description:`Maintenance Sustainability score`},"agent-capability-fit":{type:`string`,description:`Agent Capability Fit score`},"execution-clarity":{type:`string`,description:`Execution Clarity score`},score:{type:`string`,description:`Additional dimension score as name=value; repeatable`,multiple:!0},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe idea`,description:`Idea discovery, review, and voting`,usage:[`probe idea <action> [options]`,`probe idea list --status voting`,`probe idea dimensions`,`probe idea vote 42 --ecosystem-impact 8 --execution-clarity 9 --implementation-readiness 7`],actions:[{name:`list`,detail:`List ideas with optional filters`},{name:`get <id>`,detail:`Show one idea`},{name:`dimensions`,detail:`List active evaluation dimensions`},{name:`propose`,detail:`Propose a new idea`},{name:`vote <id>`,detail:`Vote on an idea with dimension scores`}],options:[{name:`--title`,detail:`Idea title for propose`},{name:`--description`,detail:`Idea description for propose`},{name:`--category`,detail:`Idea category for propose/list`},{name:`--ecosystem-impact`,detail:`Ecosystem impact score`},{name:`--implementation-readiness`,detail:`Implementation readiness score`},{name:`--dependency-independence`,detail:`Dependency independence score`},{name:`--documentation-leverage`,detail:`Documentation leverage score`},{name:`--maintenance-sustainability`,detail:`Maintenance sustainability score`},{name:`--agent-capability-fit`,detail:`Agent capability fit score`},{name:`--execution-clarity`,detail:`Execution clarity score`},{name:`--score`,detail:`Additional dimension score as name=value; repeatable`},{name:`--status`,detail:`Status filter for list`},{name:`--limit`,detail:`Max ideas returned for list`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:["Find idea IDs with `probe idea list` before using get/vote.","Use `probe idea dimensions` to list active score dimensions.",`All active dimensions are required. Use explicit flags for default dimensions and repeatable --score name=value for custom dimensions.`,`If a missing-dimension error names a dimension without a dedicated flag, use --score and consider updating Probe.`]});return}let t=e.action;try{switch(t){case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`ideas`),r=e.limit?parseInt(e.limit,10):void 0;r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),e.status&&(t=t.filter(t=>sn.matches(t.status,e.status))),e.category&&(t=t.filter(t=>t.category===e.category)),t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),r!==void 0&&(t=t.slice(0,r)),T({ideas:t,count:t.length}),w()||console.log(H(`ideas`,t.map(e=>({id:e.id.toString(),title:e.title,category:e.category,status:sn.display(e.status),votes:`${e.totalVotes}/${e.quorum}`,up:e.upVotes,veto:e.vetoCount}))));break}catch(e){n.e=e}finally{await n.d()}case`get`:try{var r=R();let t=e.id;t||E(`IDEA_ID_REQUIRED`,`Idea ID required`);let n=r.a(await z.create({host:e.host,module:e.module})).iter(`ideas`).find(e=>e.id.toString()===t);n||E(`IDEA_NOT_FOUND`,`Idea not found: ${t}`),T(n),w()||console.log(H(`idea`,[{id:n.id.toString(),title:n.title,category:n.category,status:sn.display(n.status),totalVotes:n.totalVotes,quorum:n.quorum,upVotes:n.upVotes,downVotes:n.downVotes,vetoCount:n.vetoCount,approvalThreshold:n.approvalThreshold,vetoThreshold:n.vetoThreshold,computedScore:n.computedScore,description:n.description}]));break}catch(e){r.e=e}finally{await r.d()}case`dimensions`:try{var i=R();let t=i.a(await z.create({host:e.host,module:e.module})).iter(`evaluation_dimensions`).filter(e=>e.active).sort((e,t)=>e.sortOrder-t.sortOrder);T({dimensions:t,count:t.length}),w()||console.log(H(`evaluation_dimensions`,t.map(e=>({name:e.name,label:e.label,weight:e.weight,range:`${e.minScore}-${e.maxScore}`,description:e.description}))));break}catch(e){i.e=e}finally{await i.d()}case`propose`:e.title||E(`ARGS_REQUIRED`,`Title required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`proposeIdea`,{title:e.title,description:e.description||``,category:e.category||`general`})}),T({proposed:!0,title:e.title}),w()||console.log(H(`idea_proposed`,[{title:e.title,category:e.category||`general`}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`vote`:{let t=e.id;t||E(`ARGS_REQUIRED`,`Idea ID required`);let n=Sn(e);try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{yn(n,e.iter(`evaluation_dimensions`)),await V(e,`voteIdea`,{ideaId:BigInt(t),scores:n})}),T({voted:!0,ideaId:t,scores:n}),w()||console.log(H(`idea_voted`,[{ideaId:t,scores:JSON.stringify(n)}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, propose, vote, get, dimensions`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}}});const wn=e=>/^\d+$/.test(e),Tn=(e,t)=>{if(!t)return!0;let n=t.trim();return n?e.id.toString()===n||(e.contextId||``)===n:!0},En=e=>G.is.user(e),Dn=e=>G.is.directive(e),On=async e=>{let t=e.action;t||E(`ACTION_REQUIRED`,`Message action required`);try{switch(t){case`list`:try{var n=R();let t=e.target,r=parseInt(e.limit||`20`,10);(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let i=n.a(await z.create({host:e.host,module:e.module})),a=i.iter(`channels`),o=i.iter(`projects`),s=[],c=`all`;if(t)if(wn(t)){let e=BigInt(t),n=i.iter(`project_messages`),r=o.find(t=>t.id===e);s=n.filter(t=>t.projectId===e&&En(t.messageType)).map(e=>({...e,_type:`project`})),c=r?`project:${r.name}`:`project:${e}`}else{let e=a.find(e=>e.name===t||e.id.toString()===t);e&&(s=i.iter(`messages`).filter(t=>t.channelId===e.id&&En(t.messageType)).map(e=>({...e,_type:`channel`})),c=`#${e.name}`)}else{let e=i.iter(`messages`),t=i.iter(`project_messages`);s=[...e.filter(e=>En(e.messageType)).map(e=>({...e,_type:`channel`})),...t.filter(e=>En(e.messageType)).map(e=>({...e,_type:`project`}))]}s=s.filter(t=>Tn(t,e.context)),s.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n<r?1:n>r?-1:0}),s=s.slice(0,r);let l=new Map(a.map(e=>[e.id.toString(),e.name])),u=new Map(o.map(e=>[e.id.toString(),e.name]));T({messages:s,count:s.length,target:c}),w()||console.log(H(`messages`,s.map(e=>{let t=`_type`in e&&e._type===`project`?`project:${u.get(e.projectId.toString())||e.projectId}`:`#${l.get(e.channelId.toString())||e.channelId}`;return{id:e.id.toString(),location:t,senderId:e.senderId,content:e.content.slice(0,50)+(e.content.length>50?`...`:``),messageType:G.display(e.messageType),contextId:e.contextId||null,createdAt:J(e.createdAt)}})));break}catch(e){n.e=e}finally{await n.d()}case`directives`:try{var r=R();let t=e.target,n=parseInt(e.limit||`20`,10);(!Number.isFinite(n)||n<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let i=r.a(await z.create({host:e.host,module:e.module})),a=i.iter(`channels`),o=i.iter(`projects`),s=[],c=`all`;if(t)if(wn(t)){let e=BigInt(t),n=i.iter(`project_messages`),r=o.find(t=>t.id===e);s=n.filter(t=>t.projectId===e&&Dn(t.messageType)).map(e=>({...e,_type:`project`})),c=r?`project:${r.name}`:`project:${e}`}else{let e=a.find(e=>e.name===t||e.id.toString()===t);e&&(s=i.iter(`messages`).filter(t=>t.channelId===e.id&&Dn(t.messageType)).map(e=>({...e,_type:`channel`})),c=`#${e.name}`)}else{let e=i.iter(`messages`),t=i.iter(`project_messages`);s=[...e.filter(e=>Dn(e.messageType)).map(e=>({...e,_type:`channel`})),...t.filter(e=>Dn(e.messageType)).map(e=>({...e,_type:`project`}))]}s=s.filter(t=>Tn(t,e.context)),s.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n<r?1:n>r?-1:0}),s=s.slice(0,n);let l=new Map(a.map(e=>[e.id.toString(),e.name])),u=new Map(o.map(e=>[e.id.toString(),e.name]));T({messages:s,count:s.length,target:c}),w()||console.log(H(`directives`,s.map(e=>{let t=`_type`in e&&e._type===`project`?`project:${u.get(e.projectId.toString())||e.projectId}`:`#${l.get(e.channelId.toString())||e.channelId}`;return{id:e.id.toString(),location:t,senderId:e.senderId,content:e.content.slice(0,50)+(e.content.length>50?`...`:``),messageType:G.display(e.messageType),contextId:e.contextId||null,createdAt:J(e.createdAt)}})));break}catch(e){r.e=e}finally{await r.d()}case`directive`:{let t=e.target,n=e.content;(!t||!n)&&E(`ARGS_REQUIRED`,`Target and directive content required. Usage: probe message directive <target> <content>`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async r=>{if(wn(t)){let i=BigInt(t),a=r.iter(`projects`),o=r.iter(`project_channels`),s=a.find(e=>e.id===i);s||E(`PROJECT_NOT_FOUND`,`Project '${t}' not found`),o.find(e=>e.projectId===i)||E(`PROJECT_CHANNEL_NOT_FOUND`,`Project channel for '${t}' not found`),await V(r,`sendProjectMessage`,{projectId:i,content:n,messageType:G.fromString(`directive`),contextId:e.context}),T({sent:!0,projectId:i.toString(),projectName:s.name,messageType:`directive`}),w()||console.log(H(`directive_sent`,[{target:`project:${s.name}`,contextId:e.context||null}]))}else{let i=r.iter(`channels`),a=i.find(e=>e.name===t||e.id.toString()===t);a||E(`CHANNEL_NOT_FOUND`,`Channel '${t}' not found. Available: ${i.map(e=>e.name).join(`, `)}`),await V(r,`sendMessage`,{channelId:a.id,content:n,messageType:G.fromString(`directive`),contextId:e.context}),T({sent:!0,channelId:a.id.toString(),channelName:a.name,messageType:`directive`}),w()||console.log(H(`directive_sent`,[{target:`#${a.name}`,contextId:e.context||null}]))}})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`send`:{let t=e.target,n=e.content;(!t||!n)&&E(`ARGS_REQUIRED`,`Target and message content required. Usage: probe message send <target> <content>`),(e.type||`user`).toLowerCase()===`directive`&&E(`INVALID_TYPE`,`'directive' is not allowed with 'message send'. Use: probe message directive <target> <content>`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async r=>{if(wn(t)){let i=BigInt(t),a=r.iter(`projects`),o=r.iter(`project_channels`),s=a.find(e=>e.id===i);s||E(`PROJECT_NOT_FOUND`,`Project '${t}' not found`),o.find(e=>e.projectId===i)||E(`PROJECT_CHANNEL_NOT_FOUND`,`Project channel for '${t}' not found`),await V(r,`sendProjectMessage`,{projectId:i,content:n,messageType:G.fromString(e.type||`user`),contextId:e.context}),T({sent:!0,projectId:i.toString(),projectName:s.name}),w()||console.log(H(`message_sent`,[{target:`project:${s.name}`,messageType:e.type||`user`,contextId:e.context||null}]))}else{let i=r.iter(`channels`),a=i.find(e=>e.name===t||e.id.toString()===t);a||E(`CHANNEL_NOT_FOUND`,`Channel '${t}' not found. Available: ${i.map(e=>e.name).join(`, `)}`),await V(r,`sendMessage`,{channelId:a.id,content:n,messageType:G.fromString(e.type||`user`),contextId:e.context}),T({sent:!0,channelId:a.id.toString(),channelName:a.name}),w()||console.log(H(`message_sent`,[{target:`#${a.name}`,messageType:e.type||`user`,contextId:e.context||null}]))}})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`channels`:try{var i=R();let t=i.a(await z.create({host:e.host,module:e.module})),n=t.iter(`channels`),r=t.iter(`projects`),a=t.iter(`project_channels`),o=new Set(a.map(e=>e.projectId.toString())),s=r.filter(e=>o.has(e.id.toString()));T({channels:n,projects:s,channelCount:n.length,projectCount:s.length}),w()||(console.log(H(`channels`,n.map(e=>({id:e.id.toString(),name:e.name,createdBy:e.createdBy})))),console.log(H(`projects`,s.map(e=>({id:e.id.toString(),name:e.name,repo:e.githubRepo})))));break}catch(e){i.e=e}finally{await i.d()}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, send, directive, directives, channels`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}};var kn=t({meta:{name:`message`,description:`Message management`},args:{action:{type:`positional`,description:`Action: list, send, directive, directives, channels`,required:!1},target:{type:`positional`,description:`Channel name, project ID, or message content`,required:!1},content:{type:`positional`,description:`Message content (if target is channel/project)`,required:!1},type:{type:`string`,description:`Message type: user, system`,default:`user`},context:{type:`string`,description:`Thread context ID (message ID or entity ref like task:42)`},limit:{type:`string`,description:`Limit messages`,default:`20`},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe message`,description:`Channel and project messaging commands`,usage:[`probe message <action> [target] [content] [options]`,`probe message list --limit 50`,`probe message send general "hello team"`,`probe message directive zoe "Focus on project stability" --context project:1`],actions:[{name:`list [target]`,detail:`List user messages (all, channel, or project)`},{name:`directives [target]`,detail:`List directive messages (all, channel, or project)`},{name:`send <target> <content>`,detail:`Send to target channel/project`},{name:`directive <target> <content>`,detail:`Send directive to target channel/project`},{name:`channels`,detail:`List channels and project channels`}],options:[{name:`--type`,detail:`Message type: user, system (default: user)`},{name:`--context`,detail:`Optional thread context ID (message ID or entity ref)`},{name:`--limit`,detail:`Max messages returned for list (default: 20)`},{name:`--wallet`,detail:`Wallet to use for send`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],examples:[`probe message send general hello`,`probe message directive zoe "Pause new work" --context project:1`,`probe message directives zoe --limit 1`,`probe message send zoe "hello there"`,`probe message send zoe "reviewed" --context 123`,`probe message send 1 "project update"`,`probe message list zoe --limit 10`],notes:[`Quotes are only required when target/content contains spaces.`,"Use `probe message channels` to discover available channel names and project IDs."]});return}await On(e)}}),An=t({meta:{name:`project`,description:`Project commands`},args:{action:{type:`positional`,description:`Action: list, get, create, status, set-status`,required:!1},id:{type:`positional`,description:`Project ID`,required:!1},value:{type:`positional`,description:`Status value for set-status: active|paused`,required:!1},status:{type:`string`,description:`Filter by status`},limit:{type:`string`,description:`Limit projects returned`},name:{type:`string`,description:`Project name`},description:{type:`string`,description:`Project description`},"github-repo":{type:`string`,description:`GitHub repository URL`},"source-idea":{type:`string`,description:`Source idea ID`},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe project`,description:`Project listing and lookup commands`,usage:[`probe project <action> [options]`,`probe project list --status active`,`probe project get 1`,`probe project status 1`,`probe project set-status 1 paused --wallet admin-wallet`],actions:[{name:`list`,detail:`List projects with optional status filter`},{name:`get <id>`,detail:`Show one project by ID`},{name:`create`,detail:`Create a new project`},{name:`status <id>`,detail:`Show only project status`},{name:`set-status <id> <active|paused>`,detail:`Update project status (admin/zoe)`}],options:[{name:`--status`,detail:`Status filter for list: active|paused`},{name:`--limit`,detail:`Max projects returned for list`},{name:`--name`,detail:`Project name (create)`},{name:`--description`,detail:`Project description (create)`},{name:`--github-repo`,detail:`GitHub repository URL (create)`},{name:`--source-idea`,detail:`Source idea ID (create)`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:[`Only admin/zoe identities can call set-status.`,"Find idea IDs with `probe idea list` before using --source-idea.","Find project IDs with `probe project list` before using get/create follow-up commands."]});return}let t=e.action;try{switch(t){case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`projects`),r=e.limit?parseInt(e.limit,10):void 0;r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),e.status&&(t=t.filter(t=>K.matches(t.status,e.status))),t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),r!==void 0&&(t=t.slice(0,r)),T({projects:t,count:t.length}),w()||console.log(H(`projects`,t.map(e=>({id:e.id,name:e.name,status:K.display(e.status),githubRepo:e.githubRepo}))));break}catch(e){n.e=e}finally{await n.d()}case`get`:try{var r=R();let t=e.id;t||E(`PROJECT_ID_REQUIRED`,`Project ID required`);let n=r.a(await z.create({host:e.host,module:e.module})).iter(`projects`).find(e=>e.id.toString()===t);n||E(`PROJECT_NOT_FOUND`,`Project not found: ${t}`),T(n),w()||console.log(H(`project`,[{id:n.id.toString(),name:n.name,status:K.display(n.status),githubRepo:n.githubRepo,description:n.description}]));break}catch(e){r.e=e}finally{await r.d()}case`status`:try{var i=R();let t=e.id;t||E(`PROJECT_ID_REQUIRED`,`Project ID required`);let n=i.a(await z.create({host:e.host,module:e.module})).iter(`projects`).find(e=>e.id.toString()===t);n||E(`PROJECT_NOT_FOUND`,`Project not found: ${t}`);let r=K.display(n.status);T({projectId:t,status:r}),w()||console.log(H(`project_status`,[{id:n.id.toString(),name:n.name,status:r}]));break}catch(e){i.e=e}finally{await i.d()}case`create`:(!e.name||!e[`github-repo`]||!e[`source-idea`])&&E(`ARGS_REQUIRED`,`--name, --github-repo, and --source-idea required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`createProject`,{sourceIdeaId:BigInt(e[`source-idea`]),name:e.name,githubRepo:e[`github-repo`],description:e.description||``})}),T({created:!0,name:e.name,githubRepo:e[`github-repo`],sourceIdeaId:e[`source-idea`]}),w()||console.log(H(`project_created`,[{name:e.name,githubRepo:e[`github-repo`],sourceIdeaId:e[`source-idea`]}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`set-status`:{let t=e.id,n=e.value;(!t||!n)&&E(`ARGS_REQUIRED`,`Project ID and status required. Use: probe project set-status <id> <active|paused>`);let r=n.toLowerCase().replace(/[_\s]/g,``);[`active`,`paused`].includes(r)||E(`INVALID_STATUS`,`Invalid status: ${n}. Use: active, paused`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{await V(e,`updateProjectStatus`,{projectId:BigInt(t),status:K.fromString(n)})}),T({updated:!0,projectId:t,status:r}),w()||console.log(H(`project_status_updated`,[{projectId:t,status:r}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, get, create, status, set-status`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}}});const jn=e=>{let t=e.trim().replace(/\.git$/i,``);if(!t)return;if(/^[\w.-]+\/[\w.-]+$/.test(t))return`https://github.com/${t}`;let n=t.match(/^git@github\.com:([\w.-]+\/[\w.-]+)$/i);if(n)return`https://github.com/${n[1]}`;if(t.startsWith(`http://`)||t.startsWith(`https://`))try{let e=new URL(t);if(e.hostname!==`github.com`)return;let n=e.pathname.split(`/`).filter(Boolean);return n.length<2?void 0:`https://github.com/${n[0]}/${n[1]}`}catch{return}},Mn=async e=>{let t=e.action;t||E(`ACTION_REQUIRED`,`Task action required`);try{switch(t){case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`tasks`),r=e.status,i=e.limit?parseInt(e.limit,10):void 0;i!==void 0&&(!Number.isFinite(i)||i<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),r&&(t=t.filter(e=>U.matches(e.status,r))),e.project&&(t=t.filter(t=>t.projectId.toString()===e.project)),e.assigned&&(t=t.filter(e=>e.assignedTo)),t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),i!==void 0&&(t=t.slice(0,i)),T({tasks:t,count:t.length}),w()||console.log(H(`tasks`,t.map(e=>({id:e.id.toString(),title:e.title,status:U.display(e.status),priority:e.priority,assignedTo:e.assignedTo||``,projectId:e.projectId}))));break}catch(e){n.e=e}finally{await n.d()}case`ready`:try{var r=R();let t=r.a(await z.create({host:e.host,module:e.module})),n=t.iter(`tasks`),i=t.iter(`task_dependencies`),a=new Map(n.map(e=>[e.id.toString(),e])),o=e.limit?parseInt(e.limit,10):void 0;o!==void 0&&(!Number.isFinite(o)||o<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let s=n.filter(e=>U.is.open(e.status)).filter(e=>!i.filter(t=>t.taskId===e.id).some(e=>{let t=typeof e.dependencyType==`string`?e.dependencyType:e.dependencyType.tag;if(t!==`Blocks`&&t!==`ParentChild`&&t!==`blocks`&&t!==`parent-child`)return!1;let n=a.get(e.dependsOnId.toString());return n?!U.is.completed(n.status):!1})).filter(t=>!e.project||t.projectId.toString()===e.project).filter(t=>!e.assigned||!!t.assignedTo).sort((e,t)=>{if(e.priority!==t.priority)return e.priority-t.priority;let n=q(e.createdAt),r=q(t.createdAt);return n<r?-1:n>r?1:0}),c=(o===void 0?s:s.slice(0,o)).map(e=>({id:e.id.toString(),title:e.title,status:e.status.tag.toLowerCase(),priority:e.priority,assignedTo:e.assignedTo||``,projectId:e.projectId.toString(),blockedBy:[]}));T({tasks:c,count:c.length}),w()||console.log(H(`tasks`,c.map(e=>({id:e.id,title:e.title,status:e.status,priority:e.priority,assignedTo:e.assignedTo,projectId:e.projectId}))));break}catch(e){r.e=e}finally{await r.d()}case`get`:try{var i=R();let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);let n=i.a(await z.create({host:e.host,module:e.module})).iter(`tasks`).find(e=>e.id.toString()===t);n||E(`TASK_NOT_FOUND`,`Task not found: ${t}`),T(n),w()||console.log(H(`task`,[{id:n.id.toString(),title:n.title,status:U.display(n.status),priority:n.priority,assignedTo:n.assignedTo||``,projectId:n.projectId.toString(),githubIssueUrl:n.githubIssueUrl||``,githubPrUrl:n.githubPrUrl||``,description:n.description}]));break}catch(e){i.e=e}finally{await i.d()}case`create`:{(!e.project||!e.title)&&E(`ARGS_REQUIRED`,`--project and --title required`);let t=parseInt(e.priority||`5`,10);(t<1||t>10)&&E(`INVALID_PRIORITY`,`Priority must be 1-10`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`createTask`,{projectId:BigInt(e.project),title:e.title,description:e.description||``,priority:t,sourceIdeaId:void 0,githubIssueUrl:e[`github-issue-url`]})}),T({created:!0,projectId:e.project,title:e.title,issue:e[`github-issue-url`]}),w()||console.log(H(`task_created`,[{projectId:e.project,title:e.title,githubIssueUrl:e[`github-issue-url`]||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`claim`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);try{let n,r;await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{await V(e,`claimTask`,{taskId:BigInt(t)});let i=e.iter(`tasks`).find(e=>e.id.toString()===t),a=i?e.iter(`projects`).find(e=>e.id===i.projectId):void 0;a?.githubRepo&&(n=jn(a.githubRepo),n&&(r=`${n}/blob/main/CONTRIBUTING.md`))}),T({claimed:!0,taskId:t,repositoryUrl:n,contributingUrl:r,nextSteps:[n?`Fork the target repository: ${n}`:`Fork the target repository to your GitHub account using gh cli`,r?`Read CONTRIBUTING.md before starting: ${r}`:`Read CONTRIBUTING.md in the target repository before starting`,`Verify behavior independently by tracing relevant code flow and runtime path before implementing changes.`]}),w()||(console.log(H(`task_claimed`,[{taskId:t,repositoryUrl:n||``,contributingUrl:r||``}])),console.log(``),console.log(`Next steps:`),n?console.log(`1. Fork the target repository: ${n}`):console.log(`1. Fork the target repository to your GitHub account`),r?console.log(`2. Read CONTRIBUTING.md before starting: ${r}`):console.log(`2. Read CONTRIBUTING.md in the target repository before starting`),console.log(`3. Verify behavior independently by tracing relevant code flow and runtime path before implementing changes.`))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`update`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`),!e.status&&!e[`github-pr-url`]&&E(`UPDATE_REQUIRED`,`--status or --github-pr-url required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`updateTaskStatus`,{taskId:BigInt(t),status:e.status?U.fromString(e.status):void 0,githubPrUrl:e[`github-pr-url`],archiveReason:void 0})}),T({updated:!0,taskId:t,status:e.status,pr:e[`github-pr-url`]}),w()||console.log(H(`task_updated`,[{taskId:t,status:e.status||``,githubPrUrl:e[`github-pr-url`]||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`review`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`updateTaskStatus`,{taskId:BigInt(t),status:{tag:`Review`},githubPrUrl:e[`github-pr-url`],archiveReason:void 0})}),T({reviewed:!0,taskId:t,status:`review`,pr:e[`github-pr-url`]}),w()||console.log(H(`task_review`,[{taskId:t,status:`review`,githubPrUrl:e[`github-pr-url`]||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`deps`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);let n=BigInt(t);if(e[`add-dep`])try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`addTaskDependency`,{taskId:n,dependsOnId:BigInt(e[`add-dep`]),dependencyType:{tag:`Blocks`}})}),T({added:!0,taskId:t,dependsOn:e[`add-dep`]}),w()||console.log(H(`dependency_added`,[{taskId:t,dependsOnId:e[`add-dep`],dependencyType:`blocks`}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}else if(e.list)try{var a=R();let t=a.a(await z.create({host:e.host,module:e.module})).iter(`task_dependencies`).filter(e=>e.taskId===n||e.dependsOnId===n);T({dependencies:t}),w()||console.log(H(`task_dependencies`,t.map(e=>({id:e.id.toString(),taskId:e.taskId.toString(),dependsOnId:e.dependsOnId.toString(),dependencyType:e.dependencyType}))))}catch(e){a.e=e}finally{await a.d()}else E(`DEPS_ACTION_REQUIRED`,`Use --add-dep <taskId> to add a dependency or --list to view dependencies`,`Examples: probe task deps 42 --list | probe task deps 42 --add-dep 17`);break}case`watch`:{let t=Math.min(parseInt(e.timeout||`60`,10),300);await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{w()||console.log(H(`task_watch`,[{timeoutSeconds:t,statusFilter:e.status||``}]));let r=new Promise(e=>{let n=setTimeout(()=>{process.off(`SIGINT`,r),process.off(`SIGTERM`,r),e()},t*1e3),r=()=>{clearTimeout(n),process.off(`SIGINT`,r),process.off(`SIGTERM`,r),e()};process.on(`SIGINT`,r),process.on(`SIGTERM`,r)});n.db.tasks.onInsert((t,n)=>{(!e.status||U.matches(n.status,e.status))&&console.log(H(`tasks`,[{id:n.id.toString(),title:n.title,change_type:`created`}]))}),n.db.tasks.onUpdate((t,n,r)=>{(!e.status||U.matches(r.status,e.status))&&console.log(H(`tasks`,[{id:r.id.toString(),title:r.title,change_type:`updated`}]))}),await r});break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, ready, get, create, claim, update, review, deps, watch`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}};var Nn=t({meta:{name:`task`,description:`Task management`},args:{action:{type:`positional`,description:`Action: list, ready, get, create, claim, update, review, deps, watch`,required:!1},id:{type:`positional`,description:`Task ID`,required:!1},status:{type:`string`,description:`Status filter or new status`},project:{type:`string`,description:`Project ID`},title:{type:`string`,description:`Task title`},description:{type:`string`,description:`Task description`},priority:{type:`string`,description:`Priority 1-10`},assigned:{type:`boolean`,description:`Show only assigned tasks`,default:!1},wallet:{type:`string`,description:`Wallet name`},"github-pr-url":{type:`string`,description:`GitHub PR URL`},"github-issue-url":{type:`string`,description:`GitHub issue URL`},"add-dep":{type:`string`,description:`Add dependency task ID`},list:{type:`boolean`,description:`List dependencies`,default:!1},timeout:{type:`string`,description:`Watch timeout (seconds)`},limit:{type:`string`,description:`Limit rows for list/ready`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe task`,description:`Task management commands`,usage:[`probe task <action> [options]`,`probe task list --project 1 --status open`,`probe task create --project 1 --title "Fix bug" --priority 5`],actions:[{name:`list`,detail:`List tasks with optional filters`},{name:`ready`,detail:`List immediately claimable open tasks`},{name:`get <id>`,detail:`Show one task`},{name:`create`,detail:`Create a new task`},{name:`claim <id>`,detail:`Claim a task for your identity`},{name:`update <id>`,detail:`Update status and optional PR URL`},{name:`review <id>`,detail:`Mark a task as ready for review`},{name:`deps <id>`,detail:`List or add task dependencies`},{name:`watch`,detail:`Watch task changes in real time`}],options:[{name:`--project`,detail:`Project ID`},{name:`--title`,detail:`Task title (create)`},{name:`--description`,detail:`Task description`},{name:`--priority`,detail:`Priority from 1 to 10 (default: 5)`},{name:`--status`,detail:`Filter or new status`},{name:`--limit`,detail:`Limit rows for list/ready`},{name:`--github-pr-url`,detail:`GitHub PR URL for update/review`},{name:`--github-issue-url`,detail:`GitHub issue URL for create`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:[`Use full long-form flags only; short aliases are intentionally disabled.`,"Find project IDs with `probe project list`; find task IDs with `probe task list`."]});return}await Mn(e)}});const Pn=5e3,Fn=[{key:`agents`,name:`agents`},{key:`tasks`,name:`tasks`},{key:`ideas`,name:`ideas`},{key:`messages`,name:`messages`},{key:`channels`,name:`channels`},{key:`projects`,name:`projects`},{key:`votes`,name:`votes`},{key:`discovered_tasks`,name:`discovered_tasks`},{key:`task_dependencies`,name:`task_dependencies`},{key:`identity_roles`,name:`identity_roles`},{key:`config`,name:`config`},{key:`project_channels`,name:`project_channels`},{key:`project_messages`,name:`project_messages`}],In=new Set([`connected`,`ready`,`disconnected`,`reconnecting`,`reconnected`,`subscription_applied`,`subscription_error`,`auth_failed`,`heartbeat_failed`,`heartbeat_recovered`,`shutdown`]),Ln=(e,t)=>typeof t==`bigint`?t.toString():t,Rn=()=>new Date().toISOString(),zn=e=>new Promise(t=>setTimeout(t,e)),Bn=e=>{let t=Math.floor(Math.random()*(Pn*2+1)-Pn);return Math.max(1e3,e+t)},Vn=e=>Bn(Math.min(3e4,1e3*2**Math.max(0,e-1))),Hn=e=>e instanceof Error?e.message:String(e),X=e=>{if(e instanceof Error)return{name:e.name,message:e.message};if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null)return e;if(typeof e==`bigint`)return e.toString();try{return JSON.parse(JSON.stringify(e,Ln))}catch{return String(e)}},Un=e=>e===`critical`||e===`info`||e===`debug`?e:`critical`,Wn=(e,t)=>!!(t===`debug`||In.has(e)||t===`info`&&e.startsWith(`heartbeat_`)),Gn=async e=>{if(!e)return null;let t=s(e);return await u(a(t),{recursive:!0}),Ce(t,{flags:`a`})},Kn=e=>{let t=e.toLowerCase();return t.includes(`authentication required`)||t.includes(`unauthorized`)||t.includes(`401`)},qn={wallet:{type:`string`,description:`Wallet name for authenticated connection`},host:{type:`string`,description:`SpacetimeDB host override`},module:{type:`string`,description:`SpacetimeDB module override`},sender:{type:`string`,description:`Optional sender filter (debug table events only)`},"log-file":{type:`string`,description:`Optional path to append JSONL daemon events`},"log-level":{type:`string`,description:`critical, info, or debug`,default:`critical`},pretty:{type:`boolean`,description:`Human-readable lifecycle logs to stderr`,default:!1},json:{type:`boolean`,description:`Reserved for CLI consistency`,default:!1}};async function Jn(e){let t=Un(e[`log-level`]),n=e.pretty?we({stdout:process.stderr,stderr:process.stderr}):null,r=null;try{r=await Gn(e[`log-file`])}catch(e){let t=Hn(e),n=JSON.stringify({source:`nexus`,at:Rn(),type:`log_file_error`,message:t});console.log(n);return}let i=e=>{let t=JSON.stringify(e,Ln);console.log(t),r&&r.write(`${t}\n`)},a=e=>{if(!Wn(e.type,t)||(i({source:`nexus`,at:Rn(),...e}),!n))return;let r=String(e.type);r===`connected`?n.info(`Connected to Nexus`):r===`reconnected`?n.success(`Reconnected to Nexus`):r===`disconnected`?n.warn(`Disconnected from Nexus`):r===`reconnecting`?n.info(`Reconnecting to Nexus`):r===`auth_failed`?n.error(`Authentication failed`):r===`heartbeat_failed`?n.warn(`Heartbeat failed repeatedly`):r===`shutdown`&&n.info(`Nexus daemon shutting down`)},o=!1,s=null,c=new Promise(e=>{process.on(`SIGINT`,()=>{o||(o=!0,s=`SIGINT`,e())}),process.on(`SIGTERM`,()=>{o||(o=!0,s=`SIGTERM`,e())})}),l=0,u=null,d=!1;for(;!o;){let n=null;try{await B({host:e.host,module:e.module,wallet:e.wallet,onDisconnect:(...e)=>{n||={reason:`disconnected`,details:e.map(X)}}},async r=>{let i=r.auth?.wallet||e.wallet||null,s=r.iter(`agents`).find(e=>e.identity.toHexString()===r.identity?.toHexString());if(a(d?{type:`reconnected`,attempts:l,downtime_ms:u?Date.now()-u:null,identity:r.identity?.toHexString()}:{type:`connected`,identity:r.identity?.toHexString(),wallet:i,host:e.host||r.config.spacetime.host,module:e.module||r.config.spacetime.module}),d=!0,l=0,u=null,a({type:`subscription_applied`}),a({type:`ready`,identity:r.identity?.toHexString(),wallet:i,log_file:e[`log-file`]||null,log_level:t,auto_heartbeat:!!s}),t===`debug`)for(let t of Fn){let n=r.db[t.key];n.onInsert?.((n,r)=>{e.sender&&(t.name===`messages`||t.name===`project_messages`)&&r.senderId!==e.sender||a({type:`table_insert`,table:t.name,row:X(r)})}),n.onUpdate?.((n,r,i)=>{e.sender&&(t.name===`messages`||t.name===`project_messages`)&&i.senderId!==e.sender||a({type:`table_update`,table:t.name,old_row:X(r),new_row:X(i)})}),n.onDelete?.((n,r)=>{e.sender&&(t.name===`messages`||t.name===`project_messages`)&&r.senderId!==e.sender||a({type:`table_delete`,table:t.name,row:X(r)})})}let f=null,p=!1,m=0,ee=()=>{o||!s||(f=setTimeout(async()=>{if(!s||p||o){ee();return}p=!0;try{await V(r,`heartbeat`,{agentId:s.id}),m>0&&a({type:`heartbeat_recovered`,failed_count_before_recovery:m}),m=0}catch(e){m+=1,m>=3&&!n&&(n={reason:`heartbeat_failed`,details:{consecutive_failures:m,message:Hn(e)}},a({type:`heartbeat_failed`,consecutive_failures:m,message:Hn(e)}))}finally{p=!1,ee()}},Bn(6e4)))};for(s&&ee();!o&&!n;)await Promise.race([c,zn(200)]);f&&clearTimeout(f)})}catch(e){let t=Hn(e);if(Kn(t)){a({type:`auth_failed`,message:t});break}a({type:`subscription_error`,message:t}),n={reason:`disconnected`,details:{message:t}}}if(o)break;a({type:`disconnected`,reason:n?.reason||`disconnected`,details:X(n?.details||null)}),u===null&&(u=Date.now()),l+=1;let r=Vn(l);a({type:`reconnecting`,attempt:l,backoff_ms:r}),await Promise.race([c,zn(r)])}a({type:`shutdown`,signal:s||`unknown`}),r&&r.end()}var Yn=t({meta:{name:`nexus`,description:`Persistent Nexus daemon (keepalive + critical telemetry)`},args:qn,async run({args:e}){if(j()){A({command:`probe nexus`,description:`Run persistent Nexus keepalive + critical event logger`,usage:[`probe nexus [options]`,`probe nexus --wallet agent-wallet`,`probe nexus --wallet agent-wallet --log-file ./logs/nexus-events.jsonl`,`probe nexus --log-level debug --sender zoe-1`,`probe nexus --pretty`],options:[{name:`--wallet`,detail:`Wallet for authenticated persistent connection`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`},{name:`--log-level`,detail:`critical (default), info, or debug`},{name:`--sender`,detail:`Sender filter for debug message events only`},{name:`--log-file`,detail:`Optional JSONL file path for daemon events`},{name:`--pretty`,detail:`Human-readable lifecycle logs to stderr`}],notes:[`stdout is always structured JSONL for machine parsing.`,`Default mode logs critical connection lifecycle and heartbeat health events only.`,`Use --log-level debug to emit full table insert/update/delete payloads.`]});return}await Jn(e)}});const Z={AgentRole:e=>Array.isArray(e)?[`Zoe`,`Admin`,`Zeno`][e[0]]??`variant_${e[0]}`:e,AgentStatus:e=>Array.isArray(e)?[`Online`,`Offline`,`Working`][e[0]]??`variant_${e[0]}`:e,DependencyType:e=>Array.isArray(e)?[`Blocks`,`ParentChild`][e[0]]??`variant_${e[0]}`:e,DiscoveredTaskStatus:e=>Array.isArray(e)?[`PendingReview`,`Approved`,`Rejected`,`EscalatedToIdea`][e[0]]??`variant_${e[0]}`:e,DiscoveryDecision:e=>Array.isArray(e)?[`ApproveAsTask`,`Reject`,`EscalateToIdea`][e[0]]??`variant_${e[0]}`:e,IdeaStatus:e=>Array.isArray(e)?[`Voting`,`ApprovedForProject`,`Rejected`,`Implemented`][e[0]]??`variant_${e[0]}`:e,MessageType:e=>Array.isArray(e)?[`User`,`System`,`Directive`][e[0]]??`variant_${e[0]}`:e,ProjectStatus:e=>Array.isArray(e)?[`Active`,`Paused`][e[0]]??`variant_${e[0]}`:e,TaskStatus:e=>Array.isArray(e)?[`Open`,`Claimed`,`InProgress`,`Review`,`Completed`,`Blocked`,`Archived`][e[0]]??`variant_${e[0]}`:e,VoteType:e=>Array.isArray(e)?[`Up`,`Down`,`Veto`][e[0]]??`variant_${e[0]}`:e},Q=e=>{if(!Array.isArray(e))return e;let t=e[0];return typeof t!=`number`&&typeof t!=`bigint`?e:new Date(Number(t)/1e3).toISOString()},$=e=>t=>{if(!Array.isArray(t))return t;let[n,r]=t;return n===1?null:e?e(r):Array.isArray(r)&&r.length===1?r[0]:r},Xn={agents:{last_heartbeat:Q,current_task_id:$(),created_at:Q,last_active_at:Q,role:Z.AgentRole,status:Z.AgentStatus},channels:{created_at:Q},discovered_tasks:{created_task_id:$(),rejection_reason:$(),created_at:Q,reviewed_at:$(Q),reviewed_by:$(),status:Z.DiscoveredTaskStatus},ideas:{created_at:Q,updated_at:Q,status:Z.IdeaStatus},identity_roles:{role:Z.AgentRole},messages:{context_id:$(),created_at:Q},project_channels:{created_at:Q},project_messages:{context_id:$(),created_at:Q},projects:{created_at:Q,status:Z.ProjectStatus},task_dependencies:{created_at:Q},tasks:{assigned_to:$(),claimed_at:$(Q),github_issue_url:$(),github_pr_url:$(),source_idea_id:$(),archived_reason:$(),status_changed_by:$(),status_changed_at:$(Q),created_at:Q,updated_at:Q,status:Z.TaskStatus,blocked_from_status:$(Z.TaskStatus)},votes:{created_at:Q}};function Zn(e){return e.match(/FROM\s+(\w+)/i)?.[1]?.toLowerCase()}const Qn=e=>{if(typeof e.name==`string`)return e.name;if(e.name&&typeof e.name==`object`&&`some`in e.name)return e.name.some};var $n=class extends Error{status;responseBody;constructor(e,t,n){super(n||`SQL request failed with status ${e}`),this.name=`SqlRequestError`,this.status=e,this.responseBody=t}};const er=e=>{let t=new URL(e);if(t.protocol===`ws:`)t.protocol=`http:`;else if(t.protocol===`wss:`)t.protocol=`https:`;else if(t.protocol!==`http:`&&t.protocol!==`https:`)throw Error(`Unsupported host protocol: ${t.protocol}`);return t.toString()},tr=(e,t)=>{let n=er(e),r=new URL(n);return r.pathname=`${r.pathname.replace(/\/$/,``)}/v1/database/${encodeURIComponent(t)}/sql`,r.toString()},nr=e=>{if(!Array.isArray(e))throw Error(`Invalid SQL response: expected array of statement results`);return e.map(e=>{let t=e,n=Array.isArray(t.rows)?t.rows:[];return{schema:t.schema,rows:n}})},rr=async e=>{let t=tr(e.host,e.moduleName),n=new AbortController,r=setTimeout(()=>n.abort(),e.timeoutMs),i=Date.now();try{let r=await fetch(t,{method:`POST`,headers:{Authorization:`Bearer ${e.token}`,"Content-Type":`text/plain`,Accept:`application/json`},body:e.sql,signal:n.signal}),a=await r.text();if(!r.ok)throw new $n(r.status,a);let o;try{o=a?JSON.parse(a):[]}catch{throw Error(`Invalid SQL response: expected JSON payload`)}return{results:nr(o),durationMs:Date.now()-i}}finally{clearTimeout(r)}},ir=e=>{let t=e.schema;return t&&`elements`in t&&Array.isArray(t.elements)?t.elements.map(Qn).filter(e=>e!==void 0):t&&`columns`in t&&Array.isArray(t.columns)?t.columns.map(e=>e.name):[]},ar=e=>{let t;try{t=JSON.parse(e).error||e}catch{t=e}return t.includes(`ORDER BY`)?{message:t,suggestion:`SpacetimeDB SQL does not support ORDER BY. Remove it or filter/sort results locally.`}:t.includes(`IS NULL`)||t.includes(`IS NOT NULL`)?{message:t,suggestion:`Use "column = NULL" or "column != NULL" instead of IS NULL / IS NOT NULL.`}:t.includes(`JOIN`)?{message:t,suggestion:`SpacetimeDB has limited JOIN support. Try querying single tables or use multiple queries.`}:t.includes(`no such table`)?{message:t,suggestion:`Check the table name. Common tables: tasks, projects, agents, ideas, messages.`}:t.includes(`no such column`)?{message:t,suggestion:`Check the column name. Use SELECT * to see all available columns.`}:{message:t}},or=Object.keys(Xn),sr=(e,t)=>{if(e instanceof $n){e.status===401&&E(`AUTH_REQUIRED`,"Authentication required. Run `probe auth <wallet> --save` first.");let{message:t,suggestion:n}=ar(e.responseBody);e.status===400&&E(`SQL_INVALID`,t,n),E(`SQL_FAILED`,t,n)}e instanceof Error&&e.name===`AbortError`&&E(`SQL_UNAVAILABLE`,`SQL request timed out after ${t}ms`),E(`SQL_UNAVAILABLE`,e instanceof Error?e.message:`SQL request failed`)},cr=3e4,lr=(e,t)=>({duration_ms:t,query_count:e.length,row_count_total:e.reduce((e,t)=>e+t.rows.length,0)}),ur=(e,t,n)=>{let r={};for(let i=0;i<e.length;i+=1){let a=e[i],o=ir(a),s=t&&n?Xn[n]:void 0,c=a.rows.map(e=>{let t={};for(let n=0;n<o.length;n++){let r=o[n],i=e[n],a=s?.[r];t[r]=a?a(i):i}return t});r[`query_${i+1}`]={columns:o,rows:c}}return e.length===0&&(r.query_1={columns:[],rows:[]}),r},dr=(e,t,n,r,i)=>{let a={},o=r&&i?Xn[i]:void 0;for(let t=0;t<e.length;t+=1){let n=e[t],r=ir(n),i=n.rows.map(e=>{let t={};for(let n=0;n<r.length;n++){let i=r[n],a=e[n],s=o?.[i];t[i]=s?s(a):a}return t});a[`query_${t+1}`]=i}return e.length===0&&(a.query_1=[]),t&&(a.meta=[lr(e,n)]),an(a)};var fr=t({meta:{name:`query`,description:`Run SQL read queries against Nexus`},args:{sql:{type:`positional`,description:`SQL query string`,required:!1},file:{type:`string`,description:`Read SQL from file path`},wallet:{type:`string`,description:`Wallet name override`},host:{type:`string`,description:`SpacetimeDB host override`},module:{type:`string`,description:`SpacetimeDB module override`},timeout:{type:`string`,description:`Request timeout in milliseconds`},meta:{type:`boolean`,description:`Include metadata in output`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1},tables:{type:`boolean`,description:`List all available tables`,default:!1},decode:{type:`boolean`,description:`Decode algebraic types to human-readable values`,default:!0},raw:{type:`boolean`,description:`Output raw algebraic type arrays (no decoding)`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.sql||e.file;if(e.tables){w()?T({tables:or}):console.log(an({tables:or}));return}if(!t){A({command:`probe query`,description:`Execute SQL against the configured Nexus SpacetimeDB module`,usage:[`probe query "SELECT * FROM tasks LIMIT 5"`,`probe query --file ./query.sql --meta`,`probe query --tables`],options:[{name:`--file`,detail:`Read SQL from file`},{name:`--wallet`,detail:`Wallet override (defaults to config defaultWallet)`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`},{name:`--timeout`,detail:`Request timeout in ms (default: ${cr})`},{name:`--meta`,detail:`Include metadata in output`},{name:`--json`,detail:`JSON output mode with keyed objects`},{name:`--tables`,detail:`List all available tables`},{name:`--decode`,detail:`Decode algebraic types (default: true)`},{name:`--raw`,detail:`Output raw algebraic arrays (no decoding)`}],notes:[`This command is read-only and intended for SQL queries against Nexus tables.`,`JSON mode returns keyed objects: {"query_1": {"columns": [...], "rows": [{"id": 1, ...}]}}`,`Use --raw to see raw SpacetimeDB algebraic type arrays.`]});return}let n=e.timeout?Number.parseInt(e.timeout,10):cr;(!Number.isFinite(n)||n<=0)&&E(`INVALID_TIMEOUT`,`Invalid timeout: ${e.timeout}`);let r=await S(),i=e.wallet||r.defaultWallet;i||E(`WALLET_REQUIRED`,`Wallet required. Use --wallet or set default wallet.`),await P(i)||E(`WALLET_NOT_FOUND`,`Wallet not found: ${i}`);let a=await M(i);a||E(`AUTH_REQUIRED`,"No cached token. Run `probe auth <wallet> --save` first.");let o=e.host||r.spacetime.host,s=e.module||r.spacetime.module,c=e.file?await d(e.file,`utf-8`):e.sql??``;c.trim()||E(`SQL_REQUIRED`,`SQL query is empty`);let l=e.raw?!1:e.decode??!0,u=Zn(c);try{let{results:t,durationMs:r}=await rr({host:o,moduleName:s,token:a.token,sql:c,timeoutMs:n});if(w()){let n=ur(t,l,u);e.meta?T({...n,meta:lr(t,r)}):T(n);return}console.log(dr(t,!!e.meta,r,l,u))}catch(e){sr(e,n)}}}),pr=t({meta:{name:`sign`,description:`Sign a message using wallet private key`},args:{name:{type:`positional`,description:`Wallet name`,required:!1},message:{type:`positional`,description:`Message to sign`,required:!1},"message-file":{type:`string`,description:`Read message from file`},"password-file":{type:`string`,description:`Read password from file`},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(!t){A({command:`probe sign`,description:`Sign arbitrary text using wallet private key`,usage:[`probe sign <wallet-name> <message> [options]`,`probe sign <wallet-name> --message-file ./payload.txt [options]`],options:[{name:`--message-file`,detail:`Read message content from file`},{name:`--password-file`,detail:`Read wallet password from file`},{name:`--json`,detail:`JSON output for agents`}]});return}let n;if(e[`message-file`])try{n=await d(e[`message-file`],`utf-8`)}catch{E(`FILE_READ_ERROR`,`Failed to read message file: ${e[`message-file`]}`)}else e.message?n=e.message:E(`MESSAGE_REQUIRED`,`Message or message-file required`);let i=await Re({passwordFile:e[`password-file`],promptMessage:`Enter wallet password:`,jsonModeError:`Password file required in JSON mode or provide PROBE_WALLET_PASSWORD`});try{let e=(await nt(t,i)).getKeyPair(0),a=e.sign(r.from(n)),o=e.getPublicKey(),s=e.getAddress();T({wallet:t,message:n,signature:a.toString(`hex`),publicKey:o.toString(`hex`),address:s.toString()}),w()||(O(`Message signed successfully`),console.log(`Signature: ${a.toString(`hex`)}`))}catch(e){E(`SIGN_ERROR`,e instanceof Error?e.message:`Failed to sign message`)}}}),mr=t({meta:{name:`token`,description:`Show cached JWT token for wallet`},args:{name:{type:`positional`,description:`Wallet name`,required:!1},clear:{type:`boolean`,description:`Clear cached token now (next auth call gets a new token)`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(!t){A({command:`probe token`,description:`Inspect or clear cached authentication token`,usage:[`probe token <wallet-name> [options]`,`probe token <wallet-name> --clear`],options:[{name:`--clear`,detail:`Clear cached token now (recommended)`},{name:`--json`,detail:`JSON output for agents`}]});return}if(e.clear){await Ze(t),T({cleared:t}),w()||D(`Token cache cleared for "${t}". Run 'probe auth' to get a new token.`);return}try{let e=await M(t);e||E(`TOKEN_NOT_FOUND`,`No cached token for wallet '${t}'`,`Run 'probe auth ${t} --save' to authenticate`);let n=new Date(e.expiresAt),r=new Date,i=Math.floor((n.getTime()-r.getTime())/1e3),a=i>0;T({wallet:t,token:e.token,expiresAt:e.expiresAt,expiresIn:Math.max(0,i),valid:a}),w()||(console.log(`Wallet: ${t}`),console.log(`Token: ${e.token.slice(0,50)}...`),console.log(`Expires: ${n.toUTCString()}`),console.log(`Status: ${a?`Valid`:`Expired`}`),a||D(`Token has expired. Run with --clear to remove it and re-authenticate.`))}catch(e){E(`TOKEN_ERROR`,e instanceof Error?e.message:`Failed to read token`)}}}),hr=t({meta:{name:`create`,description:`Create a new wallet with randomly generated mnemonic`},args:{name:{type:`positional`,description:`Wallet identifier`,required:!1},"password-file":{type:`string`,description:`Read password from file`},"set-default":{type:`boolean`,description:`Set this wallet as the default`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(j()||!t){A({command:`probe wallet create`,description:`Create a new encrypted wallet`,usage:[`probe wallet create <name> [options]`,`probe wallet create agent-wallet --set-default`],options:[{name:`--password-file`,detail:`Read wallet password from file`},{name:`--set-default`,detail:`Set created wallet as default`},{name:`--json`,detail:`JSON output for agents`}],notes:[`Password source order: --password-file, PROBE_WALLET_PASSWORD, interactive prompt.`]});return}/^[a-zA-Z0-9_-]+$/.test(t)||E(`INVALID_NAME`,`Wallet name must be alphanumeric with hyphens or underscores only`);let n=await S(),r=await Re({passwordFile:e[`password-file`],promptMessage:`Enter password to encrypt wallet:`,confirmPromptMessage:`Confirm password:`,minLength:n.passwordMinLength,jsonModeError:`Password required via PROBE_WALLET_PASSWORD env, --password-file, or interactive prompt`});try{let n=await $e(t,r),i=e[`set-default`];if(i||(await tt()).length===1&&(i=!0),i){let e=await y();e.defaultWallet=n.name,await b(e)}T({name:n.name,address:n.address,publicKey:n.publicKey,mnemonic:n.mnemonic,default:i}),w()||(O(`Wallet "${n.name}" created successfully`),console.log(`Address: ${n.address}`),console.log(`\nMnemonic: ${n.mnemonic}`),Fe(`Save this mnemonic securely - it cannot be recovered!`),i&&console.log(`
|
|
6
|
-
|
|
7
|
-
Set as default wallet`))}catch(e){E(`
|
|
8
|
-
|
|
2
|
+
import{createRequire as e}from"node:module";import{defineCommand as t,runMain as n}from"citty";import{Buffer as r}from"node:buffer";import{arch as i,homedir as a,platform as o}from"node:os";import{dirname as s,join as c,resolve as l}from"node:path";import{loadConfig as u}from"c12";import{access as d,mkdir as f,readFile as p,readdir as m,unlink as ee,writeFile as h}from"node:fs/promises";import{confirm as te,log as ne,password as re,spinner as ie,text as ae}from"@clack/prompts";import{AsyncLocalStorage as oe}from"node:async_hooks";import{blue as se,bold as ce,cyan as le,dim as ue,gray as de,green as fe,white as pe}from"kolorist";import{KeyFile as me,KeyStore as he}from"znn-typescript-sdk";import{DbConnectionBuilder as ge,DbConnectionImpl as _e,SubscriptionBuilderImpl as ve,convertToAccessorMap as ye,makeQueryBuilder as be,procedureSchema as xe,procedures as Se,reducerSchema as g,reducers as Ce,schema as we,t as _,table as v}from"spacetimedb";import{encode as Te}from"@toon-format/toon";import{createWriteStream as Ee,existsSync as De,readFileSync as Oe,renameSync as ke,unlinkSync as Ae}from"node:fs";import{createConsola as je}from"consola";import{execSync as y}from"node:child_process";import{createHash as Me}from"node:crypto";import{Readable as Ne}from"node:stream";import{finished as Pe}from"node:stream/promises";const Fe={issuer:`https://api.zenon.red`,walletDir:`~/.probe/wallets`,passwordMinLength:8,tokenCacheDir:`~/.probe/tokens`,requestTimeout:3e4,spacetime:{host:`wss://db.zenon.red`,module:`nexus`}},Ie=c(a(),`.probe`,`config.json`),Le=c(a(),`.probe`);async function b(){try{await d(Ie);let e=await p(Ie,`utf-8`);return JSON.parse(e)}catch{return{}}}async function Re(e){await f(Le,{recursive:!0}),await h(Ie,JSON.stringify(e,null,2),{mode:384})}let x=null;async function S(){if(x)return x;let[e,t]=await Promise.all([u({name:`probe`,defaults:Fe,envName:`PROBE`}),b()]);return x={...Fe,...e.config,...t},x.walletDir=Be(x.walletDir),x.tokenCacheDir=Be(x.tokenCacheDir),x}function ze(){x=null}function Be(e){return e.startsWith(`~/`)?c(a(),e.slice(2)):e}async function Ve(){return(await S()).walletDir}async function He(){return(await S()).tokenCacheDir}const Ue=new oe,We=(e,t)=>typeof t==`bigint`?t.toString():t,Ge=(e,t=!1)=>{let n=JSON.stringify(e,We,2);if(t){console.error(n);return}console.log(n)};function C(e){Ue.enterWith({jsonMode:e})}function w(){return Ue.getStore()?.jsonMode===!0}function T(e){w()&&Ge({success:!0,data:e})}function E(e,t,n,r=1){w()?(Ge({success:!1,error:{code:e,message:t,...n&&{suggestion:n}}},!0),process.exit(r)):(ne.error(t),n&&console.error(`${ue(`hint:`)} ${n}`),process.exit(r))}function D(e){w()||ne.info(e)}function O(e){w()||ne.success(e)}function Ke(e){w()||ne.warn(e)}function qe(e){if(w())return{start:()=>{},stop:()=>{},succeed:()=>{},fail:()=>{}};let t=ie();return{start:()=>{t.start(e)},stop:()=>{t.stop()},succeed:n=>{t.stop(n||e,0)},fail:n=>{t.stop(n||e,1)}}}const Je=async(e,t)=>{try{return(await p(e,`utf-8`)).trim()}catch{E(`FILE_READ_ERROR`,`Failed to read ${t} file: ${e}`)}},Ye=async e=>{if(e.passwordFile)return Je(e.passwordFile,`password`);let t=e.envVar||`PROBE_WALLET_PASSWORD`,n=process.env[t];if(n)return n;(w()||!process.stdin.isTTY||!process.stdout.isTTY)&&E(`PASSWORD_REQUIRED`,e.jsonModeError);let r=await re({message:e.promptMessage,validate:t=>{if(e.minLength&&t.length<e.minLength)return`Password must be at least ${e.minLength} characters`}});return typeof r!=`string`&&process.exit(130),e.confirmPromptMessage&&typeof await re({message:e.confirmPromptMessage,validate:e=>e===r?void 0:`Passwords do not match`})!=`string`&&process.exit(130),r},Xe=async e=>{if(e.mnemonic)return e.mnemonic;if(e.mnemonicFile)return Je(e.mnemonicFile,`mnemonic`);let t=e.envVar||`PROBE_WALLET_MNEMONIC`,n=process.env[t];if(n)return n;(w()||!process.stdin.isTTY||!process.stdout.isTTY)&&E(`MNEMONIC_REQUIRED`,e.jsonModeError);let r=await ae({message:`Enter mnemonic phrase:`,validate:e=>e.trim().split(/\s+/).length===24?void 0:`Mnemonic must be 24 words`});return typeof r!=`string`&&process.exit(130),r},Ze=new Set([`agent`,`task`,`message`,`idea`,`discover`,`project`,`config`]),Qe=new Set([`wallet`,`auth`,`sign`,`token`,`nexus`,`query`,`doctor`,`upgrade`]),$e=new Set([`create`,`import`,`list`,`show`,`delete`,`default`]);let et=!1;const tt=e=>`\u001b[48;2;120;239;93m\u001b[38;2;12;28;16m ${e} \u001b[0m`,k=e=>tt(e.toUpperCase()),nt=(e,t)=>{let n=Math.max(...e.map(e=>e.name.length),0);return e.map(e=>` ${t(e.name.padEnd(n))} ${e.detail}`).join(`
|
|
3
|
+
`)},A=e=>{let t=[...e.notes||[]],n=(e.options||[]).some(e=>e.name.includes(`--host`)&&e.name.includes(`--module`)),r=t.some(e=>e.includes(`--host`)&&e.includes(`--module`));n&&!r&&t.push(`--host sets the SpacetimeDB server endpoint; --module sets the target module/database name (default: nexus).`);let i=[];i.push(`${ce(pe(e.command))} ${ue(`•`)} ${de(e.description)}`),i.push(``),i.push(k(`Usage`));for(let t of e.usage)i.push(` ${pe(t)}`);if(e.actions&&e.actions.length>0&&(i.push(``),i.push(k(`Actions`)),i.push(nt(e.actions,fe))),e.options&&e.options.length>0&&(i.push(``),i.push(k(`Options`)),i.push(nt(e.options,se))),e.examples&&e.examples.length>0){i.push(``),i.push(k(`Examples`));for(let t of e.examples)i.push(` ${le(t)}`)}if(t.length>0){i.push(``),i.push(k(`Notes`));for(let e of t)i.push(` ${ue(`-`)} ${e}`)}console.log(i.join(`
|
|
4
|
+
`))},rt=e=>{et=e},j=()=>et,it=e=>{if(!(e.includes(`--help`)||e.includes(`-h`)))return{argv:e,forceHelp:!1};if(e.every(e=>e.startsWith(`-`)))return{argv:[],forceHelp:!0};let t=e.find(e=>!e.startsWith(`-`));if(!t)return{argv:e,forceHelp:!0};if(Ze.has(t))return{argv:[t],forceHelp:!0};if(!Qe.has(t))return{argv:e,forceHelp:!0};if(t===`wallet`){let n=e.filter(e=>!e.startsWith(`-`));if(n.length>1&&$e.has(n[1]))return{argv:[t,n[1]],forceHelp:!0}}return{argv:[t],forceHelp:!0}};async function at(e,t){let n=await S(),r=`${t||n.issuer}/auth/challenge`,i=await fetch(r,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({address:e})});if(!i.ok){let e=await i.text();throw Error(`Challenge request failed: ${e}`)}let a=await i.json();return{nonce:a.nonce,challenge:a.challenge,expiresAt:a.expires_at}}async function ot(e,t,n,r,i){let a=await S(),o=`${i||a.issuer}/auth/token`,s=await fetch(o,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({address:e,public_key:t,signature:n,nonce:r})});if(!s.ok){let e=await s.text();throw Error(`Token exchange failed: ${e}`)}let c=await s.json();return{accessToken:c.access_token,idToken:c.id_token,expiresIn:c.expires_in}}async function st(e,t,n){let r=await He();try{await f(r,{recursive:!0})}catch{}let i=c(r,`${e}.jwt`),a={token:t,expiresAt:n};await h(i,JSON.stringify(a),{mode:384})}async function M(e){let t=c(await He(),`${e}.jwt`);try{await d(t);let e=await p(t,`utf-8`);return JSON.parse(e)}catch{return null}}async function ct(e){let t=c(await He(),`${e}.jwt`);try{await d(t);let{unlink:e}=await import(`node:fs/promises`);await e(t)}catch{}}async function lt(){let e=await Ve();try{await f(e,{recursive:!0})}catch{}return e}async function N(e){return c(await lt(),`${e}.json`)}async function ut(e,t){if(await ht(e))throw Error(`Wallet '${e}' already exists`);let n=he.newRandom(),r=await me.setPassword(t).encrypt(n);await h(await N(e),JSON.stringify(r,null,2),`utf-8`);let i=n.getKeyPair(0),a=i.getAddress(),o=i.getPublicKey();return{name:e,address:a.toString(),publicKey:o.toString(`hex`),mnemonic:n.mnemonic||``}}async function dt(e,t,n){if(await ht(e))throw Error(`Wallet '${e}' already exists`);let r=he.fromMnemonic(t),i=await me.setPassword(n).encrypt(r);return await h(await N(e),JSON.stringify(i,null,2),`utf-8`),{name:e,address:r.getKeyPair(0).getAddress().toString()}}async function ft(){let e=await Ve();try{let t=await m(e),n=[];for(let e of t)if(e.endsWith(`.json`)){let t=await P(e.slice(0,-5));t&&n.push(t)}return n}catch{return[]}}async function P(e){let t=await N(e);try{let n=await p(t,`utf-8`),r=JSON.parse(n),i=await gt(t);return{name:e,address:r.address||r.baseAddress,createdAt:r.timestamp?new Date(r.timestamp*1e3).toISOString():new Date(i.mtime).toISOString()}}catch{return null}}async function pt(e,t){let n=await N(e);try{let e=await p(n,`utf-8`),r=JSON.parse(e);return await me.setPassword(t).decrypt(r)}catch(e){throw Error(`Failed to load wallet: ${e instanceof Error?e.message:`Unknown error`}`)}}async function mt(e){let t=await N(e);try{await ee(t)}catch(e){throw Error(`Failed to delete wallet: ${e instanceof Error?e.message:`Unknown error`}`)}}async function ht(e){let t=await N(e);try{return await d(t),!0}catch{return!1}}async function gt(e){let{stat:t}=await import(`node:fs/promises`);return t(e)}var _t=t({meta:{name:`auth`,description:`Complete OIDC authentication flow`},args:{name:{type:`positional`,description:`Wallet name, or status action`,required:!1},wallet:{type:`string`,description:`Wallet name override (used with auth status)`},"expect-address":{type:`string`,description:`Expected Zenon address safety check (z1...)`},issuer:{type:`string`,description:`OIDC issuer URL override`},"password-file":{type:`string`,description:`Read password from file`},save:{type:`boolean`,description:`Save token to cache (default: true)`,default:!0},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name,n=e[`expect-address`];if(!t){A({command:`probe auth`,description:`Complete OIDC authentication flow`,usage:[`probe auth <wallet-name> [options]`,`probe auth status [--wallet my-wallet]`,`probe auth my-wallet --save`,`probe auth my-wallet --expect-address z1q... --save`],options:[{name:`--expect-address`,detail:`Optional safety check against resolved wallet address`},{name:`--wallet`,detail:"Wallet override for `auth status`"},{name:`--issuer`,detail:`OIDC issuer URL (default from config: issuer)`},{name:`--password-file`,detail:`Read wallet password from file`},{name:`--save`,detail:`Save token in local cache (default: true)`},{name:`--json`,detail:`JSON output for agents`}],notes:[`Password source order: --password-file, PROBE_WALLET_PASSWORD, interactive prompt.`,`Most users should omit --expect-address; it is for safety checks in external workflows.`,`Use --issuer only when authenticating against a non-default OIDC server (for example local/dev environments).`]});return}if(t===`status`){let t=await S(),n=e.wallet||t.defaultWallet;n||E(`WALLET_REQUIRED`,`Wallet required. Use --wallet or set default wallet.`);let r=await M(n);if(!r){T({wallet:n,authenticated:!1,valid:!1,reason:`no_cached_token`}),w()||(console.log(`Wallet: ${n}`),console.log(`Status: Not authenticated (no cached token)`),console.log(`Next: probe auth ${n} --save`));return}let i=new Date(r.expiresAt),a=Math.floor((i.getTime()-Date.now())/1e3),o=Number.isFinite(a)&&a>0;T({wallet:n,authenticated:!0,valid:o,expiresAt:r.expiresAt,expiresIn:Math.max(0,a)}),w()||(console.log(`Wallet: ${n}`),console.log(`Status: ${o?`Authenticated`:`Token expired`}`),console.log(`Expires: ${i.toUTCString()}`));return}let i=await Ye({passwordFile:e[`password-file`],promptMessage:`Enter wallet password:`,jsonModeError:`Password required via PROBE_WALLET_PASSWORD env, --password-file, or interactive prompt in a TTY session`}),a,o,s;try{a=(await pt(t,i)).getKeyPair(0),o=a.getAddress().toString(),n&&o!==n&&E(`ADDRESS_MISMATCH`,`Wallet address ${o} does not match provided address ${n}`),s=n||o}catch(e){E(`WALLET_LOAD_ERROR`,e instanceof Error?e.message:`Failed to load wallet`)}try{let n=qe(`Requesting challenge from OIDC provider...`);n.start();let i=await at(s,e.issuer);n.succeed();let o=qe(`Signing challenge...`);o.start();let c=a.sign(r.from(i.challenge)),l=a.getPublicKey();o.succeed();let u=qe(`Exchanging for token...`);u.start();let d=await ot(s,l.toString(`hex`),c.toString(`hex`),i.nonce,e.issuer);u.succeed();let f=new Date(Date.now()+d.expiresIn*1e3).toISOString();e.save&&await st(t,d.accessToken,f),T({wallet:t,address:s,token:d.accessToken,expiresAt:f,expiresIn:d.expiresIn}),w()||(O(`Authentication successful`),e.save&&console.log(`Token saved to wallet cache.`),console.log(`Expires: ${new Date(f).toUTCString()} (${Math.floor(d.expiresIn/86400)} days)`))}catch(e){E(`AUTH_ERROR`,e instanceof Error?e.message:`Authentication failed`,void 0,2)}}});function vt(e,t){let n=t.split(`.`),r=e;for(let e of n)if(r&&typeof r==`object`&&e in r)r=r[e];else return;return r}function yt(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];(!(t in i)||typeof i[t]!=`object`)&&(i[t]={}),i=i[t]}i[r[r.length-1]]=n}var bt=t({meta:{name:`config`,description:`Manage configuration settings`},args:{action:{type:`positional`,description:`Action: get, set, list`,required:!1},key:{type:`positional`,description:`Configuration key`,required:!1},value:{type:`positional`,description:`Configuration value`,required:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe config`,description:`Read and write CLI configuration values`,usage:[`probe config <action> [key] [value]`,`probe config get spacetime.host`,`probe config set defaultWallet agent-wallet`],actions:[{name:`get <key>`,detail:`Get one config value`},{name:`set <key> <value>`,detail:`Set one config value`},{name:`list`,detail:`List merged config and user overrides`}],notes:[`Valid keys: issuer, walletDir, defaultWallet, tokenCacheDir, requestTimeout, spacetime.host, spacetime.module.`]});return}let t=e.action,n=[`issuer`,`walletDir`,`defaultWallet`,`tokenCacheDir`,`requestTimeout`,`spacetime.host`,`spacetime.module`];try{switch(t){case`get`:{e.key||E(`KEY_REQUIRED`,`Configuration key required`),n.includes(e.key)||E(`INVALID_KEY`,`Invalid configuration key: ${e.key}`,`Valid keys: ${n.join(`, `)}`);let t=vt(await S(),e.key);T({[e.key]:t}),w()||console.log(`${e.key}: ${t}`);break}case`set`:{(!e.key||e.value===void 0)&&E(`ARGS_REQUIRED`,`Configuration key and value required`),n.includes(e.key)||E(`INVALID_KEY`,`Invalid configuration key: ${e.key}`,`Valid keys: ${n.join(`, `)}`);let t=e.value;e.key===`requestTimeout`&&(t=parseInt(e.value,10));let r=await b();yt(r,e.key,t),await Re(r),ze(),T({[e.key]:t}),w()||O(`Set ${e.key} = ${t}`);break}case`list`:{let e=await S(),t=await b();if(T({...e,userConfig:t}),!w()&&(console.log(`Configuration:`),console.log(` issuer: ${e.issuer}`),console.log(` walletDir: ${e.walletDir}`),console.log(` defaultWallet: ${e.defaultWallet||`(not set)`}`),console.log(` passwordMinLength: ${e.passwordMinLength}`),console.log(` tokenCacheDir: ${e.tokenCacheDir}`),console.log(` requestTimeout: ${e.requestTimeout}`),console.log(` spacetime.host: ${e.spacetime.host}`),console.log(` spacetime.module: ${e.spacetime.module}`),Object.keys(t).length>0)){console.log(`
|
|
5
|
+
User overrides:`);for(let[e,n]of Object.entries(t))console.log(` ${e}: ${JSON.stringify(n)}`)}break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: get, set, list`)}}catch(e){E(`CONFIG_ERROR`,e instanceof Error?e.message:`Configuration error`)}}});_.object(`Agent`,{id:_.string(),name:_.string(),bio:_.string(),get role(){return F},capabilities:_.array(_.string()),get status(){return xt},zenonAddress:_.string(),identity:_.identity(),lastHeartbeat:_.timestamp(),currentTaskId:_.option(_.u64()),createdAt:_.timestamp(),lastActiveAt:_.timestamp()});const F=_.enum(`AgentRole`,{Zoe:_.unit(),Admin:_.unit(),Zeno:_.unit()}),xt=_.enum(`AgentStatus`,{Online:_.unit(),Offline:_.unit(),Working:_.unit()});_.object(`AgentVoiceCounter`,{agentId:_.identity(),nextSeq:_.u64()});const St=_.enum(`AnnouncementStatus`,{Pending:_.unit(),Ready:_.unit(),Failed:_.unit()});_.object(`Channel`,{id:_.u64(),name:_.string(),createdBy:_.string(),createdAt:_.timestamp()}),_.object(`Config`,{key:_.string(),value:_.string()});const Ct=_.enum(`DependencyType`,{Blocks:_.unit(),ParentChild:_.unit()}),wt=_.object(`DimensionScore`,{dimension:_.string(),score:_.u8()});_.object(`DiscoveredTask`,{id:_.u64(),discoveredBy:_.string(),currentTaskId:_.u64(),projectId:_.u64(),title:_.string(),description:_.string(),priority:_.u8(),taskType:_.string(),severity:_.string(),get status(){return Tt},createdTaskId:_.option(_.u64()),rejectionReason:_.option(_.string()),createdAt:_.timestamp(),reviewedAt:_.option(_.timestamp()),reviewedBy:_.option(_.string())});const Tt=_.enum(`DiscoveredTaskStatus`,{PendingReview:_.unit(),Approved:_.unit(),Rejected:_.unit(),EscalatedToIdea:_.unit()}),Et=_.enum(`DiscoveryDecision`,{ApproveAsTask:_.unit(),Reject:_.unit(),EscalateToIdea:_.unit()});_.object(`EvaluationDimension`,{id:_.u64(),name:_.string(),label:_.string(),weight:_.f64(),minScore:_.u8(),maxScore:_.u8(),description:_.string(),active:_.bool(),sortOrder:_.u16()});const Dt=_.object(`GenerateVoiceResult`,{id:_.u64(),seq:_.u64(),agentName:_.string(),keyPrefix:_.string()});_.object(`Idea`,{id:_.u64(),title:_.string(),description:_.string(),category:_.string(),get status(){return Ot},activeAgentCount:_.u32(),quorum:_.u16(),approvalThreshold:_.u16(),vetoThreshold:_.u16(),upVotes:_.u16(),downVotes:_.u16(),vetoCount:_.u16(),totalVotes:_.u16(),createdBy:_.string(),createdAt:_.timestamp(),updatedAt:_.timestamp(),computedScore:_.f64()});const Ot=_.enum(`IdeaStatus`,{Voting:_.unit(),ApprovedForProject:_.unit(),Rejected:_.unit(),Implemented:_.unit()});_.object(`IdentityRole`,{identity:_.identity(),get role(){return F}}),_.object(`Message`,{id:_.u64(),channelId:_.u64(),senderId:_.string(),content:_.string(),get messageType(){return I},contextId:_.option(_.string()),createdAt:_.timestamp()});const I=_.enum(`MessageType`,{User:_.unit(),System:_.unit(),Directive:_.unit()});_.object(`Project`,{id:_.u64(),sourceIdeaId:_.u64(),name:_.string(),githubRepo:_.string(),description:_.string(),get status(){return kt},createdAt:_.timestamp(),createdBy:_.string()}),_.object(`ProjectChannel`,{projectId:_.u64(),createdAt:_.timestamp()}),_.object(`ProjectMessage`,{id:_.u64(),projectId:_.u64(),senderId:_.string(),content:_.string(),get messageType(){return I},contextId:_.option(_.string()),createdAt:_.timestamp()});const kt=_.enum(`ProjectStatus`,{Active:_.unit(),Paused:_.unit()});_.object(`Task`,{id:_.u64(),projectId:_.u64(),title:_.string(),description:_.string(),get status(){return L},assignedTo:_.option(_.string()),claimedAt:_.option(_.timestamp()),githubIssueUrl:_.option(_.string()),githubPrUrl:_.option(_.string()),priority:_.u8(),sourceIdeaId:_.option(_.u64()),reviewCount:_.u8(),get blockedFromStatus(){return _.option(L)},archivedReason:_.option(_.string()),statusChangedBy:_.option(_.identity()),statusChangedAt:_.option(_.timestamp()),createdAt:_.timestamp(),updatedAt:_.timestamp(),createdBy:_.string()}),_.object(`TaskDependency`,{id:_.u64(),taskId:_.u64(),dependsOnId:_.u64(),get dependencyType(){return Ct},createdAt:_.timestamp()});const L=_.enum(`TaskStatus`,{Open:_.unit(),Claimed:_.unit(),InProgress:_.unit(),Review:_.unit(),Completed:_.unit(),Blocked:_.unit(),Archived:_.unit()});_.object(`VoiceAllowedHost`,{host:_.string()}),_.object(`VoiceAnnouncement`,{id:_.u64(),agentId:_.identity(),seq:_.u64(),agentName:_.string(),transcript:_.string(),audioUrl:_.string(),get status(){return St},contextType:_.option(_.string()),contextId:_.option(_.u64()),finalizedAt:_.option(_.timestamp()),failedAt:_.option(_.timestamp()),errorMessage:_.option(_.string()),createdAt:_.timestamp()}),_.object(`Vote`,{id:_.u64(),ideaId:_.u64(),agentId:_.string(),get voteType(){return At},get scores(){return _.array(wt)},createdAt:_.timestamp()});const At=_.enum(`VoteType`,{Up:_.unit(),Down:_.unit(),Veto:_.unit()});var jt={taskId:_.u64(),dependsOnId:_.u64(),get dependencyType(){return Ct}},Mt={taskId:_.u64()},Nt={sourceIdeaId:_.u64(),name:_.string(),githubRepo:_.string(),description:_.string()},Pt={projectId:_.u64(),title:_.string(),description:_.string(),priority:_.u8(),sourceIdeaId:_.option(_.u64()),githubIssueUrl:_.option(_.string())},Ft={currentTaskId:_.u64(),projectId:_.u64(),title:_.string(),description:_.string(),priority:_.u8(),taskType:_.string(),severity:_.string()},It={announcementId:_.u64(),errorMessage:_.string()},Lt={announcementId:_.u64(),audioUrl:_.string()},Rt={agentId:_.string()},zt={ideaId:_.u64()},Bt={title:_.string(),description:_.string(),category:_.string()},Vt={agentId:_.string(),name:_.string(),zenonAddress:_.string(),get role(){return _.option(F)}},Ht={discoveryId:_.u64(),get decision(){return Et},reason:_.option(_.string())},Ut={},Wt={},Gt={channelId:_.u64(),content:_.string(),get messageType(){return I},contextId:_.option(_.string())},Kt={projectId:_.u64(),content:_.string(),get messageType(){return I},contextId:_.option(_.string())},qt={get status(){return xt},taskId:_.option(_.u64())},Jt={bio:_.string()},Yt={capabilities:_.array(_.string())},Xt={projectId:_.u64(),get status(){return kt}},Zt={taskId:_.u64(),get status(){return L},githubPrUrl:_.option(_.string()),archiveReason:_.option(_.string())},Qt={ideaId:_.u64(),get scores(){return _.array(wt)}};const $t={transcript:_.string(),audioUrl:_.option(_.string()),contextType:_.option(_.string())},en=_.result(Dt,_.string());var tn=_.row({id:_.string().primaryKey(),name:_.string(),bio:_.string(),get role(){return F},capabilities:_.array(_.string()),get status(){return xt},zenonAddress:_.string().name(`zenon_address`),identity:_.identity(),lastHeartbeat:_.timestamp().name(`last_heartbeat`),currentTaskId:_.option(_.u64()).name(`current_task_id`),createdAt:_.timestamp().name(`created_at`),lastActiveAt:_.timestamp().name(`last_active_at`)}),nn=_.row({id:_.u64().primaryKey(),name:_.string(),createdBy:_.string().name(`created_by`),createdAt:_.timestamp().name(`created_at`)}),rn=_.row({key:_.string().primaryKey(),value:_.string()}),an=_.row({id:_.u64().primaryKey(),discoveredBy:_.string().name(`discovered_by`),currentTaskId:_.u64().name(`current_task_id`),projectId:_.u64().name(`project_id`),title:_.string(),description:_.string(),priority:_.u8(),taskType:_.string().name(`task_type`),severity:_.string(),get status(){return Tt},createdTaskId:_.option(_.u64()).name(`created_task_id`),rejectionReason:_.option(_.string()).name(`rejection_reason`),createdAt:_.timestamp().name(`created_at`),reviewedAt:_.option(_.timestamp()).name(`reviewed_at`),reviewedBy:_.option(_.string()).name(`reviewed_by`)}),on=_.row({id:_.u64().primaryKey(),name:_.string(),label:_.string(),weight:_.f64(),minScore:_.u8().name(`min_score`),maxScore:_.u8().name(`max_score`),description:_.string(),active:_.bool(),sortOrder:_.u16().name(`sort_order`)}),sn=_.row({id:_.u64().primaryKey(),title:_.string(),description:_.string(),category:_.string(),get status(){return Ot},activeAgentCount:_.u32().name(`active_agent_count`),quorum:_.u16(),approvalThreshold:_.u16().name(`approval_threshold`),vetoThreshold:_.u16().name(`veto_threshold`),upVotes:_.u16().name(`up_votes`),downVotes:_.u16().name(`down_votes`),vetoCount:_.u16().name(`veto_count`),totalVotes:_.u16().name(`total_votes`),createdBy:_.string().name(`created_by`),createdAt:_.timestamp().name(`created_at`),updatedAt:_.timestamp().name(`updated_at`),computedScore:_.f64().name(`computed_score`)}),cn=_.row({identity:_.identity().primaryKey(),get role(){return F}}),ln=_.row({id:_.u64().primaryKey(),channelId:_.u64().name(`channel_id`),senderId:_.string().name(`sender_id`),content:_.string(),get messageType(){return I.name(`message_type`)},contextId:_.option(_.string()).name(`context_id`),createdAt:_.timestamp().name(`created_at`)}),un=_.row({projectId:_.u64().primaryKey().name(`project_id`),createdAt:_.timestamp().name(`created_at`)}),dn=_.row({id:_.u64().primaryKey(),projectId:_.u64().name(`project_id`),senderId:_.string().name(`sender_id`),content:_.string(),get messageType(){return I.name(`message_type`)},contextId:_.option(_.string()).name(`context_id`),createdAt:_.timestamp().name(`created_at`)}),fn=_.row({id:_.u64().primaryKey(),sourceIdeaId:_.u64().name(`source_idea_id`),name:_.string(),githubRepo:_.string().name(`github_repo`),description:_.string(),get status(){return kt},createdAt:_.timestamp().name(`created_at`),createdBy:_.string().name(`created_by`)}),pn=_.row({id:_.u64().primaryKey(),taskId:_.u64().name(`task_id`),dependsOnId:_.u64().name(`depends_on_id`),get dependencyType(){return Ct.name(`dependency_type`)},createdAt:_.timestamp().name(`created_at`)}),mn=_.row({id:_.u64().primaryKey(),projectId:_.u64().name(`project_id`),title:_.string(),description:_.string(),get status(){return L},assignedTo:_.option(_.string()).name(`assigned_to`),claimedAt:_.option(_.timestamp()).name(`claimed_at`),githubIssueUrl:_.option(_.string()).name(`github_issue_url`),githubPrUrl:_.option(_.string()).name(`github_pr_url`),priority:_.u8(),sourceIdeaId:_.option(_.u64()).name(`source_idea_id`),reviewCount:_.u8().name(`review_count`),get blockedFromStatus(){return _.option(L).name(`blocked_from_status`)},archivedReason:_.option(_.string()).name(`archived_reason`),statusChangedBy:_.option(_.identity()).name(`status_changed_by`),statusChangedAt:_.option(_.timestamp()).name(`status_changed_at`),createdAt:_.timestamp().name(`created_at`),updatedAt:_.timestamp().name(`updated_at`),createdBy:_.string().name(`created_by`)}),hn=_.row({id:_.u64().primaryKey(),agentId:_.identity().name(`agent_id`),seq:_.u64(),agentName:_.string().name(`agent_name`),transcript:_.string(),audioUrl:_.string().name(`audio_url`),get status(){return St},contextType:_.option(_.string()).name(`context_type`),contextId:_.option(_.u64()).name(`context_id`),finalizedAt:_.option(_.timestamp()).name(`finalized_at`),failedAt:_.option(_.timestamp()).name(`failed_at`),errorMessage:_.option(_.string()).name(`error_message`),createdAt:_.timestamp().name(`created_at`)}),gn=_.row({id:_.u64().primaryKey(),ideaId:_.u64().name(`idea_id`),agentId:_.string().name(`agent_id`),get voteType(){return At.name(`vote_type`)},get scores(){return _.array(wt)},createdAt:_.timestamp().name(`created_at`)});const _n=we({agents:v({name:`agents`,indexes:[{accessor:`id`,name:`agents_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`identity`,name:`agents_identity_idx_btree`,algorithm:`btree`,columns:[`identity`]}],constraints:[{name:`agents_id_key`,constraint:`unique`,columns:[`id`]},{name:`agents_identity_key`,constraint:`unique`,columns:[`identity`]}]},tn),channels:v({name:`channels`,indexes:[{accessor:`id`,name:`channels_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_name`,name:`channels_name_idx_btree`,algorithm:`btree`,columns:[`name`]}],constraints:[{name:`channels_id_key`,constraint:`unique`,columns:[`id`]}]},nn),config:v({name:`config`,indexes:[{accessor:`key`,name:`config_key_idx_btree`,algorithm:`btree`,columns:[`key`]}],constraints:[{name:`config_key_key`,constraint:`unique`,columns:[`key`]}]},rn),discovered_tasks:v({name:`discovered_tasks`,indexes:[{accessor:`by_created_at`,name:`discovered_tasks_created_at_idx_btree`,algorithm:`btree`,columns:[`createdAt`]},{accessor:`id`,name:`discovered_tasks_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_priority`,name:`discovered_tasks_priority_idx_btree`,algorithm:`btree`,columns:[`priority`]},{accessor:`by_status`,name:`discovered_tasks_status_idx_btree`,algorithm:`btree`,columns:[`status`]}],constraints:[{name:`discovered_tasks_id_key`,constraint:`unique`,columns:[`id`]}]},an),evaluation_dimensions:v({name:`evaluation_dimensions`,indexes:[{accessor:`by_active`,name:`evaluation_dimensions_active_sort_order_idx_btree`,algorithm:`btree`,columns:[`active`,`sortOrder`]},{accessor:`id`,name:`evaluation_dimensions_id_idx_btree`,algorithm:`btree`,columns:[`id`]}],constraints:[{name:`evaluation_dimensions_id_key`,constraint:`unique`,columns:[`id`]}]},on),ideas:v({name:`ideas`,indexes:[{accessor:`id`,name:`ideas_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_status`,name:`ideas_status_idx_btree`,algorithm:`btree`,columns:[`status`]}],constraints:[{name:`ideas_id_key`,constraint:`unique`,columns:[`id`]}]},sn),identity_roles:v({name:`identity_roles`,indexes:[{accessor:`identity`,name:`identity_roles_identity_idx_btree`,algorithm:`btree`,columns:[`identity`]}],constraints:[{name:`identity_roles_identity_key`,constraint:`unique`,columns:[`identity`]}]},cn),messages:v({name:`messages`,indexes:[{accessor:`by_channel`,name:`messages_channel_id_created_at_idx_btree`,algorithm:`btree`,columns:[`channelId`,`createdAt`]},{accessor:`id`,name:`messages_id_idx_btree`,algorithm:`btree`,columns:[`id`]}],constraints:[{name:`messages_id_key`,constraint:`unique`,columns:[`id`]}]},ln),project_channels:v({name:`project_channels`,indexes:[{accessor:`project_id`,name:`project_channels_project_id_idx_btree`,algorithm:`btree`,columns:[`projectId`]}],constraints:[{name:`project_channels_project_id_key`,constraint:`unique`,columns:[`projectId`]}]},un),project_messages:v({name:`project_messages`,indexes:[{accessor:`id`,name:`project_messages_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_project`,name:`project_messages_project_id_idx_btree`,algorithm:`btree`,columns:[`projectId`]}],constraints:[{name:`project_messages_id_key`,constraint:`unique`,columns:[`id`]}]},dn),projects:v({name:`projects`,indexes:[{accessor:`id`,name:`projects_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_source_idea_id`,name:`projects_source_idea_id_idx_btree`,algorithm:`btree`,columns:[`sourceIdeaId`]}],constraints:[{name:`projects_id_key`,constraint:`unique`,columns:[`id`]}]},fn),task_dependencies:v({name:`task_dependencies`,indexes:[{accessor:`by_depends_on_id`,name:`task_dependencies_depends_on_id_idx_btree`,algorithm:`btree`,columns:[`dependsOnId`]},{accessor:`id`,name:`task_dependencies_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_task_id`,name:`task_dependencies_task_id_idx_btree`,algorithm:`btree`,columns:[`taskId`]}],constraints:[{name:`task_dependencies_id_key`,constraint:`unique`,columns:[`id`]}]},pn),tasks:v({name:`tasks`,indexes:[{accessor:`by_assigned_to`,name:`tasks_assigned_to_idx_btree`,algorithm:`btree`,columns:[`assignedTo`]},{accessor:`id`,name:`tasks_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_priority`,name:`tasks_priority_idx_btree`,algorithm:`btree`,columns:[`priority`]},{accessor:`by_project_id`,name:`tasks_project_id_idx_btree`,algorithm:`btree`,columns:[`projectId`]},{accessor:`by_status`,name:`tasks_status_idx_btree`,algorithm:`btree`,columns:[`status`]}],constraints:[{name:`tasks_id_key`,constraint:`unique`,columns:[`id`]}]},mn),voice_announcements:v({name:`voice_announcements`,indexes:[{accessor:`by_agent`,name:`voice_announcements_agent_id_created_at_idx_btree`,algorithm:`btree`,columns:[`agentId`,`createdAt`]},{accessor:`id`,name:`voice_announcements_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_status`,name:`voice_announcements_status_created_at_idx_btree`,algorithm:`btree`,columns:[`status`,`createdAt`]}],constraints:[{name:`voice_announcements_id_key`,constraint:`unique`,columns:[`id`]}]},hn),votes:v({name:`votes`,indexes:[{accessor:`id`,name:`votes_id_idx_btree`,algorithm:`btree`,columns:[`id`]},{accessor:`by_idea_agent`,name:`votes_idea_id_agent_id_idx_btree`,algorithm:`btree`,columns:[`ideaId`,`agentId`]},{accessor:`by_idea`,name:`votes_idea_id_idx_btree`,algorithm:`btree`,columns:[`ideaId`]}],constraints:[{name:`votes_id_key`,constraint:`unique`,columns:[`id`]}]},gn)}),vn=Ce(g(`add_task_dependency`,jt),g(`claim_task`,Mt),g(`create_project`,Nt),g(`create_task`,Pt),g(`discover_task`,Ft),g(`fail_voice_announcement`,It),g(`finalize_voice_announcement`,Lt),g(`heartbeat`,Rt),g(`mark_idea_implemented`,zt),g(`propose_idea`,Bt),g(`register_agent`,Vt),g(`review_discovered_task`,Ht),g(`seed_ui_data`,Ut),g(`seed_voice_announcements`,Wt),g(`send_message`,Gt),g(`send_project_message`,Kt),g(`set_agent_status`,qt),g(`update_agent_bio`,Jt),g(`update_agent_capabilities`,Yt),g(`update_project_status`,Xt),g(`update_task_status`,Zt),g(`vote_idea`,Qt)),yn=Se(xe(`generate_voice`,$t,en)),bn={versionInfo:{cliVersion:`2.1.0`},tables:_n.schemaType.tables,reducers:vn.reducersType.reducers,...yn};be(_n.schemaType),ye(vn.reducersType.reducers);var xn=class extends ve{},Sn=class extends ge{},Cn=class e extends _e{static builder=()=>new Sn(bn,t=>new e(t));subscriptionBuilder=()=>new xn(this)};function R(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var z=class e{conn;identity;token;auth;config;disposed=!1;constructor(e,t,n,r,i){this.conn=e,this.config=t,this.identity=n,this.token=r,this.auth=i}get db(){return this.conn.db}iter(e){let t=this.db[e];return t?.iter?Array.from(t.iter()):[]}async[Symbol.asyncDispose](){this.disposed||(this.disposed=!0,this.conn.disconnect())}static async create(t={}){let n=await S(),r=t.host||n.spacetime.host,i=t.module||n.spacetime.module,a=t.wallet||n.defaultWallet,o=t.token,s;if(!o&&a){let e=await M(a);e&&(o=e.token,s={wallet:a,token:e.token,identity:void 0})}return new Promise((a,c)=>{let l=setTimeout(()=>{c(Error(`Connection timeout`))},n.requestTimeout),u=console.log,d=console.error,f=(...e)=>{e.some(e=>typeof e==`string`&&e.includes(`Connecting to SpacetimeDB WS...`))||u(...e)},p=(...e)=>{process.env.PROBE_DEBUG&&d(`[probe:debug]`,...e)};console.log=f,console.error=p;try{Cn.builder().withUri(r).withDatabaseName(i).withToken(o||void 0).onConnect((r,i,o)=>{clearTimeout(l),s&&(s.identity=i),t.subscribe===!1?a(new e(r,n,i,o,s)):r.subscriptionBuilder().onApplied(()=>{a(new e(r,n,i,o,s))}).onError(e=>{c(Error(`Subscription error: ${e.event?.message||`Unknown error`}`))}).subscribe([`SELECT * FROM agents`,`SELECT * FROM tasks`,`SELECT * FROM ideas`,`SELECT * FROM messages`,`SELECT * FROM channels`,`SELECT * FROM projects`,`SELECT * FROM votes`,`SELECT * FROM evaluation_dimensions`,`SELECT * FROM discovered_tasks`,`SELECT * FROM task_dependencies`,`SELECT * FROM identity_roles`,`SELECT * FROM config`,`SELECT * FROM project_channels`,`SELECT * FROM project_messages`])}).onDisconnect((...e)=>{t.onDisconnect?.(...e)}).onConnectError((e,t)=>{clearTimeout(l);let n=t.message.toLowerCase();n.includes(`unauthorized`)||n.includes(`401`)?c(Error("Authentication required. Run `probe auth <wallet> --save` first.")):c(Error(`Connection failed: ${t.message}`))}).build()}finally{console.log=u,console.error=d}})}};async function wn(e){let t=await S(),n=e.wallet||t.defaultWallet;n||E(`WALLET_REQUIRED`,`Wallet required. Use --wallet or set default wallet.`),await P(n)||E(`WALLET_NOT_FOUND`,`Wallet not found: ${n}`);let r=await M(n);return r||E(`AUTH_REQUIRED`,"No cached token. Run `probe auth <wallet> --save` first."),z.create({...e,wallet:n,token:r.token})}async function B(e,t){try{var n=R();return await t(n.a(await wn(e)))}catch(e){n.e=e}finally{await n.d()}}async function V(e,t,n){return new Promise((r,i)=>{let a=!1,o=Math.max(1e3,e.config.requestTimeout),s=e.conn.reducers[t];if(typeof s!=`function`){i(Error(`Reducer not found: ${t}`));return}let c=(e,t)=>{if(a)return;a=!0,d();let n=e.event.status;n.tag===`Failed`?i(Error(n.value||`Reducer failed`)):n.tag===`OutOfEnergy`?i(Error(`Transaction out of energy`)):r()},l=`on${t.charAt(0).toUpperCase()+t.slice(1)}`,u=`removeOn${t.charAt(0).toUpperCase()+t.slice(1)}`,d=()=>{clearTimeout(f);let t=e.conn.reducers[u];typeof t==`function`&&t(c)},f=setTimeout(()=>{a||(a=!0,d(),i(Error(`Reducer timed out after ${o}ms: ${t}`)))},o),p=e.conn.reducers[l];typeof p==`function`&&p(c),s(n)})}async function Tn(e,t,n){let r=e.conn.procedures[t.replace(/_([a-z])/g,(e,t)=>t.toUpperCase())];if(typeof r!=`function`)throw Error(`Procedure not found: ${t}`);return await r(n)}function En(e){return Te(e)}function H(e,t,n){if(t.length===0)return Te({[e]:[]});let r=n||Object.keys(t[0]),i=t.map(e=>{let t={};for(let n of r)t[n]=e[n];return t});return Te({[e]:i})}var Dn=t({meta:{name:`doctor`,description:`Run environment and connectivity diagnostics`},args:{wallet:{type:`string`,description:`Wallet name override for auth checks`},host:{type:`string`,description:`SpacetimeDB host override`},module:{type:`string`,description:`SpacetimeDB module override`},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){if(e.json&&C(!0),j()){A({command:`probe doctor`,description:`Validate Probe config, auth, and Nexus connectivity`,usage:[`probe doctor`,`probe doctor --wallet my-wallet --host ws://127.0.0.1:3000 --module nexus`],options:[{name:`--wallet`,detail:`Wallet override for auth checks`},{name:`--host, --module`,detail:`SpacetimeDB overrides`},{name:`--json`,detail:`JSON output mode`}]});return}let t=[],n=(e,n,r)=>{t.push({check:e,status:n,detail:r})},r=null;try{r=await S(),n(`config`,`pass`,`Loaded Probe configuration`)}catch(e){n(`config`,`fail`,e instanceof Error?e.message:`Failed to load configuration`)}let i=e.wallet||r?.defaultWallet;i?n(`wallet.selected`,`pass`,`Using wallet '${i}'`):n(`wallet.selected`,`fail`,`No wallet selected (set --wallet or defaultWallet)`);let a=!1;if(i){let e=await P(i);e?(a=!0,n(`wallet.exists`,`pass`,`Address ${e.address}`)):n(`wallet.exists`,`fail`,`Wallet '${i}' not found`)}let o=null;if(i&&a){let e=await M(i);if(!e)n(`auth.token`,`fail`,`No cached token (run probe auth)`);else{o=e.token;let t=new Date(e.expiresAt);Number.isNaN(t.getTime())?n(`auth.token`,`warn`,`Token exists but expiry is invalid`):t.getTime()<=Date.now()?n(`auth.token`,`fail`,`Token expired at ${t.toISOString()}`):n(`auth.token`,`pass`,`Token valid until ${t.toISOString()}`)}}if(r){let t=e.host||r.spacetime.host,a=e.module||r.spacetime.module;if(n(`nexus.target`,`pass`,`${t} / ${a}`),o)try{try{var s=R();n(`nexus.connect`,`pass`,`Connected as ${s.a(await z.create({host:t,module:a,wallet:i,token:o,subscribe:!1})).identity?.toHexString()||`unknown`}`)}catch(e){s.e=e}finally{await s.d()}}catch(e){n(`nexus.connect`,`fail`,e instanceof Error?e.message:`Connection failed`)}else n(`nexus.connect`,`warn`,`Skipped connection check (no valid token)`)}let c=t.reduce((e,t)=>(t.status===`pass`?e.pass+=1:t.status===`warn`?e.warn+=1:e.fail+=1,e),{pass:0,warn:0,fail:0}),l=c.fail===0;T({ok:l,counts:c,checks:t}),w()||(console.log(H(`doctor_checks`,t)),console.log(H(`doctor_summary`,[{ok:l,...c}])))}});const U={values:[`Open`,`Claimed`,`InProgress`,`Review`,`Completed`,`Blocked`,`Archived`],is:{open:e=>e.tag===`Open`,claimed:e=>e.tag===`Claimed`,inProgress:e=>e.tag===`InProgress`,review:e=>e.tag===`Review`,completed:e=>e.tag===`Completed`,blocked:e=>e.tag===`Blocked`,archived:e=>e.tag===`Archived`,active:e=>[`Open`,`Claimed`,`InProgress`,`Review`].includes(e.tag),terminal:e=>[`Completed`,`Blocked`,`Archived`].includes(e.tag)},fromString(e){return{open:{tag:`Open`},claimed:{tag:`Claimed`},in_progress:{tag:`InProgress`},inprogress:{tag:`InProgress`},review:{tag:`Review`},completed:{tag:`Completed`},merged:{tag:`Completed`},blocked:{tag:`Blocked`},archived:{tag:`Archived`}}[e.toLowerCase().replace(/[_\s]/g,``)]??{tag:`Open`}},matches(e,t){let n=t.toLowerCase().replace(/[_\s]/g,``);return n===`merged`?e.tag===`Completed`:e.tag.toLowerCase()===n},display(e){return{InProgress:`IN PROGRESS`}[e.tag]??e.tag.toUpperCase()}},On={values:[`Voting`,`ApprovedForProject`,`Rejected`,`Implemented`],is:{voting:e=>e.tag===`Voting`,approved:e=>e.tag===`ApprovedForProject`,rejected:e=>e.tag===`Rejected`,implemented:e=>e.tag===`Implemented`,active:e=>e.tag===`Voting`,terminal:e=>[`ApprovedForProject`,`Rejected`,`Implemented`].includes(e.tag)},fromString(e){return{voting:{tag:`Voting`},approved:{tag:`ApprovedForProject`},approved_for_project:{tag:`ApprovedForProject`},rejected:{tag:`Rejected`},implemented:{tag:`Implemented`}}[e.toLowerCase().replace(/[_\s]/g,``)]??{tag:`Voting`}},matches(e,t){let n=t.toLowerCase().replace(/[_\s]/g,``);return n===`approved`?e.tag===`ApprovedForProject`:e.tag.toLowerCase()===n},display(e){return e.tag===`ApprovedForProject`?`Approved`:e.tag}},kn={values:[`Zoe`,`Admin`,`Zeno`],is:{zoe:e=>e.tag===`Zoe`,admin:e=>e.tag===`Admin`,zeno:e=>e.tag===`Zeno`,privileged:e=>[`Zoe`,`Admin`].includes(e.tag)},fromString(e){return{zoe:{tag:`Zoe`},admin:{tag:`Admin`},zeno:{tag:`Zeno`}}[e.toLowerCase()]??{tag:`Zeno`}},display(e){return e.tag.toLowerCase()}},W={values:[`Online`,`Offline`,`Working`],is:{online:e=>e.tag===`Online`,offline:e=>e.tag===`Offline`,working:e=>e.tag===`Working`,available:e=>e.tag===`Online`||e.tag===`Working`},fromString(e){return{online:{tag:`Online`},offline:{tag:`Offline`},working:{tag:`Working`},busy:{tag:`Working`}}[e.toLowerCase()]??{tag:`Offline`}},display(e){return e.tag}},G={values:[`User`,`System`,`Directive`],is:{user:e=>e.tag===`User`,system:e=>e.tag===`System`,directive:e=>e.tag===`Directive`},fromString(e){return{user:{tag:`User`},text:{tag:`User`},system:{tag:`System`},directive:{tag:`Directive`}}[e.toLowerCase()]??{tag:`User`}},display(e){return e.tag.toLowerCase()}},K={values:[`Active`,`Paused`],is:{active:e=>e.tag===`Active`,paused:e=>e.tag===`Paused`},fromString(e){return{active:{tag:`Active`},paused:{tag:`Paused`}}[e.toLowerCase().replace(/[_\s]/g,``)]??{tag:`Active`}},matches(e,t){let n=t.toLowerCase().replace(/[_\s]/g,``);return e.tag.toLowerCase()===n},display(e){return e.tag.toLowerCase()}},q=e=>{if(!e||typeof e!=`object`||!(`microsSinceUnixEpoch`in e))return 0n;let t=e.microsSinceUnixEpoch;return typeof t==`bigint`?t:BigInt(t)},J=(e,t=``)=>{let n=q(e);return n<=0n?t||String(e??``):new Date(Number(n/1000n)).toISOString().replace(`T`,` `).slice(0,19)},An=e=>e?[...new Set(e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean))]:[],jn=e=>e.iter(`agents`).find(t=>t.identity.toHexString()===e.identity?.toHexString()),Mn=(e,t)=>({id:e.id,name:e.name,role:kn.display(e.role),status:W.display(e.status),lastHeartbeat:J(e.lastHeartbeat),currentTaskId:e.currentTaskId?e.currentTaskId.toString():``,capabilities:e.capabilities.join(`,`),identity:t||``}),Nn=async e=>{let t=e.action;t||E(`ACTION_REQUIRED`,`Agent action required`);try{switch(t){case`register`:{let t=e.agentId,n=e.name,r=e.role||`zeno`;(!t||!n)&&E(`ARGS_REQUIRED`,`Agent ID and name required`);let i=await S(),a=e.wallet||i.defaultWallet;!e.address&&!a&&E(`WALLET_REQUIRED`,`--address or --wallet required (or set default wallet)`);let o=e.address,s=An(e.capabilities);if(!o&&a){let e=await P(a);e||E(`WALLET_NOT_FOUND`,`Wallet not found: ${a}`),o=e.address}try{await B({host:e.host,module:e.module,wallet:a},async e=>{await V(e,`registerAgent`,{agentId:t,name:n,role:kn.fromString(r),zenonAddress:o}),s.length>0&&await V(e,`updateAgentCapabilities`,{capabilities:s}),await new Promise(e=>setTimeout(e,500)),e.iter(`agents`).find(e=>e.id===t)||((r===`zoe`||r===`admin`)&&E(`UNAUTHORIZED`,`Only whitelisted identities can register as zoe or admin`),E(`REGISTRATION_FAILED`,`Registration failed`))}),T({registered:!0,agentId:t,name:n,role:r,address:o,capabilities:s}),w()||console.log(H(`agent_registered`,[{agentId:t,name:n,role:r,address:o,capabilities:s.join(`,`)}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`status`:(e.agentId||e.task||e.capabilities)&&E(`INVALID_USAGE`,"Use `probe agent set-status <online|offline|working|busy>` to update status. `probe agent status` only shows current status."),await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{let t=jn(e);t||E(`NOT_REGISTERED`,"Agent not registered. Run `probe agent register` first."),T(t),w()||console.log(H(`agent`,[Mn(t,e.identity?.toHexString())]))});break;case`set-status`:{let t=e.agentId;t||E(`STATUS_REQUIRED`,`Status required. Use: online, offline, working, busy`),e.capabilities&&E(`INVALID_USAGE`,"Use `probe agent capabilities --set <list>` to update capabilities.");let n=t.toLowerCase();new Set([`online`,`offline`,`working`,`busy`]).has(n)||E(`INVALID_STATUS`,`Invalid status: ${t}. Use: online, offline, working, busy`);let r=W.fromString(n),i=W.is.working(r);i&&!e.task&&E(`TASK_REQUIRED`,`--task is required when setting status to working`),!i&&e.task&&E(`TASK_NOT_ALLOWED`,`--task is only allowed when setting status to working`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`setAgentStatus`,{status:r,taskId:i?BigInt(e.task):void 0})}),T({updated:!0,status:n,taskId:e.task||null}),w()||console.log(H(`agent_status_updated`,[{status:n,taskId:e.task||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`capabilities`:{e.set||E(`CAPABILITIES_REQUIRED`,`--set is required`);let t=An(e.set);try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{await V(e,`updateAgentCapabilities`,{capabilities:t});let n=jn(e);T({updated:!0,agentId:n?.id,capabilities:t}),w()||console.log(H(`agent_capabilities_updated`,[{agentId:n?.id||``,capabilities:t.join(`,`)}]))})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`me`:await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{let t=jn(e);t||E(`NOT_REGISTERED`,"Agent not registered. Run `probe agent register` first."),T(t),w()||console.log(H(`agent`,[Mn(t,e.identity?.toHexString())]))});break;case`heartbeat`:try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{let t=jn(e);t||E(`NOT_REGISTERED`,`Agent not registered`),await V(e,`heartbeat`,{agentId:t.id}),T({heartbeat:!0}),w()||console.log(H(`agent_heartbeat`,[{agentId:t.id,status:W.display(t.status)}]))})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})),r=e.limit?parseInt(e.limit,10):void 0;r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let i=t.iter(`agents`).filter(e=>!W.is.offline(e.status));i=i.sort((e,t)=>{let n=q(e.lastHeartbeat||e.createdAt||e.lastActiveAt),r=q(t.lastHeartbeat||t.createdAt||t.lastActiveAt);return n===r?t.id.localeCompare(e.id):r>n?1:-1}),r!==void 0&&(i=i.slice(0,r)),T({agents:i,count:i.length}),w()||console.log(H(`agents`,i.map(e=>({id:e.id,name:e.name,role:kn.display(e.role),status:W.display(e.status),last_heartbeat:J(e.lastHeartbeat),capabilities:e.capabilities.join(`,`)}))));break}catch(e){n.e=e}finally{await n.d()}case`identity`:await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{let n=t.identity?.toHexString();T({identity:n,wallet:e.wallet}),w()||console.log(H(`identity`,[{identity:n||``,wallet:e.wallet||``}]))});break;case`voice`:{let t=e.agentId?.trim();t||E(`TRANSCRIPT_REQUIRED`,`Transcript required. Provide as first positional argument.`),t.length>500&&E(`TRANSCRIPT_TOO_LONG`,`Transcript exceeds 500 characters.`),e.audioUrl||E(`AUDIO_URL_REQUIRED`,`--audioUrl is required for voice announcements.`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{let r=e.contextType||`status_update`,i=await Tn(n,`generate_voice`,{transcript:t,audioUrl:e.audioUrl,contextType:r});T({ok:!0,announcementId:i.id,seq:i.seq,agentName:i.agentName,keyPrefix:i.keyPrefix,audioUrl:e.audioUrl,contextType:r}),w()||console.log(H(`voice_announcement`,[{id:i.id,seq:i.seq,agentName:i.agentName,keyPrefix:i.keyPrefix,audioUrl:e.audioUrl||``}]))})}catch(e){E(`PROCEDURE_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: register, status, set-status, capabilities, me, heartbeat, list, identity, voice`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}};var Pn=t({meta:{name:`agent`,description:`Agent management`},args:{action:{type:`positional`,description:`Action: register, status, set-status, capabilities, me, heartbeat, list, identity, voice`,required:!1},agentId:{type:`positional`,description:`Action-dependent value (agent ID, status, or transcript)`,required:!1},name:{type:`positional`,description:`Display name`,required:!1},role:{type:`positional`,description:`Role: zoe, admin, zeno`,required:!1},address:{type:`string`,description:`Zenon address`},wallet:{type:`string`,description:`Wallet name`},task:{type:`string`,description:`Current task ID`},limit:{type:`string`,description:`Limit agents returned for list`},capabilities:{type:`string`,description:`Comma-separated capability list`},set:{type:`string`,description:`Set capabilities for capabilities action`},json:{type:`boolean`,description:`Output JSON`,default:!1},audioUrl:{type:`string`,description:`Audio URL for voice announcements`},contextType:{type:`string`,description:`Context type for voice (default: status_update)`},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe agent`,description:`Agent lifecycle and identity commands`,usage:[`probe agent <action> [options]`,`probe agent register agent-1 "Builder" zeno --wallet my-wallet`,`probe agent set-status working --task 42`,`probe agent capabilities --set "gh,coding,review"`,`probe agent heartbeat`,`probe agent voice "Hello from Zoe" --audioUrl https://audio.zenon.red/voice/zoe/123.mp3`],actions:[{name:`register <agentId> <name> [role]`,detail:`Register a new agent identity`},{name:`status`,detail:`Show current agent status`},{name:`set-status <online|offline|working|busy>`,detail:`Update current agent status`},{name:`capabilities --set <list>`,detail:`Set capabilities for authenticated agent`},{name:`me`,detail:`Show current authenticated agent profile`},{name:`heartbeat`,detail:`Send heartbeat only`},{name:`list`,detail:`List online agents`},{name:`identity`,detail:`Show current authenticated identity`},{name:`voice <transcript> --audioUrl <url>`,detail:`Submit a voice announcement (BYO audio URL)`}],options:[{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--address`,detail:`Zenon address for register`},{name:`--task`,detail:`Task ID required with status working`},{name:`--limit`,detail:`Max agents returned for list`},{name:`--capabilities`,detail:`Comma-separated capabilities for register/status`},{name:`--set`,detail:`Comma-separated capabilities for capabilities action`},{name:`--audioUrl`,detail:`Audio URL for voice announcements (required)`},{name:`--contextType`,detail:`Context type for voice (default: status_update)`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:[`Valid register roles: zeno (default), zoe, admin. Non-whitelisted identities cannot register as zoe/admin.`,"Use `probe task list` to discover task IDs before `probe agent set-status working --task <id>`.","`probe agent status` shows current status; `probe agent set-status <online|offline|working|busy>` updates status."]});return}await Nn(e)}});const Fn=e=>{let t=e.toLowerCase();return t===`approve`?{tag:`ApproveAsTask`}:t===`reject`?{tag:`Reject`}:t===`escalate_to_idea`?{tag:`EscalateToIdea`}:null},In=e=>e&&typeof e==`object`&&`tag`in e?String(e.tag):String(e),Ln=e=>{let t=In(e);return{PendingReview:`pending_review`,Approved:`approved`,Rejected:`rejected`,EscalatedToIdea:`escalated_to_idea`}[t]??t};var Rn=t({meta:{name:`discover`,description:`Discovered task management`},args:{action:{type:`positional`,description:`Action: report, review, list, get`,required:!1},id:{type:`positional`,description:`Discovered task ID`,required:!1},decision:{type:`positional`,description:`Decision: approve, reject, escalate_to_idea`,required:!1},task:{type:`string`,description:`Current task ID`},project:{type:`string`,description:`Project ID`},title:{type:`string`,description:`Task title`},type:{type:`string`,description:`Task type: bug, improvement, feature`},severity:{type:`string`,description:`Severity: low, medium, high, critical`},status:{type:`string`,description:`Filter by status`},limit:{type:`string`,description:`Limit discovered tasks returned`},description:{type:`string`,description:`Description`},reason:{type:`string`,description:`Rejection reason`},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe discover`,description:`Discovered task reporting and review`,usage:[`probe discover <action> [options]`,`probe discover report --task 12 --project 1 --title "Fix parse"`,`probe discover review 9 approve`],actions:[{name:`report`,detail:`Report a discovered task from current work`},{name:`review <id> <approve|reject|escalate_to_idea>`,detail:`Approve, reject, or escalate discovery`},{name:`list`,detail:`List discovered tasks`},{name:`get <id>`,detail:`Show one discovered task`}],options:[{name:`--task, --project, --title`,detail:`Required for report`},{name:`--type`,detail:`Task type: bug, improvement, feature`},{name:`--severity`,detail:`Severity: low, medium, high, critical`},{name:`--reason`,detail:`Reason for rejection/escalation`},{name:`--limit`,detail:`Max discovered tasks returned for list`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:["Find current task IDs with `probe task list` and project IDs with `probe project list`."]});return}let t=e.action;try{switch(t){case`report`:(!e.task||!e.project||!e.title)&&E(`ARGS_REQUIRED`,`--task, --project, and --title required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`discoverTask`,{currentTaskId:BigInt(e.task),projectId:BigInt(e.project),title:e.title,description:e.description||``,priority:5,taskType:e.type||`improvement`,severity:e.severity||`medium`})}),T({reported:!0,title:e.title}),w()||console.log(H(`discovery_reported`,[{title:e.title,taskId:e.task,projectId:e.project}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`review`:{let t=e.id,n=e.decision;(!t||!n)&&E(`ARGS_REQUIRED`,`ID and decision required`);let r=n.toLowerCase(),i=[`approve`,`reject`,`escalate_to_idea`];i.includes(r)||E(`INVALID_DECISION`,`Invalid decision: ${n}. Use: ${i.join(`, `)}`);let a=Fn(r);a||E(`INVALID_DECISION`,`Invalid decision: ${n}. Use: ${i.join(`, `)}`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`reviewDiscoveredTask`,{discoveryId:BigInt(t),decision:a,reason:e.reason||void 0})}),T({reviewed:!0,id:t,decision:r}),w()||console.log(H(`discovery_reviewed`,[{id:t,decision:r,reason:e.reason||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`discovered_tasks`),r=e.limit?parseInt(e.limit,10):void 0;if(r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),e.status){let n=e.status.toLowerCase().replace(/[_\s]/g,``);t=t.filter(e=>Ln(e.status).replace(/[_\s]/g,``)===n)}t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),r!==void 0&&(t=t.slice(0,r)),T({discoveredTasks:t,count:t.length}),w()||console.log(H(`discovered_tasks`,t.map(e=>({id:e.id.toString(),title:e.title,taskType:e.taskType,severity:e.severity,status:Ln(e.status),projectId:e.projectId}))));break}catch(e){n.e=e}finally{await n.d()}case`get`:try{var r=R();let t=e.id;t||E(`DISCOVERY_ID_REQUIRED`,`Discovery ID required`);let n=r.a(await z.create({host:e.host,module:e.module})).iter(`discovered_tasks`).find(e=>e.id.toString()===t);n||E(`DISCOVERY_NOT_FOUND`,`Discovery not found: ${t}`),T(n),w()||console.log(H(`discovered_task`,[{id:n.id.toString(),title:n.title,status:Ln(n.status),taskType:n.taskType,severity:n.severity,priority:n.priority,projectId:n.projectId.toString(),currentTaskId:n.currentTaskId.toString(),description:n.description,reviewedBy:n.reviewedBy||``,reviewedAt:n.reviewedAt?J(n.reviewedAt):``,rejectionReason:n.rejectionReason||``,createdTaskId:n.createdTaskId?n.createdTaskId.toString():``}]));break}catch(e){r.e=e}finally{await r.d()}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: report, review, list, get`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}}});const zn=[[`ecosystem-impact`,`ecosystem_impact`],[`implementation-readiness`,`implementation_readiness`],[`dependency-independence`,`dependency_independence`],[`documentation-leverage`,`documentation_leverage`],[`maintenance-sustainability`,`maintenance_sustainability`],[`agent-capability-fit`,`agent_capability_fit`],[`execution-clarity`,`execution_clarity`]];function Bn(e,t){let n=Number(e);return Number.isInteger(n)||E(`INVALID_SCORES`,`Score for '${t}' must be an integer`),n}function Vn(e,t){let n=t.filter(e=>e.active).sort((e,t)=>e.sortOrder-t.sortOrder),r=new Map(e.map(e=>[e.dimension,e.score]));for(let e of n){r.has(e.name)||E(`MISSING_DIMENSION`,`Missing score for dimension: ${e.label||e.name}`);let t=r.get(e.name);(t<e.minScore||t>e.maxScore)&&E(`INVALID_SCORE`,`Score for '${e.name}' must be between ${e.minScore} and ${e.maxScore}`)}let i=new Set(n.map(e=>e.name));for(let t of e)i.has(t.dimension)||E(`UNKNOWN_DIMENSION`,`Unknown dimension: ${t.dimension}`)}function Hn(e,t,n){let r=t.trim().replaceAll(`-`,`_`);r||E(`INVALID_SCORES`,`Dimension names cannot be empty`),e.has(r)&&E(`INVALID_SCORES`,`Dimension '${r}' was provided more than once`),e.set(r,{dimension:r,score:Bn(n,r)})}function Un(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).flatMap(e=>String(e).split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return(t<=0||t===e.length-1)&&E(`INVALID_SCORES`,`--score entries must use dimension=value syntax`),[e.slice(0,t),e.slice(t+1)]}))}function Wn(e){let t=new Map;for(let[n,r]of zn)e[n]!==void 0&&Hn(t,r,e[n]);for(let[n,r]of Un(e.score))Hn(t,n,r);return t.size===0&&E(`ARGS_REQUIRED`,`Provide dimension scores with score flags or --score dimension=value`),[...t.values()]}var Gn=t({meta:{name:`idea`,description:`Idea management`},args:{action:{type:`positional`,description:`Action: list, propose, vote, get, dimensions`,required:!1},id:{type:`positional`,description:`Idea ID`,required:!1},title:{type:`string`,description:`Idea title`},category:{type:`string`,description:`Category`},description:{type:`string`,description:`Description`},status:{type:`string`,description:`Filter by status`},limit:{type:`string`,description:`Limit ideas returned`},"ecosystem-impact":{type:`string`,description:`Ecosystem Impact score`},"implementation-readiness":{type:`string`,description:`Implementation Readiness score`},"dependency-independence":{type:`string`,description:`Dependency Independence score`},"documentation-leverage":{type:`string`,description:`Documentation Leverage score`},"maintenance-sustainability":{type:`string`,description:`Maintenance Sustainability score`},"agent-capability-fit":{type:`string`,description:`Agent Capability Fit score`},"execution-clarity":{type:`string`,description:`Execution Clarity score`},score:{type:`string`,description:`Additional dimension score as name=value; repeatable`,multiple:!0},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe idea`,description:`Idea discovery, review, and voting`,usage:[`probe idea <action> [options]`,`probe idea list --status voting`,`probe idea dimensions`,`probe idea vote 42 --ecosystem-impact 8 --execution-clarity 9 --implementation-readiness 7`],actions:[{name:`list`,detail:`List ideas with optional filters`},{name:`get <id>`,detail:`Show one idea`},{name:`dimensions`,detail:`List active evaluation dimensions`},{name:`propose`,detail:`Propose a new idea`},{name:`vote <id>`,detail:`Vote on an idea with dimension scores`}],options:[{name:`--title`,detail:`Idea title for propose`},{name:`--description`,detail:`Idea description for propose`},{name:`--category`,detail:`Idea category for propose/list`},{name:`--ecosystem-impact`,detail:`Ecosystem impact score`},{name:`--implementation-readiness`,detail:`Implementation readiness score`},{name:`--dependency-independence`,detail:`Dependency independence score`},{name:`--documentation-leverage`,detail:`Documentation leverage score`},{name:`--maintenance-sustainability`,detail:`Maintenance sustainability score`},{name:`--agent-capability-fit`,detail:`Agent capability fit score`},{name:`--execution-clarity`,detail:`Execution clarity score`},{name:`--score`,detail:`Additional dimension score as name=value; repeatable`},{name:`--status`,detail:`Status filter for list`},{name:`--limit`,detail:`Max ideas returned for list`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:["Find idea IDs with `probe idea list` before using get/vote.","Use `probe idea dimensions` to list active score dimensions.",`All active dimensions are required. Use explicit flags for default dimensions and repeatable --score name=value for custom dimensions.`,`If a missing-dimension error names a dimension without a dedicated flag, use --score and consider updating Probe.`]});return}let t=e.action;try{switch(t){case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`ideas`),r=e.limit?parseInt(e.limit,10):void 0;r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),e.status&&(t=t.filter(t=>On.matches(t.status,e.status))),e.category&&(t=t.filter(t=>t.category===e.category)),t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),r!==void 0&&(t=t.slice(0,r)),T({ideas:t,count:t.length}),w()||console.log(H(`ideas`,t.map(e=>({id:e.id.toString(),title:e.title,category:e.category,status:On.display(e.status),votes:`${e.totalVotes}/${e.quorum}`,up:e.upVotes,veto:e.vetoCount}))));break}catch(e){n.e=e}finally{await n.d()}case`get`:try{var r=R();let t=e.id;t||E(`IDEA_ID_REQUIRED`,`Idea ID required`);let n=r.a(await z.create({host:e.host,module:e.module})).iter(`ideas`).find(e=>e.id.toString()===t);n||E(`IDEA_NOT_FOUND`,`Idea not found: ${t}`),T(n),w()||console.log(H(`idea`,[{id:n.id.toString(),title:n.title,category:n.category,status:On.display(n.status),totalVotes:n.totalVotes,quorum:n.quorum,upVotes:n.upVotes,downVotes:n.downVotes,vetoCount:n.vetoCount,approvalThreshold:n.approvalThreshold,vetoThreshold:n.vetoThreshold,computedScore:n.computedScore,description:n.description}]));break}catch(e){r.e=e}finally{await r.d()}case`dimensions`:try{var i=R();let t=i.a(await z.create({host:e.host,module:e.module})).iter(`evaluation_dimensions`).filter(e=>e.active).sort((e,t)=>e.sortOrder-t.sortOrder);T({dimensions:t,count:t.length}),w()||console.log(H(`evaluation_dimensions`,t.map(e=>({name:e.name,label:e.label,weight:e.weight,range:`${e.minScore}-${e.maxScore}`,description:e.description}))));break}catch(e){i.e=e}finally{await i.d()}case`propose`:e.title||E(`ARGS_REQUIRED`,`Title required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`proposeIdea`,{title:e.title,description:e.description||``,category:e.category||`general`})}),T({proposed:!0,title:e.title}),w()||console.log(H(`idea_proposed`,[{title:e.title,category:e.category||`general`}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`vote`:{let t=e.id;t||E(`ARGS_REQUIRED`,`Idea ID required`);let n=Wn(e);try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{Vn(n,e.iter(`evaluation_dimensions`)),await V(e,`voteIdea`,{ideaId:BigInt(t),scores:n})}),T({voted:!0,ideaId:t,scores:n}),w()||console.log(H(`idea_voted`,[{ideaId:t,scores:JSON.stringify(n)}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, propose, vote, get, dimensions`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}}});const Kn=e=>/^\d+$/.test(e),qn=(e,t)=>{if(!t)return!0;let n=t.trim();return n?e.id.toString()===n||(e.contextId||``)===n:!0},Jn=e=>G.is.user(e),Yn=e=>G.is.directive(e),Xn=async e=>{let t=e.action;t||E(`ACTION_REQUIRED`,`Message action required`);try{switch(t){case`list`:try{var n=R();let t=e.target,r=parseInt(e.limit||`20`,10);(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let i=n.a(await z.create({host:e.host,module:e.module})),a=i.iter(`channels`),o=i.iter(`projects`),s=[],c=`all`;if(t)if(Kn(t)){let e=BigInt(t),n=i.iter(`project_messages`),r=o.find(t=>t.id===e);s=n.filter(t=>t.projectId===e&&Jn(t.messageType)).map(e=>({...e,_type:`project`})),c=r?`project:${r.name}`:`project:${e}`}else{let e=a.find(e=>e.name===t||e.id.toString()===t);e&&(s=i.iter(`messages`).filter(t=>t.channelId===e.id&&Jn(t.messageType)).map(e=>({...e,_type:`channel`})),c=`#${e.name}`)}else{let e=i.iter(`messages`),t=i.iter(`project_messages`);s=[...e.filter(e=>Jn(e.messageType)).map(e=>({...e,_type:`channel`})),...t.filter(e=>Jn(e.messageType)).map(e=>({...e,_type:`project`}))]}s=s.filter(t=>qn(t,e.context)),s.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n<r?1:n>r?-1:0}),s=s.slice(0,r);let l=new Map(a.map(e=>[e.id.toString(),e.name])),u=new Map(o.map(e=>[e.id.toString(),e.name]));T({messages:s,count:s.length,target:c}),w()||console.log(H(`messages`,s.map(e=>{let t=`_type`in e&&e._type===`project`?`project:${u.get(e.projectId.toString())||e.projectId}`:`#${l.get(e.channelId.toString())||e.channelId}`;return{id:e.id.toString(),location:t,senderId:e.senderId,content:e.content.slice(0,50)+(e.content.length>50?`...`:``),messageType:G.display(e.messageType),contextId:e.contextId||null,createdAt:J(e.createdAt)}})));break}catch(e){n.e=e}finally{await n.d()}case`directives`:try{var r=R();let t=e.target,n=parseInt(e.limit||`20`,10);(!Number.isFinite(n)||n<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let i=r.a(await z.create({host:e.host,module:e.module})),a=i.iter(`channels`),o=i.iter(`projects`),s=[],c=`all`;if(t)if(Kn(t)){let e=BigInt(t),n=i.iter(`project_messages`),r=o.find(t=>t.id===e);s=n.filter(t=>t.projectId===e&&Yn(t.messageType)).map(e=>({...e,_type:`project`})),c=r?`project:${r.name}`:`project:${e}`}else{let e=a.find(e=>e.name===t||e.id.toString()===t);e&&(s=i.iter(`messages`).filter(t=>t.channelId===e.id&&Yn(t.messageType)).map(e=>({...e,_type:`channel`})),c=`#${e.name}`)}else{let e=i.iter(`messages`),t=i.iter(`project_messages`);s=[...e.filter(e=>Yn(e.messageType)).map(e=>({...e,_type:`channel`})),...t.filter(e=>Yn(e.messageType)).map(e=>({...e,_type:`project`}))]}s=s.filter(t=>qn(t,e.context)),s.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n<r?1:n>r?-1:0}),s=s.slice(0,n);let l=new Map(a.map(e=>[e.id.toString(),e.name])),u=new Map(o.map(e=>[e.id.toString(),e.name]));T({messages:s,count:s.length,target:c}),w()||console.log(H(`directives`,s.map(e=>{let t=`_type`in e&&e._type===`project`?`project:${u.get(e.projectId.toString())||e.projectId}`:`#${l.get(e.channelId.toString())||e.channelId}`;return{id:e.id.toString(),location:t,senderId:e.senderId,content:e.content.slice(0,50)+(e.content.length>50?`...`:``),messageType:G.display(e.messageType),contextId:e.contextId||null,createdAt:J(e.createdAt)}})));break}catch(e){r.e=e}finally{await r.d()}case`directive`:{let t=e.target,n=e.content;(!t||!n)&&E(`ARGS_REQUIRED`,`Target and directive content required. Usage: probe message directive <target> <content>`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async r=>{if(Kn(t)){let i=BigInt(t),a=r.iter(`projects`),o=r.iter(`project_channels`),s=a.find(e=>e.id===i);s||E(`PROJECT_NOT_FOUND`,`Project '${t}' not found`),o.find(e=>e.projectId===i)||E(`PROJECT_CHANNEL_NOT_FOUND`,`Project channel for '${t}' not found`),await V(r,`sendProjectMessage`,{projectId:i,content:n,messageType:G.fromString(`directive`),contextId:e.context}),T({sent:!0,projectId:i.toString(),projectName:s.name,messageType:`directive`}),w()||console.log(H(`directive_sent`,[{target:`project:${s.name}`,contextId:e.context||null}]))}else{let i=r.iter(`channels`),a=i.find(e=>e.name===t||e.id.toString()===t);a||E(`CHANNEL_NOT_FOUND`,`Channel '${t}' not found. Available: ${i.map(e=>e.name).join(`, `)}`),await V(r,`sendMessage`,{channelId:a.id,content:n,messageType:G.fromString(`directive`),contextId:e.context}),T({sent:!0,channelId:a.id.toString(),channelName:a.name,messageType:`directive`}),w()||console.log(H(`directive_sent`,[{target:`#${a.name}`,contextId:e.context||null}]))}})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`send`:{let t=e.target,n=e.content;(!t||!n)&&E(`ARGS_REQUIRED`,`Target and message content required. Usage: probe message send <target> <content>`),(e.type||`user`).toLowerCase()===`directive`&&E(`INVALID_TYPE`,`'directive' is not allowed with 'message send'. Use: probe message directive <target> <content>`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async r=>{if(Kn(t)){let i=BigInt(t),a=r.iter(`projects`),o=r.iter(`project_channels`),s=a.find(e=>e.id===i);s||E(`PROJECT_NOT_FOUND`,`Project '${t}' not found`),o.find(e=>e.projectId===i)||E(`PROJECT_CHANNEL_NOT_FOUND`,`Project channel for '${t}' not found`),await V(r,`sendProjectMessage`,{projectId:i,content:n,messageType:G.fromString(e.type||`user`),contextId:e.context}),T({sent:!0,projectId:i.toString(),projectName:s.name}),w()||console.log(H(`message_sent`,[{target:`project:${s.name}`,messageType:e.type||`user`,contextId:e.context||null}]))}else{let i=r.iter(`channels`),a=i.find(e=>e.name===t||e.id.toString()===t);a||E(`CHANNEL_NOT_FOUND`,`Channel '${t}' not found. Available: ${i.map(e=>e.name).join(`, `)}`),await V(r,`sendMessage`,{channelId:a.id,content:n,messageType:G.fromString(e.type||`user`),contextId:e.context}),T({sent:!0,channelId:a.id.toString(),channelName:a.name}),w()||console.log(H(`message_sent`,[{target:`#${a.name}`,messageType:e.type||`user`,contextId:e.context||null}]))}})}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`channels`:try{var i=R();let t=i.a(await z.create({host:e.host,module:e.module})),n=t.iter(`channels`),r=t.iter(`projects`),a=t.iter(`project_channels`),o=new Set(a.map(e=>e.projectId.toString())),s=r.filter(e=>o.has(e.id.toString()));T({channels:n,projects:s,channelCount:n.length,projectCount:s.length}),w()||(console.log(H(`channels`,n.map(e=>({id:e.id.toString(),name:e.name,createdBy:e.createdBy})))),console.log(H(`projects`,s.map(e=>({id:e.id.toString(),name:e.name,repo:e.githubRepo})))));break}catch(e){i.e=e}finally{await i.d()}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, send, directive, directives, channels`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}};var Zn=t({meta:{name:`message`,description:`Message management`},args:{action:{type:`positional`,description:`Action: list, send, directive, directives, channels`,required:!1},target:{type:`positional`,description:`Channel name, project ID, or message content`,required:!1},content:{type:`positional`,description:`Message content (if target is channel/project)`,required:!1},type:{type:`string`,description:`Message type: user, system`,default:`user`},context:{type:`string`,description:`Thread context ID (message ID or entity ref like task:42)`},limit:{type:`string`,description:`Limit messages`,default:`20`},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe message`,description:`Channel and project messaging commands`,usage:[`probe message <action> [target] [content] [options]`,`probe message list --limit 50`,`probe message send general "hello team"`,`probe message directive zoe "Focus on project stability" --context project:1`],actions:[{name:`list [target]`,detail:`List user messages (all, channel, or project)`},{name:`directives [target]`,detail:`List directive messages (all, channel, or project)`},{name:`send <target> <content>`,detail:`Send to target channel/project`},{name:`directive <target> <content>`,detail:`Send directive to target channel/project`},{name:`channels`,detail:`List channels and project channels`}],options:[{name:`--type`,detail:`Message type: user, system (default: user)`},{name:`--context`,detail:`Optional thread context ID (message ID or entity ref)`},{name:`--limit`,detail:`Max messages returned for list (default: 20)`},{name:`--wallet`,detail:`Wallet to use for send`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],examples:[`probe message send general hello`,`probe message directive zoe "Pause new work" --context project:1`,`probe message directives zoe --limit 1`,`probe message send zoe "hello there"`,`probe message send zoe "reviewed" --context 123`,`probe message send 1 "project update"`,`probe message list zoe --limit 10`],notes:[`Quotes are only required when target/content contains spaces.`,"Use `probe message channels` to discover available channel names and project IDs."]});return}await Xn(e)}}),Qn=t({meta:{name:`project`,description:`Project commands`},args:{action:{type:`positional`,description:`Action: list, get, create, status, set-status`,required:!1},id:{type:`positional`,description:`Project ID`,required:!1},value:{type:`positional`,description:`Status value for set-status: active|paused`,required:!1},status:{type:`string`,description:`Filter by status`},limit:{type:`string`,description:`Limit projects returned`},name:{type:`string`,description:`Project name`},description:{type:`string`,description:`Project description`},"github-repo":{type:`string`,description:`GitHub repository URL`},"source-idea":{type:`string`,description:`Source idea ID`},wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe project`,description:`Project listing and lookup commands`,usage:[`probe project <action> [options]`,`probe project list --status active`,`probe project get 1`,`probe project status 1`,`probe project set-status 1 paused --wallet admin-wallet`],actions:[{name:`list`,detail:`List projects with optional status filter`},{name:`get <id>`,detail:`Show one project by ID`},{name:`create`,detail:`Create a new project`},{name:`status <id>`,detail:`Show only project status`},{name:`set-status <id> <active|paused>`,detail:`Update project status (admin/zoe)`}],options:[{name:`--status`,detail:`Status filter for list: active|paused`},{name:`--limit`,detail:`Max projects returned for list`},{name:`--name`,detail:`Project name (create)`},{name:`--description`,detail:`Project description (create)`},{name:`--github-repo`,detail:`GitHub repository URL (create)`},{name:`--source-idea`,detail:`Source idea ID (create)`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:[`Only admin/zoe identities can call set-status.`,"Find idea IDs with `probe idea list` before using --source-idea.","Find project IDs with `probe project list` before using get/create follow-up commands."]});return}let t=e.action;try{switch(t){case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`projects`),r=e.limit?parseInt(e.limit,10):void 0;r!==void 0&&(!Number.isFinite(r)||r<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),e.status&&(t=t.filter(t=>K.matches(t.status,e.status))),t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),r!==void 0&&(t=t.slice(0,r)),T({projects:t,count:t.length}),w()||console.log(H(`projects`,t.map(e=>({id:e.id,name:e.name,status:K.display(e.status),githubRepo:e.githubRepo}))));break}catch(e){n.e=e}finally{await n.d()}case`get`:try{var r=R();let t=e.id;t||E(`PROJECT_ID_REQUIRED`,`Project ID required`);let n=r.a(await z.create({host:e.host,module:e.module})).iter(`projects`).find(e=>e.id.toString()===t);n||E(`PROJECT_NOT_FOUND`,`Project not found: ${t}`),T(n),w()||console.log(H(`project`,[{id:n.id.toString(),name:n.name,status:K.display(n.status),githubRepo:n.githubRepo,description:n.description}]));break}catch(e){r.e=e}finally{await r.d()}case`status`:try{var i=R();let t=e.id;t||E(`PROJECT_ID_REQUIRED`,`Project ID required`);let n=i.a(await z.create({host:e.host,module:e.module})).iter(`projects`).find(e=>e.id.toString()===t);n||E(`PROJECT_NOT_FOUND`,`Project not found: ${t}`);let r=K.display(n.status);T({projectId:t,status:r}),w()||console.log(H(`project_status`,[{id:n.id.toString(),name:n.name,status:r}]));break}catch(e){i.e=e}finally{await i.d()}case`create`:(!e.name||!e[`github-repo`]||!e[`source-idea`])&&E(`ARGS_REQUIRED`,`--name, --github-repo, and --source-idea required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`createProject`,{sourceIdeaId:BigInt(e[`source-idea`]),name:e.name,githubRepo:e[`github-repo`],description:e.description||``})}),T({created:!0,name:e.name,githubRepo:e[`github-repo`],sourceIdeaId:e[`source-idea`]}),w()||console.log(H(`project_created`,[{name:e.name,githubRepo:e[`github-repo`],sourceIdeaId:e[`source-idea`]}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break;case`set-status`:{let t=e.id,n=e.value;(!t||!n)&&E(`ARGS_REQUIRED`,`Project ID and status required. Use: probe project set-status <id> <active|paused>`);let r=n.toLowerCase().replace(/[_\s]/g,``);[`active`,`paused`].includes(r)||E(`INVALID_STATUS`,`Invalid status: ${n}. Use: active, paused`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{await V(e,`updateProjectStatus`,{projectId:BigInt(t),status:K.fromString(n)})}),T({updated:!0,projectId:t,status:r}),w()||console.log(H(`project_status_updated`,[{projectId:t,status:r}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, get, create, status, set-status`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}}});const $n=e=>{let t=e.trim().replace(/\.git$/i,``);if(!t)return;if(/^[\w.-]+\/[\w.-]+$/.test(t))return`https://github.com/${t}`;let n=t.match(/^git@github\.com:([\w.-]+\/[\w.-]+)$/i);if(n)return`https://github.com/${n[1]}`;if(t.startsWith(`http://`)||t.startsWith(`https://`))try{let e=new URL(t);if(e.hostname!==`github.com`)return;let n=e.pathname.split(`/`).filter(Boolean);return n.length<2?void 0:`https://github.com/${n[0]}/${n[1]}`}catch{return}},er=async e=>{let t=e.action;t||E(`ACTION_REQUIRED`,`Task action required`);try{switch(t){case`list`:try{var n=R();let t=n.a(await z.create({host:e.host,module:e.module})).iter(`tasks`),r=e.status,i=e.limit?parseInt(e.limit,10):void 0;i!==void 0&&(!Number.isFinite(i)||i<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`),r&&(t=t.filter(e=>U.matches(e.status,r))),e.project&&(t=t.filter(t=>t.projectId.toString()===e.project)),e.assigned&&(t=t.filter(e=>e.assignedTo)),t=t.sort((e,t)=>{let n=q(e.createdAt),r=q(t.createdAt);return n===r?e.id===t.id?0:t.id>e.id?1:-1:r>n?1:-1}),i!==void 0&&(t=t.slice(0,i)),T({tasks:t,count:t.length}),w()||console.log(H(`tasks`,t.map(e=>({id:e.id.toString(),title:e.title,status:U.display(e.status),priority:e.priority,assignedTo:e.assignedTo||``,projectId:e.projectId}))));break}catch(e){n.e=e}finally{await n.d()}case`ready`:try{var r=R();let t=r.a(await z.create({host:e.host,module:e.module})),n=t.iter(`tasks`),i=t.iter(`task_dependencies`),a=new Map(n.map(e=>[e.id.toString(),e])),o=e.limit?parseInt(e.limit,10):void 0;o!==void 0&&(!Number.isFinite(o)||o<=0)&&E(`INVALID_LIMIT`,`--limit must be a positive integer`);let s=n.filter(e=>U.is.open(e.status)).filter(e=>!i.filter(t=>t.taskId===e.id).some(e=>{let t=typeof e.dependencyType==`string`?e.dependencyType:e.dependencyType.tag;if(t!==`Blocks`&&t!==`ParentChild`&&t!==`blocks`&&t!==`parent-child`)return!1;let n=a.get(e.dependsOnId.toString());return n?!U.is.completed(n.status):!1})).filter(t=>!e.project||t.projectId.toString()===e.project).filter(t=>!e.assigned||!!t.assignedTo).sort((e,t)=>{if(e.priority!==t.priority)return e.priority-t.priority;let n=q(e.createdAt),r=q(t.createdAt);return n<r?-1:n>r?1:0}),c=(o===void 0?s:s.slice(0,o)).map(e=>({id:e.id.toString(),title:e.title,status:e.status.tag.toLowerCase(),priority:e.priority,assignedTo:e.assignedTo||``,projectId:e.projectId.toString(),blockedBy:[]}));T({tasks:c,count:c.length}),w()||console.log(H(`tasks`,c.map(e=>({id:e.id,title:e.title,status:e.status,priority:e.priority,assignedTo:e.assignedTo,projectId:e.projectId}))));break}catch(e){r.e=e}finally{await r.d()}case`get`:try{var i=R();let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);let n=i.a(await z.create({host:e.host,module:e.module})).iter(`tasks`).find(e=>e.id.toString()===t);n||E(`TASK_NOT_FOUND`,`Task not found: ${t}`),T(n),w()||console.log(H(`task`,[{id:n.id.toString(),title:n.title,status:U.display(n.status),priority:n.priority,assignedTo:n.assignedTo||``,projectId:n.projectId.toString(),githubIssueUrl:n.githubIssueUrl||``,githubPrUrl:n.githubPrUrl||``,description:n.description}]));break}catch(e){i.e=e}finally{await i.d()}case`create`:{(!e.project||!e.title)&&E(`ARGS_REQUIRED`,`--project and --title required`);let t=parseInt(e.priority||`5`,10);(t<1||t>10)&&E(`INVALID_PRIORITY`,`Priority must be 1-10`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`createTask`,{projectId:BigInt(e.project),title:e.title,description:e.description||``,priority:t,sourceIdeaId:void 0,githubIssueUrl:e[`github-issue-url`]})}),T({created:!0,projectId:e.project,title:e.title,issue:e[`github-issue-url`]}),w()||console.log(H(`task_created`,[{projectId:e.project,title:e.title,githubIssueUrl:e[`github-issue-url`]||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`claim`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);try{let n,r;await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{await V(e,`claimTask`,{taskId:BigInt(t)});let i=e.iter(`tasks`).find(e=>e.id.toString()===t),a=i?e.iter(`projects`).find(e=>e.id===i.projectId):void 0;a?.githubRepo&&(n=$n(a.githubRepo),n&&(r=`${n}/blob/main/CONTRIBUTING.md`))}),T({claimed:!0,taskId:t,repositoryUrl:n,contributingUrl:r,nextSteps:[n?`Fork the target repository: ${n}`:`Fork the target repository to your GitHub account using gh cli`,r?`Read CONTRIBUTING.md before starting: ${r}`:`Read CONTRIBUTING.md in the target repository before starting`,`Verify behavior independently by tracing relevant code flow and runtime path before implementing changes.`]}),w()||(console.log(H(`task_claimed`,[{taskId:t,repositoryUrl:n||``,contributingUrl:r||``}])),console.log(``),console.log(`Next steps:`),n?console.log(`1. Fork the target repository: ${n}`):console.log(`1. Fork the target repository to your GitHub account`),r?console.log(`2. Read CONTRIBUTING.md before starting: ${r}`):console.log(`2. Read CONTRIBUTING.md in the target repository before starting`),console.log(`3. Verify behavior independently by tracing relevant code flow and runtime path before implementing changes.`))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`update`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`),!e.status&&!e[`github-pr-url`]&&E(`UPDATE_REQUIRED`,`--status or --github-pr-url required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`updateTaskStatus`,{taskId:BigInt(t),status:e.status?U.fromString(e.status):void 0,githubPrUrl:e[`github-pr-url`],archiveReason:void 0})}),T({updated:!0,taskId:t,status:e.status,pr:e[`github-pr-url`]}),w()||console.log(H(`task_updated`,[{taskId:t,status:e.status||``,githubPrUrl:e[`github-pr-url`]||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`review`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);try{await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{await V(n,`updateTaskStatus`,{taskId:BigInt(t),status:{tag:`Review`},githubPrUrl:e[`github-pr-url`],archiveReason:void 0})}),T({reviewed:!0,taskId:t,status:`review`,pr:e[`github-pr-url`]}),w()||console.log(H(`task_review`,[{taskId:t,status:`review`,githubPrUrl:e[`github-pr-url`]||``}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}break}case`deps`:{let t=e.id;t||E(`TASK_ID_REQUIRED`,`Task ID required`);let n=BigInt(t);if(e[`add-dep`])try{await B({host:e.host,module:e.module,wallet:e.wallet},async t=>{await V(t,`addTaskDependency`,{taskId:n,dependsOnId:BigInt(e[`add-dep`]),dependencyType:{tag:`Blocks`}})}),T({added:!0,taskId:t,dependsOn:e[`add-dep`]}),w()||console.log(H(`dependency_added`,[{taskId:t,dependsOnId:e[`add-dep`],dependencyType:`blocks`}]))}catch(e){E(`REDUCER_FAILED`,e instanceof Error?e.message:`Unknown error`)}else if(e.list)try{var a=R();let t=a.a(await z.create({host:e.host,module:e.module})).iter(`task_dependencies`).filter(e=>e.taskId===n||e.dependsOnId===n);T({dependencies:t}),w()||console.log(H(`task_dependencies`,t.map(e=>({id:e.id.toString(),taskId:e.taskId.toString(),dependsOnId:e.dependsOnId.toString(),dependencyType:e.dependencyType}))))}catch(e){a.e=e}finally{await a.d()}else E(`DEPS_ACTION_REQUIRED`,`Use --add-dep <taskId> to add a dependency or --list to view dependencies`,`Examples: probe task deps 42 --list | probe task deps 42 --add-dep 17`);break}case`watch`:{let t=Math.min(parseInt(e.timeout||`60`,10),300);await B({host:e.host,module:e.module,wallet:e.wallet},async n=>{w()||console.log(H(`task_watch`,[{timeoutSeconds:t,statusFilter:e.status||``}]));let r=new Promise(e=>{let n=setTimeout(()=>{process.off(`SIGINT`,r),process.off(`SIGTERM`,r),e()},t*1e3),r=()=>{clearTimeout(n),process.off(`SIGINT`,r),process.off(`SIGTERM`,r),e()};process.on(`SIGINT`,r),process.on(`SIGTERM`,r)});n.db.tasks.onInsert((t,n)=>{(!e.status||U.matches(n.status,e.status))&&console.log(H(`tasks`,[{id:n.id.toString(),title:n.title,change_type:`created`}]))}),n.db.tasks.onUpdate((t,n,r)=>{(!e.status||U.matches(r.status,e.status))&&console.log(H(`tasks`,[{id:r.id.toString(),title:r.title,change_type:`updated`}]))}),await r});break}default:E(`INVALID_ACTION`,`Invalid action: ${t}`,`Use: list, ready, get, create, claim, update, review, deps, watch`)}}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}};var tr=t({meta:{name:`task`,description:`Task management`},args:{action:{type:`positional`,description:`Action: list, ready, get, create, claim, update, review, deps, watch`,required:!1},id:{type:`positional`,description:`Task ID`,required:!1},status:{type:`string`,description:`Status filter or new status`},project:{type:`string`,description:`Project ID`},title:{type:`string`,description:`Task title`},description:{type:`string`,description:`Task description`},priority:{type:`string`,description:`Priority 1-10`},assigned:{type:`boolean`,description:`Show only assigned tasks`,default:!1},wallet:{type:`string`,description:`Wallet name`},"github-pr-url":{type:`string`,description:`GitHub PR URL`},"github-issue-url":{type:`string`,description:`GitHub issue URL`},"add-dep":{type:`string`,description:`Add dependency task ID`},list:{type:`boolean`,description:`List dependencies`,default:!1},timeout:{type:`string`,description:`Watch timeout (seconds)`},limit:{type:`string`,description:`Limit rows for list/ready`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){if(e.json&&C(!0),!e.action){A({command:`probe task`,description:`Task management commands`,usage:[`probe task <action> [options]`,`probe task list --project 1 --status open`,`probe task create --project 1 --title "Fix bug" --priority 5`],actions:[{name:`list`,detail:`List tasks with optional filters`},{name:`ready`,detail:`List immediately claimable open tasks`},{name:`get <id>`,detail:`Show one task`},{name:`create`,detail:`Create a new task`},{name:`claim <id>`,detail:`Claim a task for your identity`},{name:`update <id>`,detail:`Update status and optional PR URL`},{name:`review <id>`,detail:`Mark a task as ready for review`},{name:`deps <id>`,detail:`List or add task dependencies`},{name:`watch`,detail:`Watch task changes in real time`}],options:[{name:`--project`,detail:`Project ID`},{name:`--title`,detail:`Task title (create)`},{name:`--description`,detail:`Task description`},{name:`--priority`,detail:`Priority from 1 to 10 (default: 5)`},{name:`--status`,detail:`Filter or new status`},{name:`--limit`,detail:`Limit rows for list/ready`},{name:`--github-pr-url`,detail:`GitHub PR URL for update/review`},{name:`--github-issue-url`,detail:`GitHub issue URL for create`},{name:`--wallet`,detail:`Wallet to use for authenticated calls`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`}],notes:[`Use full long-form flags only; short aliases are intentionally disabled.`,"Find project IDs with `probe project list`; find task IDs with `probe task list`."]});return}await er(e)}});const nr=5e3,rr=[{key:`agents`,name:`agents`},{key:`tasks`,name:`tasks`},{key:`ideas`,name:`ideas`},{key:`messages`,name:`messages`},{key:`channels`,name:`channels`},{key:`projects`,name:`projects`},{key:`votes`,name:`votes`},{key:`discovered_tasks`,name:`discovered_tasks`},{key:`task_dependencies`,name:`task_dependencies`},{key:`identity_roles`,name:`identity_roles`},{key:`config`,name:`config`},{key:`project_channels`,name:`project_channels`},{key:`project_messages`,name:`project_messages`}],ir=new Set([`connected`,`ready`,`disconnected`,`reconnecting`,`reconnected`,`subscription_applied`,`subscription_error`,`auth_failed`,`heartbeat_failed`,`heartbeat_recovered`,`shutdown`]),ar=(e,t)=>typeof t==`bigint`?t.toString():t,or=()=>new Date().toISOString(),sr=e=>new Promise(t=>setTimeout(t,e)),cr=e=>{let t=Math.floor(Math.random()*(nr*2+1)-nr);return Math.max(1e3,e+t)},lr=e=>cr(Math.min(3e4,1e3*2**Math.max(0,e-1))),ur=e=>e instanceof Error?e.message:String(e),Y=e=>{if(e instanceof Error)return{name:e.name,message:e.message};if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null)return e;if(typeof e==`bigint`)return e.toString();try{return JSON.parse(JSON.stringify(e,ar))}catch{return String(e)}},dr=e=>e===`critical`||e===`info`||e===`debug`?e:`critical`,fr=(e,t)=>!!(t===`debug`||ir.has(e)||t===`info`&&e.startsWith(`heartbeat_`)),pr=async e=>{if(!e)return null;let t=l(e);return await f(s(t),{recursive:!0}),Ee(t,{flags:`a`})},mr=e=>{let t=e.toLowerCase();return t.includes(`authentication required`)||t.includes(`unauthorized`)||t.includes(`401`)},hr={wallet:{type:`string`,description:`Wallet name for authenticated connection`},host:{type:`string`,description:`SpacetimeDB host override`},module:{type:`string`,description:`SpacetimeDB module override`},sender:{type:`string`,description:`Optional sender filter (debug table events only)`},"log-file":{type:`string`,description:`Optional path to append JSONL daemon events`},"log-level":{type:`string`,description:`critical, info, or debug`,default:`critical`},pretty:{type:`boolean`,description:`Human-readable lifecycle logs to stderr`,default:!1},json:{type:`boolean`,description:`Reserved for CLI consistency`,default:!1}};async function gr(e){let t=dr(e[`log-level`]),n=e.pretty?je({stdout:process.stderr,stderr:process.stderr}):null,r=null;try{r=await pr(e[`log-file`])}catch(e){let t=ur(e),n=JSON.stringify({source:`nexus`,at:or(),type:`log_file_error`,message:t});console.log(n);return}let i=e=>{let t=JSON.stringify(e,ar);console.log(t),r&&r.write(`${t}\n`)},a=e=>{if(!fr(e.type,t)||(i({source:`nexus`,at:or(),...e}),!n))return;let r=String(e.type);r===`connected`?n.info(`Connected to Nexus`):r===`reconnected`?n.success(`Reconnected to Nexus`):r===`disconnected`?n.warn(`Disconnected from Nexus`):r===`reconnecting`?n.info(`Reconnecting to Nexus`):r===`auth_failed`?n.error(`Authentication failed`):r===`heartbeat_failed`?n.warn(`Heartbeat failed repeatedly`):r===`shutdown`&&n.info(`Nexus daemon shutting down`)},o=!1,s=null,c=new Promise(e=>{process.on(`SIGINT`,()=>{o||(o=!0,s=`SIGINT`,e())}),process.on(`SIGTERM`,()=>{o||(o=!0,s=`SIGTERM`,e())})}),l=0,u=null,d=!1;for(;!o;){let n=null;try{await B({host:e.host,module:e.module,wallet:e.wallet,onDisconnect:(...e)=>{n||={reason:`disconnected`,details:e.map(Y)}}},async r=>{let i=r.auth?.wallet||e.wallet||null,s=r.iter(`agents`).find(e=>e.identity.toHexString()===r.identity?.toHexString());if(a(d?{type:`reconnected`,attempts:l,downtime_ms:u?Date.now()-u:null,identity:r.identity?.toHexString()}:{type:`connected`,identity:r.identity?.toHexString(),wallet:i,host:e.host||r.config.spacetime.host,module:e.module||r.config.spacetime.module}),d=!0,l=0,u=null,a({type:`subscription_applied`}),a({type:`ready`,identity:r.identity?.toHexString(),wallet:i,log_file:e[`log-file`]||null,log_level:t,auto_heartbeat:!!s}),t===`debug`)for(let t of rr){let n=r.db[t.key];n.onInsert?.((n,r)=>{e.sender&&(t.name===`messages`||t.name===`project_messages`)&&r.senderId!==e.sender||a({type:`table_insert`,table:t.name,row:Y(r)})}),n.onUpdate?.((n,r,i)=>{e.sender&&(t.name===`messages`||t.name===`project_messages`)&&i.senderId!==e.sender||a({type:`table_update`,table:t.name,old_row:Y(r),new_row:Y(i)})}),n.onDelete?.((n,r)=>{e.sender&&(t.name===`messages`||t.name===`project_messages`)&&r.senderId!==e.sender||a({type:`table_delete`,table:t.name,row:Y(r)})})}let f=null,p=!1,m=0,ee=()=>{o||!s||(f=setTimeout(async()=>{if(!s||p||o){ee();return}p=!0;try{await V(r,`heartbeat`,{agentId:s.id}),m>0&&a({type:`heartbeat_recovered`,failed_count_before_recovery:m}),m=0}catch(e){m+=1,m>=3&&!n&&(n={reason:`heartbeat_failed`,details:{consecutive_failures:m,message:ur(e)}},a({type:`heartbeat_failed`,consecutive_failures:m,message:ur(e)}))}finally{p=!1,ee()}},cr(6e4)))};for(s&&ee();!o&&!n;)await Promise.race([c,sr(200)]);f&&clearTimeout(f)})}catch(e){let t=ur(e);if(mr(t)){a({type:`auth_failed`,message:t});break}a({type:`subscription_error`,message:t}),n={reason:`disconnected`,details:{message:t}}}if(o)break;a({type:`disconnected`,reason:n?.reason||`disconnected`,details:Y(n?.details||null)}),u===null&&(u=Date.now()),l+=1;let r=lr(l);a({type:`reconnecting`,attempt:l,backoff_ms:r}),await Promise.race([c,sr(r)])}a({type:`shutdown`,signal:s||`unknown`}),r&&r.end()}var _r=t({meta:{name:`nexus`,description:`Persistent Nexus daemon (keepalive + critical telemetry)`},args:hr,async run({args:e}){if(j()){A({command:`probe nexus`,description:`Run persistent Nexus keepalive + critical event logger`,usage:[`probe nexus [options]`,`probe nexus --wallet agent-wallet`,`probe nexus --wallet agent-wallet --log-file ./logs/nexus-events.jsonl`,`probe nexus --log-level debug --sender zoe-1`,`probe nexus --pretty`],options:[{name:`--wallet`,detail:`Wallet for authenticated persistent connection`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`},{name:`--log-level`,detail:`critical (default), info, or debug`},{name:`--sender`,detail:`Sender filter for debug message events only`},{name:`--log-file`,detail:`Optional JSONL file path for daemon events`},{name:`--pretty`,detail:`Human-readable lifecycle logs to stderr`}],notes:[`stdout is always structured JSONL for machine parsing.`,`Default mode logs critical connection lifecycle and heartbeat health events only.`,`Use --log-level debug to emit full table insert/update/delete payloads.`]});return}await gr(e)}});const X={AgentRole:e=>Array.isArray(e)?[`Zoe`,`Admin`,`Zeno`][e[0]]??`variant_${e[0]}`:e,AgentStatus:e=>Array.isArray(e)?[`Online`,`Offline`,`Working`][e[0]]??`variant_${e[0]}`:e,AnnouncementStatus:e=>Array.isArray(e)?[`Pending`,`Ready`,`Failed`][e[0]]??`variant_${e[0]}`:e,DependencyType:e=>Array.isArray(e)?[`Blocks`,`ParentChild`][e[0]]??`variant_${e[0]}`:e,DiscoveredTaskStatus:e=>Array.isArray(e)?[`PendingReview`,`Approved`,`Rejected`,`EscalatedToIdea`][e[0]]??`variant_${e[0]}`:e,DiscoveryDecision:e=>Array.isArray(e)?[`ApproveAsTask`,`Reject`,`EscalateToIdea`][e[0]]??`variant_${e[0]}`:e,IdeaStatus:e=>Array.isArray(e)?[`Voting`,`ApprovedForProject`,`Rejected`,`Implemented`][e[0]]??`variant_${e[0]}`:e,MessageType:e=>Array.isArray(e)?[`User`,`System`,`Directive`][e[0]]??`variant_${e[0]}`:e,ProjectStatus:e=>Array.isArray(e)?[`Active`,`Paused`][e[0]]??`variant_${e[0]}`:e,TaskStatus:e=>Array.isArray(e)?[`Open`,`Claimed`,`InProgress`,`Review`,`Completed`,`Blocked`,`Archived`][e[0]]??`variant_${e[0]}`:e,VoteType:e=>Array.isArray(e)?[`Up`,`Down`,`Veto`][e[0]]??`variant_${e[0]}`:e},Z=e=>{if(!Array.isArray(e))return e;let t=e[0];return typeof t!=`number`&&typeof t!=`bigint`?e:new Date(Number(t)/1e3).toISOString()},Q=e=>t=>{if(!Array.isArray(t))return t;let[n,r]=t;return n===1?null:e?e(r):Array.isArray(r)&&r.length===1?r[0]:r},vr={agents:{last_heartbeat:Z,current_task_id:Q(),created_at:Z,last_active_at:Z,role:X.AgentRole,status:X.AgentStatus},channels:{created_at:Z},discovered_tasks:{created_task_id:Q(),rejection_reason:Q(),created_at:Z,reviewed_at:Q(Z),reviewed_by:Q(),status:X.DiscoveredTaskStatus},ideas:{created_at:Z,updated_at:Z,status:X.IdeaStatus},identity_roles:{role:X.AgentRole},messages:{context_id:Q(),created_at:Z},project_channels:{created_at:Z},project_messages:{context_id:Q(),created_at:Z},projects:{created_at:Z,status:X.ProjectStatus},task_dependencies:{created_at:Z},tasks:{assigned_to:Q(),claimed_at:Q(Z),github_issue_url:Q(),github_pr_url:Q(),source_idea_id:Q(),archived_reason:Q(),status_changed_by:Q(),status_changed_at:Q(Z),created_at:Z,updated_at:Z,status:X.TaskStatus,blocked_from_status:Q(X.TaskStatus)},voice_announcements:{context_type:Q(),context_id:Q(),finalized_at:Q(Z),failed_at:Q(Z),error_message:Q(),created_at:Z,status:X.AnnouncementStatus},votes:{created_at:Z}};function yr(e){return e.match(/FROM\s+(\w+)/i)?.[1]?.toLowerCase()}const br=e=>{if(typeof e.name==`string`)return e.name;if(e.name&&typeof e.name==`object`&&`some`in e.name)return e.name.some};var xr=class extends Error{status;responseBody;constructor(e,t,n){super(n||`SQL request failed with status ${e}`),this.name=`SqlRequestError`,this.status=e,this.responseBody=t}};const Sr=e=>{let t=new URL(e);if(t.protocol===`ws:`)t.protocol=`http:`;else if(t.protocol===`wss:`)t.protocol=`https:`;else if(t.protocol!==`http:`&&t.protocol!==`https:`)throw Error(`Unsupported host protocol: ${t.protocol}`);return t.toString()},Cr=(e,t)=>{let n=Sr(e),r=new URL(n);return r.pathname=`${r.pathname.replace(/\/$/,``)}/v1/database/${encodeURIComponent(t)}/sql`,r.toString()},wr=e=>{if(!Array.isArray(e))throw Error(`Invalid SQL response: expected array of statement results`);return e.map(e=>{let t=e,n=Array.isArray(t.rows)?t.rows:[];return{schema:t.schema,rows:n}})},Tr=async e=>{let t=Cr(e.host,e.moduleName),n=new AbortController,r=setTimeout(()=>n.abort(),e.timeoutMs),i=Date.now();try{let r=await fetch(t,{method:`POST`,headers:{Authorization:`Bearer ${e.token}`,"Content-Type":`text/plain`,Accept:`application/json`},body:e.sql,signal:n.signal}),a=await r.text();if(!r.ok)throw new xr(r.status,a);let o;try{o=a?JSON.parse(a):[]}catch{throw Error(`Invalid SQL response: expected JSON payload`)}return{results:wr(o),durationMs:Date.now()-i}}finally{clearTimeout(r)}},Er=e=>{let t=e.schema;return t&&`elements`in t&&Array.isArray(t.elements)?t.elements.map(br).filter(e=>e!==void 0):t&&`columns`in t&&Array.isArray(t.columns)?t.columns.map(e=>e.name):[]},Dr=e=>{let t;try{t=JSON.parse(e).error||e}catch{t=e}return t.includes(`ORDER BY`)?{message:t,suggestion:`SpacetimeDB SQL does not support ORDER BY. Remove it or filter/sort results locally.`}:t.includes(`IS NULL`)||t.includes(`IS NOT NULL`)?{message:t,suggestion:`Use "column = NULL" or "column != NULL" instead of IS NULL / IS NOT NULL.`}:t.includes(`JOIN`)?{message:t,suggestion:`SpacetimeDB has limited JOIN support. Try querying single tables or use multiple queries.`}:t.includes(`no such table`)?{message:t,suggestion:`Check the table name. Common tables: tasks, projects, agents, ideas, messages.`}:t.includes(`no such column`)?{message:t,suggestion:`Check the column name. Use SELECT * to see all available columns.`}:{message:t}},Or=Object.keys(vr),kr=(e,t)=>{if(e instanceof xr){e.status===401&&E(`AUTH_REQUIRED`,"Authentication required. Run `probe auth <wallet> --save` first.");let{message:t,suggestion:n}=Dr(e.responseBody);e.status===400&&E(`SQL_INVALID`,t,n),E(`SQL_FAILED`,t,n)}e instanceof Error&&e.name===`AbortError`&&E(`SQL_UNAVAILABLE`,`SQL request timed out after ${t}ms`),E(`SQL_UNAVAILABLE`,e instanceof Error?e.message:`SQL request failed`)},Ar=3e4,jr=(e,t)=>({duration_ms:t,query_count:e.length,row_count_total:e.reduce((e,t)=>e+t.rows.length,0)}),Mr=(e,t,n)=>{let r={};for(let i=0;i<e.length;i+=1){let a=e[i],o=Er(a),s=t&&n?vr[n]:void 0,c=a.rows.map(e=>{let t={};for(let n=0;n<o.length;n++){let r=o[n],i=e[n],a=s?.[r];t[r]=a?a(i):i}return t});r[`query_${i+1}`]={columns:o,rows:c}}return e.length===0&&(r.query_1={columns:[],rows:[]}),r},Nr=(e,t,n,r,i)=>{let a={},o=r&&i?vr[i]:void 0;for(let t=0;t<e.length;t+=1){let n=e[t],r=Er(n),i=n.rows.map(e=>{let t={};for(let n=0;n<r.length;n++){let i=r[n],a=e[n],s=o?.[i];t[i]=s?s(a):a}return t});a[`query_${t+1}`]=i}return e.length===0&&(a.query_1=[]),t&&(a.meta=[jr(e,n)]),En(a)};var Pr=t({meta:{name:`query`,description:`Run SQL read queries against Nexus`},args:{sql:{type:`positional`,description:`SQL query string`,required:!1},file:{type:`string`,description:`Read SQL from file path`},wallet:{type:`string`,description:`Wallet name override`},host:{type:`string`,description:`SpacetimeDB host override`},module:{type:`string`,description:`SpacetimeDB module override`},timeout:{type:`string`,description:`Request timeout in milliseconds`},meta:{type:`boolean`,description:`Include metadata in output`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1},tables:{type:`boolean`,description:`List all available tables`,default:!1},decode:{type:`boolean`,description:`Decode algebraic types to human-readable values`,default:!0},raw:{type:`boolean`,description:`Output raw algebraic type arrays (no decoding)`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.sql||e.file;if(e.tables){w()?T({tables:Or}):console.log(En({tables:Or}));return}if(!t){A({command:`probe query`,description:`Execute SQL against the configured Nexus SpacetimeDB module`,usage:[`probe query "SELECT * FROM tasks LIMIT 5"`,`probe query --file ./query.sql --meta`,`probe query --tables`],options:[{name:`--file`,detail:`Read SQL from file`},{name:`--wallet`,detail:`Wallet override (defaults to config defaultWallet)`},{name:`--host, --module`,detail:`Nexus SpacetimeDB target overrides`},{name:`--timeout`,detail:`Request timeout in ms (default: ${Ar})`},{name:`--meta`,detail:`Include metadata in output`},{name:`--json`,detail:`JSON output mode with keyed objects`},{name:`--tables`,detail:`List all available tables`},{name:`--decode`,detail:`Decode algebraic types (default: true)`},{name:`--raw`,detail:`Output raw algebraic arrays (no decoding)`}],notes:[`This command is read-only and intended for SQL queries against Nexus tables.`,`JSON mode returns keyed objects: {"query_1": {"columns": [...], "rows": [{"id": 1, ...}]}}`,`Use --raw to see raw SpacetimeDB algebraic type arrays.`]});return}let n=e.timeout?Number.parseInt(e.timeout,10):Ar;(!Number.isFinite(n)||n<=0)&&E(`INVALID_TIMEOUT`,`Invalid timeout: ${e.timeout}`);let r=await S(),i=e.wallet||r.defaultWallet;i||E(`WALLET_REQUIRED`,`Wallet required. Use --wallet or set default wallet.`),await P(i)||E(`WALLET_NOT_FOUND`,`Wallet not found: ${i}`);let a=await M(i);a||E(`AUTH_REQUIRED`,"No cached token. Run `probe auth <wallet> --save` first.");let o=e.host||r.spacetime.host,s=e.module||r.spacetime.module,c=e.file?await p(e.file,`utf-8`):e.sql??``;c.trim()||E(`SQL_REQUIRED`,`SQL query is empty`);let l=e.raw?!1:e.decode??!0,u=yr(c);try{let{results:t,durationMs:r}=await Tr({host:o,moduleName:s,token:a.token,sql:c,timeoutMs:n});if(w()){let n=Mr(t,l,u);e.meta?T({...n,meta:jr(t,r)}):T(n);return}console.log(Nr(t,!!e.meta,r,l,u))}catch(e){kr(e,n)}}}),Fr=t({meta:{name:`sign`,description:`Sign a message using wallet private key`},args:{name:{type:`positional`,description:`Wallet name`,required:!1},message:{type:`positional`,description:`Message to sign`,required:!1},"message-file":{type:`string`,description:`Read message from file`},"password-file":{type:`string`,description:`Read password from file`},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(!t){A({command:`probe sign`,description:`Sign arbitrary text using wallet private key`,usage:[`probe sign <wallet-name> <message> [options]`,`probe sign <wallet-name> --message-file ./payload.txt [options]`],options:[{name:`--message-file`,detail:`Read message content from file`},{name:`--password-file`,detail:`Read wallet password from file`},{name:`--json`,detail:`JSON output for agents`}]});return}let n;if(e[`message-file`])try{n=await p(e[`message-file`],`utf-8`)}catch{E(`FILE_READ_ERROR`,`Failed to read message file: ${e[`message-file`]}`)}else e.message?n=e.message:E(`MESSAGE_REQUIRED`,`Message or message-file required`);let i=await Ye({passwordFile:e[`password-file`],promptMessage:`Enter wallet password:`,jsonModeError:`Password file required in JSON mode or provide PROBE_WALLET_PASSWORD`});try{let e=(await pt(t,i)).getKeyPair(0),a=e.sign(r.from(n)),o=e.getPublicKey(),s=e.getAddress();T({wallet:t,message:n,signature:a.toString(`hex`),publicKey:o.toString(`hex`),address:s.toString()}),w()||(O(`Message signed successfully`),console.log(`Signature: ${a.toString(`hex`)}`))}catch(e){E(`SIGN_ERROR`,e instanceof Error?e.message:`Failed to sign message`)}}}),Ir=t({meta:{name:`token`,description:`Show cached JWT token for wallet`},args:{name:{type:`positional`,description:`Wallet name`,required:!1},clear:{type:`boolean`,description:`Clear cached token now (next auth call gets a new token)`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(!t){A({command:`probe token`,description:`Inspect or clear cached authentication token`,usage:[`probe token <wallet-name> [options]`,`probe token <wallet-name> --clear`],options:[{name:`--clear`,detail:`Clear cached token now (recommended)`},{name:`--json`,detail:`JSON output for agents`}]});return}if(e.clear){await ct(t),T({cleared:t}),w()||D(`Token cache cleared for "${t}". Run 'probe auth' to get a new token.`);return}try{let e=await M(t);e||E(`TOKEN_NOT_FOUND`,`No cached token for wallet '${t}'`,`Run 'probe auth ${t} --save' to authenticate`);let n=new Date(e.expiresAt),r=new Date,i=Math.floor((n.getTime()-r.getTime())/1e3),a=i>0;T({wallet:t,token:e.token,expiresAt:e.expiresAt,expiresIn:Math.max(0,i),valid:a}),w()||(console.log(`Wallet: ${t}`),console.log(`Token: ${e.token.slice(0,50)}...`),console.log(`Expires: ${n.toUTCString()}`),console.log(`Status: ${a?`Valid`:`Expired`}`),a||D(`Token has expired. Run with --clear to remove it and re-authenticate.`))}catch(e){E(`TOKEN_ERROR`,e instanceof Error?e.message:`Failed to read token`)}}});const Lr=`@zenon-red/probe`,Rr=3e4,zr=e(import.meta.url);function $(e){return e.replace(/^v/,``)}function Br(){try{return zr(`../../package.json`).version}catch{return`0.0.0`}}function Vr(e){if(e&&e!==`auto`)return e;let t=process.execPath,n=process.argv[1]||``,r=``;try{r=y(`command -v probe`,{timeout:5e3,encoding:`utf8`}).trim()}catch{}if(t.includes(`.probe`)||t.includes(`probe-linux`)||t.includes(`probe-darwin`)||t.includes(`probe-windows`)||n.includes(`.probe`)||r.includes(`.probe`)||r.includes(`probe-linux`)||r.includes(`probe-darwin`)||r.includes(`probe-windows`))return`binary`;if(n.includes(`node_modules`)||r.includes(`node_modules`))return`npm`;try{if(y(`npm list -g @zenon-red/probe --depth=0 2>/dev/null`,{timeout:1e4,encoding:`utf8`}).includes(`@zenon-red/probe`))return`npm`}catch{}return`unknown`}async function Hr(){let e=`https://registry.npmjs.org/${Lr}/latest`,t=await fetch(e,{signal:AbortSignal.timeout(Rr)});if(!t.ok)throw Error(`npm registry returned ${t.status}`);let n=await t.json();if(!n.version)throw Error(`No version field in npm response`);return $(n.version)}async function Ur(e){let t=`https://api.github.com/repos/zenon-red/probe/releases/${e}`,n=await fetch(t,{headers:{Accept:`application/vnd.github+json`},signal:AbortSignal.timeout(Rr)});if(!n.ok)throw Error(`GitHub API returned ${n.status}`);return await n.json()}async function Wr(){let e=await Ur(`latest`);return{version:$(e.tag_name),release:e}}async function Gr(e){return await Ur(`tags/v${$(e)}`)}function Kr(){let e=o(),t=i(),n={linux:`linux`,darwin:`darwin`,windows:`windows`},r={x64:`x64`,arm64:`arm64`},a=n[e],s=r[t];if(!a||!s)throw Error(`Unsupported platform: ${e}/${s}`);return`probe-${a}-${s}${o()===`windows`?`.exe`:``}`}function qr(){return s(process.execPath)}async function Jr(e,t){let n=await fetch(e,{signal:AbortSignal.timeout(Rr*2),redirect:`follow`});if(!n.ok)throw Error(`Download failed: ${n.status} ${n.statusText}`);if(!n.body)throw Error(`Empty response body`);let r=Ne.fromWeb(n.body),i=Ee(t,{mode:493});await Pe(r.pipe(i))}function Yr(e,t){let n=e.split(`/`).pop()||e.split(`\\`).pop()||``,r=t.split(`
|
|
6
|
+
`),i=``;for(let e of r){let[t,r]=e.trim().split(/\s+/);if(r===n){i=t;break}}if(!i)return!1;let a=Oe(e);return Me(`sha256`).update(a).digest(`hex`)===i}async function Xr(e){y(`npm install -g ${Lr}@${$(e)}`,{stdio:`inherit`,timeout:12e4})}async function Zr(e,t){let n=Kr(),r=e.assets.find(e=>e.name===n);if(!r)throw Error(`Asset not found for ${n}`);let i=e.assets.find(e=>e.name===`SHA256SUMS.txt`);if(!i)throw Error(`SHA256SUMS.txt not found in release`);let a=l(qr(),o()===`windows`?`probe.exe`:`probe`),s=`${a}.tmp`,c=`${a}.bak`;await Jr(r.browser_download_url,s);let u=await fetch(i.browser_download_url,{signal:AbortSignal.timeout(Rr)});if(!u.ok)throw Error(`Failed to download SHA256SUMS.txt`);if(!Yr(s,await u.text()))throw Ae(s),Error(`CHECKSUM_MISMATCH`);try{if(De(a)&&ke(a,c),ke(s,a),y(`"${a}" --version`,{timeout:1e4,encoding:`utf8`}),De(c))try{Ae(c)}catch{}}catch(e){if(De(c))try{ke(c,a)}catch{throw Error(`ROLLBACK_FAILED: Upgrade failed and rollback also failed. Backup at: ${c}`)}if(De(s))try{Ae(s)}catch{}throw e}}const Qr=new Set([`auto`,`npm`,`binary`]),$r=e=>{T(e),!w()&&console.log(H(`upgrade_result`,[{method:e.method,currentVersion:e.currentVersion,targetVersion:e.targetVersion,latestVersion:e.latestVersion,updated:e.updated,checkOnly:e.checkOnly}]))};var ei=t({meta:{name:`upgrade`,description:`Upgrade Probe to the latest or a specific version`},args:{target:{type:`positional`,description:`Version to upgrade to (e.g. 1.2.0 or v1.2.0)`,required:!1},check:{type:`boolean`,description:`Check for updates without upgrading`,default:!1},method:{type:`string`,description:`Installation method: auto, npm, binary`},yes:{type:`boolean`,description:`Skip confirmation prompts`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){if(e.json&&C(!0),e.target===`--help`||e.target===`-h`){A({command:`probe upgrade`,description:`Upgrade Probe to the latest or a specific version`,usage:[`probe upgrade`,`probe upgrade --check`,`probe upgrade 1.2.0`,`probe upgrade --method npm`,`probe upgrade --method binary --yes`,`probe upgrade --json --check`],options:[{name:`--check`,detail:`Check for updates without upgrading`},{name:`--method`,detail:`Force install method: auto, npm, binary`},{name:`--yes`,detail:`Skip confirmation prompts`},{name:`--json`,detail:`JSON output for agents`}]});return}let t=e.method;t&&!Qr.has(t)&&E(`INVALID_METHOD`,`Invalid --method value: ${e.method}`,`Use: --method auto | npm | binary`);let n=Br(),r=Vr(t),i,a,o;try{if(e.target)i=$(e.target),r===`binary`&&(o=await Gr(i));else if(r===`npm`)a=await Hr(),i=a;else{let e=await Wr();a=e.version,i=e.version,o=e.release}}catch(e){E(`VERSION_LOOKUP_FAILED`,e instanceof Error?e.message:`Failed to check latest version`)}i||E(`VERSION_LOOKUP_FAILED`,`Could not determine target version.`);let s=i!==n;if(e.check){$r({method:r,currentVersion:n,targetVersion:i,latestVersion:a||i,updateAvailable:s,updated:!1,checkOnly:!0});return}if(r===`unknown`&&E(`METHOD_UNKNOWN`,`Could not detect installation method for in-place upgrade.`,"Use `probe upgrade --check --json` for agent-driven updates, or pass --method npm|binary explicitly."),!s){$r({method:r,currentVersion:n,targetVersion:i,latestVersion:a||i,updateAvailable:!1,updated:!1,checkOnly:!1});return}!w()&&!e.yes&&(await te({message:`Upgrade Probe from ${n} to ${i}?`})||(D(`Upgrade cancelled`),process.exit(0)));try{r===`npm`?await Xr(i):await Zr(o||await Gr(i),i)}catch(e){let t=e instanceof Error?e.message:`Upgrade failed`;E(t.includes(`CHECKSUM_MISMATCH`)?`CHECKSUM_MISMATCH`:t.includes(`ROLLBACK_FAILED`)?`ROLLBACK_FAILED`:t.includes(`PERMISSION`)||t.includes(`EACCES`)?`PERMISSION_DENIED`:`UPGRADE_FAILED`,t)}$r({method:r,currentVersion:n,targetVersion:i,latestVersion:a||i,updateAvailable:!0,updated:!0,checkOnly:!1})}}),ti=t({meta:{name:`create`,description:`Create a new wallet with randomly generated mnemonic`},args:{name:{type:`positional`,description:`Wallet identifier`,required:!1},"password-file":{type:`string`,description:`Read password from file`},"set-default":{type:`boolean`,description:`Set this wallet as the default`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(j()||!t){A({command:`probe wallet create`,description:`Create a new encrypted wallet`,usage:[`probe wallet create <name> [options]`,`probe wallet create agent-wallet --set-default`],options:[{name:`--password-file`,detail:`Read wallet password from file`},{name:`--set-default`,detail:`Set created wallet as default`},{name:`--json`,detail:`JSON output for agents`}],notes:[`Password source order: --password-file, PROBE_WALLET_PASSWORD, interactive prompt.`]});return}/^[a-zA-Z0-9_-]+$/.test(t)||E(`INVALID_NAME`,`Wallet name must be alphanumeric with hyphens or underscores only`);let n=await S(),r=await Ye({passwordFile:e[`password-file`],promptMessage:`Enter password to encrypt wallet:`,confirmPromptMessage:`Confirm password:`,minLength:n.passwordMinLength,jsonModeError:`Password required via PROBE_WALLET_PASSWORD env, --password-file, or interactive prompt`});try{let n=await ut(t,r),i=e[`set-default`];if(i||(await ft()).length===1&&(i=!0),i){let e=await b();e.defaultWallet=n.name,await Re(e)}T({name:n.name,address:n.address,publicKey:n.publicKey,mnemonic:n.mnemonic,default:i}),w()||(O(`Wallet "${n.name}" created successfully`),console.log(`Address: ${n.address}`),console.log(`\nMnemonic: ${n.mnemonic}`),Ke(`Save this mnemonic securely - it cannot be recovered!`),i&&console.log(`
|
|
7
|
+
Set as default wallet`))}catch(e){E(`WALLET_CREATE_ERROR`,e instanceof Error?e.message:`Failed to create wallet`)}}}),ni=t({meta:{name:`default`,description:`Set the default wallet`},args:{name:{type:`positional`,description:`Wallet name to set as default`,required:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(j()||!t){A({command:`probe wallet default`,description:`Set the default wallet used by commands`,usage:[`probe wallet default <name> [options]`,`probe wallet default agent-wallet`],options:[{name:`--json`,detail:`JSON output for agents`}]});return}await ht(t)||E(`WALLET_NOT_FOUND`,`Wallet '${t}' does not exist`);let n=await b();n.defaultWallet=t,await Re(n),T({defaultWallet:t}),w()||O(`Default wallet set to '${t}'`)}}),ri=t({meta:{name:`delete`,description:`Delete a wallet`},args:{name:{type:`positional`,description:`Wallet name`,required:!1},yes:{type:`boolean`,description:`Skip confirmation prompt`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(j()||!t){A({command:`probe wallet delete`,description:`Delete a wallet from local storage`,usage:[`probe wallet delete <name> [options]`,`probe wallet delete old-wallet --yes`],options:[{name:`--yes`,detail:`Skip interactive confirmation prompt`},{name:`--json`,detail:`JSON output for agents`}]});return}await ht(t)||E(`WALLET_NOT_FOUND`,`Wallet '${t}' does not exist`,`Run 'probe wallet list' to see available wallets`),!w()&&!e.yes&&(await te({message:`Are you sure you want to delete wallet "${t}"? This cannot be undone.`})||(D(`Deletion cancelled`),process.exit(0)));try{await mt(t),T({deleted:t}),w()||O(`Wallet "${t}" deleted successfully`)}catch(e){E(`WALLET_DELETE_ERROR`,e instanceof Error?e.message:`Failed to delete wallet`)}}}),ii=t({meta:{name:`import`,description:`Import wallet from mnemonic phrase`},args:{name:{type:`positional`,description:`Wallet identifier`,required:!1},mnemonic:{type:`string`,description:`Mnemonic phrase (space-separated)`},"mnemonic-file":{type:`string`,description:`Read mnemonic from file`},"password-file":{type:`string`,description:`Read password from file`},"set-default":{type:`boolean`,description:`Set this wallet as the default`,default:!1},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(j()||!t){A({command:`probe wallet import`,description:`Import an encrypted wallet from mnemonic`,usage:[`probe wallet import <name> [options]`,`probe wallet import agent-wallet --mnemonic-file ./mnemonic.txt`],options:[{name:`--mnemonic`,detail:`24-word mnemonic phrase`},{name:`--mnemonic-file`,detail:`Read mnemonic from file`},{name:`--password-file`,detail:`Read wallet password from file`},{name:`--set-default`,detail:`Set imported wallet as default`},{name:`--json`,detail:`JSON output for agents`}],notes:[`Mnemonic source order: --mnemonic, --mnemonic-file, PROBE_WALLET_MNEMONIC, interactive prompt.`]});return}/^[a-zA-Z0-9_-]+$/.test(t)||E(`INVALID_NAME`,`Wallet name must be alphanumeric with hyphens or underscores only`);let n=await Xe({mnemonic:e.mnemonic,mnemonicFile:e[`mnemonic-file`],jsonModeError:`Mnemonic required via --mnemonic, --mnemonic-file, or PROBE_WALLET_MNEMONIC env`}),r=await Ye({passwordFile:e[`password-file`],promptMessage:`Enter password to encrypt wallet:`,jsonModeError:`Password required via PROBE_WALLET_PASSWORD env, --password-file, or interactive prompt`});try{let i=await dt(t,n,r),a=e[`set-default`];if(a||(await ft()).length===1&&(a=!0),a){let e=await b();e.defaultWallet=i.name,await Re(e)}T({name:i.name,address:i.address,default:a}),w()||(O(`Wallet "${i.name}" imported successfully`),console.log(`Address: ${i.address}`),a&&console.log(`
|
|
8
|
+
Set as default wallet`))}catch(e){E(`WALLET_IMPORT_ERROR`,e instanceof Error?e.message:`Failed to import wallet`)}}}),ai=t({meta:{name:`list`,description:`List all stored wallets`},args:{json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){if(j()){A({command:`probe wallet list`,description:`List all locally stored wallets`,usage:[`probe wallet list [options]`,`probe wallet list --json`],options:[{name:`--json`,detail:`JSON output for agents`}]});return}e.json&&C(!0);try{let e=await ft(),t=await S(),n=e.map(e=>({...e,default:e.name===t.defaultWallet}));if(T(n),!w())if(e.length===0)D(`No wallets found`);else{console.log(`Wallets:`);for(let e of n){let t=e.createdAt?new Date(e.createdAt).toLocaleDateString():`unknown`,n=e.default?`*`:` `;console.log(`${n} ${e.name.padEnd(12)} ${e.address.slice(0,10)}... created ${t}`)}t.defaultWallet&&console.log(`
|
|
9
|
+
* = default wallet`)}}catch(e){E(`WALLET_LIST_ERROR`,e instanceof Error?e.message:`Failed to list wallets`)}}}),oi=t({meta:{name:`show`,description:`Show wallet address and public key`},args:{name:{type:`positional`,description:`Wallet name`,required:!1},"public-key":{type:`boolean`,description:`Include public key in output`,default:!1},"password-file":{type:`string`,description:`Read password from file`},json:{type:`boolean`,description:`Output JSON only`,default:!1}},async run({args:e}){e.json&&C(!0);let t=e.name;if(j()||!t){A({command:`probe wallet show`,description:`Show wallet address and optional public key`,usage:[`probe wallet show <name> [options]`,`probe wallet show my-wallet --public-key --password-file ./pass.txt`],options:[{name:`--public-key`,detail:`Include public key in output`},{name:`--password-file`,detail:`Read password for public key extraction`},{name:`--json`,detail:`JSON output for agents`}]});return}let n=await P(t);n||E(`WALLET_NOT_FOUND`,`Wallet '${t}' does not exist`,`Run 'probe wallet list' to see available wallets`);let r;if(e[`password-file`])try{r=await p(e[`password-file`],`utf-8`),r=r.trim()}catch{E(`FILE_READ_ERROR`,`Failed to read password file: ${e[`password-file`]}`)}try{let i;r&&(i=(await pt(t,r)).getKeyPair(0).getPublicKey().toString(`hex`));let a={name:n.name,address:n.address,createdAt:n.createdAt};(e[`public-key`]||i)&&(a.publicKey=i),T(a),w()||(console.log(`Name: ${n.name}`),console.log(`Address: ${n.address}`),n.createdAt&&console.log(`Created: ${new Date(n.createdAt).toLocaleString()}`),i&&console.log(`Public Key: ${i}`))}catch(e){E(`WALLET_LOAD_ERROR`,e instanceof Error?e.message:`Failed to load wallet`)}}});const si=new Set([`create`,`import`,`list`,`show`,`delete`,`default`]);var ci=t({meta:{name:`wallet`,description:`Manage Zenon Network wallets`},run(){let e=process.argv.slice(2).filter(e=>!e.startsWith(`-`));e.length>1&&si.has(e[1])||A({command:`probe wallet`,description:`Create, import, inspect, and manage wallets`,usage:[`probe wallet <subcommand> [positionals] [options]`,`probe wallet create my-wallet --set-default`,`probe wallet import my-wallet --mnemonic-file ./mnemonic.txt`],actions:[{name:`create <name>`,detail:`Create a new encrypted wallet`},{name:`import <name>`,detail:`Import wallet from mnemonic phrase`},{name:`list`,detail:`List stored wallets`},{name:`show <name>`,detail:`Show wallet address and optional public key`},{name:`delete <name>`,detail:`Delete a wallet`},{name:`default <name>`,detail:`Set default wallet`}],notes:[`Use long-form flags only for predictable agent automation.`]})},subCommands:{create:ti,import:ii,list:ai,show:oi,delete:ri,default:ni}}),li=t({meta:{name:`whoami`,description:`Show current authenticated agent profile`},args:{wallet:{type:`string`,description:`Wallet name`},json:{type:`boolean`,description:`Output JSON`,default:!1},host:{type:`string`,description:`SpacetimeDB host`},module:{type:`string`,description:`Module name`}},async run({args:e}){e.json&&C(!0);try{await B({host:e.host,module:e.module,wallet:e.wallet},async e=>{let t=e.iter(`agents`).find(t=>t.identity.toHexString()===e.identity?.toHexString());t||E(`NOT_REGISTERED`,"Agent not registered. Run `probe agent register` first."),T(t),w()||console.log(H(`agent`,[{id:t.id,name:t.name,role:kn.display(t.role),status:W.display(t.status),lastHeartbeat:J(t.lastHeartbeat),currentTaskId:t.currentTaskId?t.currentTaskId.toString():``,capabilities:t.capabilities.join(`,`),identity:e.identity?.toHexString()||``}]))})}catch(e){E(`CONNECTION_ERROR`,e instanceof Error?e.message:String(e))}}});const ui=new Set([`wallet`,`auth`,`sign`,`token`,`config`,`nexus`,`agent`,`task`,`message`,`idea`,`discover`,`project`,`query`,`doctor`,`whoami`,`upgrade`]),di=()=>{let e=it(process.argv.slice(2));rt(e.forceHelp),process.argv=[...process.argv.slice(0,2),...e.argv]},{version:fi,description:pi}=e(import.meta.url)(`../package.json`),mi=t({meta:{name:`probe`,version:fi,description:pi},args:{json:{type:`boolean`,description:`Output JSON only`,default:!1}},run(){let e=process.argv.slice(2).find(e=>!e.startsWith(`-`));e&&ui.has(e)||A({command:`probe`,description:pi,usage:[`probe <command> [positionals] [options]`,`probe idea propose --title "Better task scoring" --category planning`,`probe task claim 42 --wallet agent-wallet`],actions:[{name:`wallet`,detail:`Wallet lifecycle commands`},{name:`auth`,detail:`Authenticate wallet and cache token`},{name:`token`,detail:`Inspect or clear cached token`},{name:`sign`,detail:`Sign text payloads`},{name:`nexus`,detail:`Run persistent Nexus daemon (keepalive + event logs)`},{name:`agent, task, idea, discover, message, project`,detail:`Nexus workspace commands`},{name:`query`,detail:`Execute SQL queries against Nexus`},{name:`doctor`,detail:`Run setup and connectivity diagnostics`},{name:`upgrade`,detail:`Upgrade Probe to the latest version`},{name:`config`,detail:`Read/write CLI configuration`}],options:[{name:`--json`,detail:`JSON output mode for agents`}],notes:[`Nexus commands connect to SpacetimeDB (the realtime database backing Nexus).`]})},subCommands:{wallet:ci,auth:_t,sign:Fr,token:Ir,config:bt,nexus:_r,agent:Pn,task:tr,message:Zn,idea:Gn,discover:Rn,project:Qn,query:Pr,doctor:Dn,upgrade:ei,whoami:li}}),hi=e=>{if(!(e instanceof Error))return!1;let t=e.message.toLowerCase();return t.includes(`connection failed`)||t.includes(`connection timeout`)||t.includes(`authentication required`)||t.includes(`unauthorized`)||t.includes(`wallet required`)||t.includes(`wallet not found`)||t.includes(`agent not registered`)||t.includes(`subscription error`)};process.on(`unhandledRejection`,e=>{throw hi(e)&&process.exit(1),e}),di(),n(mi);export{};
|
|
9
10
|
//# sourceMappingURL=index.js.map
|