@roll-agent/core 0.6.4 → 0.6.5
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/cli/commands/agent-list.js +1 -1
- package/dist/cli/commands/agent-tools.js +1 -1
- package/dist/cli/utils/agent-tools-output.d.ts +2 -0
- package/dist/cli/utils/agent-tools-output.js +1 -0
- package/dist/cli/utils/terminal.d.ts +5 -0
- package/dist/cli/utils/terminal.js +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineCommand as
|
|
1
|
+
import{defineCommand as t}from"citty";import o from"cli-table3";import{loadAgentsConfig as r}from"../../config/loader.js";import{formatAgentSourceType as n,getAgentLocation as e,inferAgentSourceType as s}from"../../registry/source.js";import{AgentStore as a}from"../../registry/store.js";import{formatLocationForDisplay as i,resolveTerminalColumns as l}from"../utils/terminal.js";const c=6,g=2;export default t({meta:{description:"列出所有已注册 Agent"},args:{json:{type:"boolean",description:"JSON 格式输出",default:!1}},run({args:t}){const{agentsConfig:c}=r(),g=new a(c.dataDir).list();if(t.json)return void console.log(JSON.stringify(g,null,2));if(0===g.length)return void console.log("暂无已注册的 Agent。可使用 `roll agent add <path>`、`roll agent install <package>` 或 `roll agent add --remote <endpoint>`。");const u=m(l()),p=new o({head:["Name","Status","Source","Transport","Location"],colWidths:[...u],truncate:"…",style:{head:["cyan"]}});for(const t of g)p.push([t.skill.name,t.status,n(s(t)),t.transport.type,i(e(t),f(u[4]))]);console.log(p.toString())}});function m(t){const o=t-6,r=o-43-24;if(r>=15)return[24,10,14,19,r];const n=Math.max(16,o-43-15);return[n,10,14,19,o-43-n]}function f(t){return Math.max(1,t-2)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineCommand as o}from"citty";import
|
|
1
|
+
import{defineCommand as o}from"citty";import{getAgentEnvFromAgentsConfig as t}from"../../config/helpers.js";import{loadAgentsConfig as e}from"../../config/loader.js";import{McpClientManager as n}from"../../mcp/client-manager.js";import{resolveTransportWithDevSpawnSpec as i}from"../../registry/dev-spawn.js";import{AgentStore as r}from"../../registry/store.js";import{normalizeListedTools as s}from"../utils/agent-tools.js";import{formatAgentToolsTextOutput as l}from"../utils/agent-tools-output.js";import{log as a}from"../utils/output.js";export default o({meta:{description:"查看 Agent 暴露的 MCP tools 与 inputSchema"},args:{name:{type:"positional",description:"Agent 名称",required:!0},json:{type:"boolean",description:"JSON 格式输出",default:!1}},async run({args:o}){const{agentsConfig:m}=e(),c=new r(m.dataDir).findByName(o.name);if(!c)return a.error(`Agent "${o.name}" 未找到。使用 \`roll agent list\` 查看已注册 Agent。`),void(process.exitCode=1);const g=new n;try{a.info(`连接 Agent "${c.skill.name}" 并获取 MCP tools/list...`);const e=i(c),n=t(m,c.skill.name),r=await g.connect(c.skill.name,e,c.installPath,{...n?{env:n}:{}}),{tools:p}=await r.listTools(),f=s(p);if(o.json)return void console.log(JSON.stringify(f,null,2));if(0===f.length)return void console.log(`Agent "${c.skill.name}" 暂未暴露任何 tool。`);console.log(l(c.skill.name,f))}catch(o){a.error(o instanceof Error?o.message:String(o)),process.exitCode=1}finally{await g.disconnectAll()}}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import t from"chalk";import n from"cli-table3";import{indentBlock as e,resolveTerminalColumns as o}from"./terminal.js";const i=4;export function formatAgentToolsTextOutput(n,e){const i=r(e,o()),c=e.map((t,n)=>l(t,n+1));return[`${t.cyan(n)} tools (${e.length})`,i.toString(),"",t.bold("Input Schemas"),...c,"",t.dim(`提示: 使用 roll agent tools ${n} --json 获取机器可读完整结构。`)].join("\n")}function r(e,o){const i=c(o),r=new n({head:["Tool","Description","Input"],colWidths:[...i],truncate:"…",style:{head:["cyan"]}});for(const n of e)r.push([n.name,n.description??t.dim("(no description)"),s(n.inputSchema)]);return r}function c(t){const n=t-4,e=n>=110?30:22,o=n>=110?36:26;return[e,Math.max(24,n-e-o),o]}function s(t){const n=Object.keys(t.properties??{});if(0===n.length)return`${t.type}: no fields`;const e=1===n.length?"1 field":`${n.length} fields`,o=t.required??[];return 0===o.length?`${t.type}: ${e}`:1===o.length?`${t.type}: ${e}, req`:`${t.type}: ${e}, req ${o.length}`}function l(n,o){return["",`${t.dim(`${o}.`)} ${t.cyan(n.name)}`,` ${t.dim("Description")}`,e(n.description??"(no description)",4),` ${t.dim("Input Schema")}`,e(JSON.stringify(n.inputSchema,null,2),4)].join("\n")}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function resolveTerminalColumns(): number;
|
|
2
|
+
export declare function normalizeTerminalColumns(streamColumns: number | undefined, envColumns: string | undefined): number;
|
|
3
|
+
export declare function formatLocationForDisplay(location: string, maxWidth: number): string;
|
|
4
|
+
export declare function truncateMiddle(value: string, maxWidth: number): string;
|
|
5
|
+
export declare function indentBlock(value: string, spaces: number): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{homedir as n}from"node:os";const t=120,r=80,e="…";export function resolveTerminalColumns(){return normalizeTerminalColumns(process.stdout.columns,process.env.COLUMNS)}export function normalizeTerminalColumns(n,e){const o=Number.isFinite(n)?n:u(e);return Math.max(r,Math.floor(o??t))}export function formatLocationForDisplay(n,t){return truncateMiddle(o(n),t)}export function truncateMiddle(n,t){const r=Array.from(n);if(t<=0)return"";if(r.length<=t)return n;if(1===t)return e;const o=t-1,i=Math.ceil(.55*o),u=o-i;return`${r.slice(0,i).join("")}${e}${r.slice(-u).join("")}`}export function indentBlock(n,t){const r=" ".repeat(t);return n.split("\n").map(n=>`${r}${n}`).join("\n")}function o(t){const r=n();if(!r||i(t))return t;const e=t.replaceAll("\\","/"),o=r.replaceAll("\\","/");return e===o?"~":e.startsWith(`${o}/`)?`~/${e.slice(o.length+1)}`:t}function i(n){return/^[a-z][a-z0-9+.-]*:\/\//i.test(n)}function u(n){if(void 0===n)return;const t=Number.parseInt(n,10);return Number.isFinite(t)&&t>0?t:void 0}
|