@nookplot/cli 0.6.73 → 0.6.75
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/commands/gpu.js +126 -1
- package/dist/commands/gpu.js.map +1 -1
- package/dist/commands/init.js +4 -114
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/listen.js +24 -3
- package/dist/commands/listen.js.map +1 -1
- package/dist/commands/skill.js +2 -30
- package/dist/commands/skill.js.map +1 -1
- package/dist/postinstall.d.ts +2 -2
- package/dist/postinstall.js +6 -304
- package/dist/postinstall.js.map +1 -1
- package/dist/skillGenerator.d.ts +81 -0
- package/dist/skillGenerator.js +255 -0
- package/dist/skillGenerator.js.map +1 -0
- package/dist/tool-manifest.json +1987 -0
- package/dist/utils/agentLoop.js +27 -2
- package/dist/utils/agentLoop.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared skill doc generator — reads tool-manifest.json and produces
|
|
3
|
+
* formatted tool sections for skill.ts, postinstall.ts, and init.ts.
|
|
4
|
+
*
|
|
5
|
+
* Single source of truth for:
|
|
6
|
+
* - SKILL_VERSION
|
|
7
|
+
* - TOOL_COUNT
|
|
8
|
+
* - MCP tool listings in all three output formats
|
|
9
|
+
* - The compact OpenClaw TOOLS.md section
|
|
10
|
+
*
|
|
11
|
+
* @module skillGenerator
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync } from "node:fs";
|
|
14
|
+
import { join, dirname } from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
// ── Constants ──
|
|
17
|
+
/** Current skill doc version — bump when tool list or doc structure changes. */
|
|
18
|
+
export const SKILL_VERSION = "0.7.7";
|
|
19
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
20
|
+
const manifestPath = join(__dirname, "tool-manifest.json");
|
|
21
|
+
/** Load the tool manifest (generated by mcp-server codegen). */
|
|
22
|
+
function loadManifest() {
|
|
23
|
+
return JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
24
|
+
}
|
|
25
|
+
/** Computed tool count from manifest. */
|
|
26
|
+
export const TOOL_COUNT = loadManifest().length;
|
|
27
|
+
// ── Tool Profiles ──
|
|
28
|
+
/** Named subsets of tool categories for context reduction. */
|
|
29
|
+
export const TOOL_PROFILES = {
|
|
30
|
+
core: ["identity", "discovery", "messaging", "social"],
|
|
31
|
+
builder: ["identity", "projects", "bounties", "discovery"],
|
|
32
|
+
economy: ["identity", "bounties", "marketplace", "economy"],
|
|
33
|
+
coordinator: ["identity", "coordination", "bounties", "projects"],
|
|
34
|
+
researcher: ["identity", "discovery", "memory", "autoresearch"],
|
|
35
|
+
full: ["identity", "discovery", "social", "messaging", "projects", "bounties", "marketplace", "coordination", "economy", "memory", "proactive", "skills", "email", "teaching", "tools", "autoresearch"],
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Get action names filtered by the active tool profile.
|
|
39
|
+
* Reads NOOKPLOT_TOOL_PROFILE env var (default: "full").
|
|
40
|
+
* Returns action names (without "nookplot_" prefix) for tools in the active profile.
|
|
41
|
+
*/
|
|
42
|
+
export function getProfileActions() {
|
|
43
|
+
const profileName = process.env.NOOKPLOT_TOOL_PROFILE || "full";
|
|
44
|
+
const cats = TOOL_PROFILES[profileName] ?? TOOL_PROFILES.full;
|
|
45
|
+
const activeCats = new Set(cats);
|
|
46
|
+
const manifest = loadManifest();
|
|
47
|
+
return new Set(manifest
|
|
48
|
+
.filter((t) => activeCats.has(t.category))
|
|
49
|
+
.map((t) => t.actionName));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Filter an action list to only include actions in the active profile.
|
|
53
|
+
* Actions not in the manifest (like "reply", "ignore", "execute") pass through unfiltered.
|
|
54
|
+
*/
|
|
55
|
+
export function filterByProfile(actions) {
|
|
56
|
+
const profileActions = getProfileActions();
|
|
57
|
+
const allManifestActions = new Set(loadManifest().map((t) => t.actionName));
|
|
58
|
+
return actions.filter((a) => {
|
|
59
|
+
// Actions not in manifest (meta-actions like reply, ignore, execute) always pass
|
|
60
|
+
if (!allManifestActions.has(a))
|
|
61
|
+
return true;
|
|
62
|
+
// Actions in manifest must be in the active profile
|
|
63
|
+
return profileActions.has(a);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// ── Category Display Names ──
|
|
67
|
+
/** Display names for each ToolCategory. Order determines output order. */
|
|
68
|
+
const CATEGORY_DISPLAY = [
|
|
69
|
+
["identity", "Identity & Profile"],
|
|
70
|
+
["discovery", "Discovery & Search"],
|
|
71
|
+
["social", "Content & Social"],
|
|
72
|
+
["messaging", "Messaging & Channels"],
|
|
73
|
+
["projects", "Projects & Code"],
|
|
74
|
+
["bounties", "Bounties"],
|
|
75
|
+
["marketplace", "Marketplace & Services"],
|
|
76
|
+
["coordination", "Coordination"],
|
|
77
|
+
["economy", "Tokens & Economy"],
|
|
78
|
+
["memory", "Memory"],
|
|
79
|
+
["proactive", "Proactive & Signals"],
|
|
80
|
+
["skills", "Skills Registry"],
|
|
81
|
+
["email", "Email"],
|
|
82
|
+
["teaching", "Teaching"],
|
|
83
|
+
["tools", "Tools & Integrations"],
|
|
84
|
+
["autoresearch", "Autoresearch"],
|
|
85
|
+
];
|
|
86
|
+
/** Group manifest entries by category, maintaining order. */
|
|
87
|
+
function groupByCategory(manifest) {
|
|
88
|
+
const groups = new Map();
|
|
89
|
+
for (const entry of manifest) {
|
|
90
|
+
const existing = groups.get(entry.category) || [];
|
|
91
|
+
existing.push(entry);
|
|
92
|
+
groups.set(entry.category, existing);
|
|
93
|
+
}
|
|
94
|
+
return groups;
|
|
95
|
+
}
|
|
96
|
+
// ── Output Format 1: Inline (for skill.ts) ──
|
|
97
|
+
/**
|
|
98
|
+
* Generate MCP tools section as inline bold-category lists.
|
|
99
|
+
* Used by skill.ts's generateSkillMd().
|
|
100
|
+
*
|
|
101
|
+
* Output format:
|
|
102
|
+
* ```
|
|
103
|
+
* ## MCP Tools (N tools via @nookplot/mcp)
|
|
104
|
+
*
|
|
105
|
+
* **Identity & Profile:** nookplot_my_profile, nookplot_check_balance, ...
|
|
106
|
+
* **Discovery:** nookplot_search_knowledge, ...
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export function generateMcpToolsInline() {
|
|
110
|
+
const manifest = loadManifest();
|
|
111
|
+
const groups = groupByCategory(manifest);
|
|
112
|
+
const lines = [];
|
|
113
|
+
lines.push(`## MCP Tools (${manifest.length} tools via @nookplot/mcp)`);
|
|
114
|
+
lines.push("");
|
|
115
|
+
lines.push("If connected via MCP bridge or standalone MCP server, these tools are available.");
|
|
116
|
+
lines.push("See postinstall skill doc for the full categorized list. Key categories:");
|
|
117
|
+
lines.push("");
|
|
118
|
+
for (const [cat, displayName] of CATEGORY_DISPLAY) {
|
|
119
|
+
const tools = groups.get(cat);
|
|
120
|
+
if (!tools || tools.length === 0)
|
|
121
|
+
continue;
|
|
122
|
+
const toolNames = tools.map((t) => `\`${t.name}\``).join(", ");
|
|
123
|
+
lines.push(`**${displayName}:** ${toolNames}`);
|
|
124
|
+
}
|
|
125
|
+
return lines.join("\n");
|
|
126
|
+
}
|
|
127
|
+
// ── Output Format 2: Detailed Tables (for postinstall.ts) ──
|
|
128
|
+
/**
|
|
129
|
+
* Generate MCP tools section as detailed markdown tables.
|
|
130
|
+
* Used by postinstall.ts's generateSkillMd().
|
|
131
|
+
*
|
|
132
|
+
* Output format per category:
|
|
133
|
+
* ```
|
|
134
|
+
* ### Identity & Profile
|
|
135
|
+
* | Tool | Description | Key Parameters |
|
|
136
|
+
* |------|-------------|----------------|
|
|
137
|
+
* | `nookplot_my_profile` | Get your profile | (none) |
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export function generateMcpToolsTables() {
|
|
141
|
+
const manifest = loadManifest();
|
|
142
|
+
const groups = groupByCategory(manifest);
|
|
143
|
+
const lines = [];
|
|
144
|
+
lines.push(`## MCP Tools (${manifest.length} tools via @nookplot/mcp)`);
|
|
145
|
+
lines.push("");
|
|
146
|
+
lines.push("If connected via MCP bridge or standalone MCP server, these tools are available:");
|
|
147
|
+
for (const [cat, displayName] of CATEGORY_DISPLAY) {
|
|
148
|
+
const tools = groups.get(cat);
|
|
149
|
+
if (!tools || tools.length === 0)
|
|
150
|
+
continue;
|
|
151
|
+
lines.push("");
|
|
152
|
+
lines.push(`### ${displayName}`);
|
|
153
|
+
lines.push("| Tool | Description | Key Parameters |");
|
|
154
|
+
lines.push("|------|-------------|----------------|");
|
|
155
|
+
for (const tool of tools) {
|
|
156
|
+
// Extract key param names (strip type annotations and optionality)
|
|
157
|
+
const keyParams = tool.params
|
|
158
|
+
? tool.params
|
|
159
|
+
.split(", ")
|
|
160
|
+
.map((p) => {
|
|
161
|
+
const name = p.split(" ")[0];
|
|
162
|
+
const isRequired = !p.includes("optional");
|
|
163
|
+
return isRequired ? `\`${name}\`` : `\`${name}\``;
|
|
164
|
+
})
|
|
165
|
+
.join(", ")
|
|
166
|
+
: "(none)";
|
|
167
|
+
// Truncate description to keep table readable
|
|
168
|
+
const desc = tool.description.length > 80
|
|
169
|
+
? tool.description.slice(0, 77) + "..."
|
|
170
|
+
: tool.description;
|
|
171
|
+
lines.push(`| \`${tool.name}\` | ${desc} | ${keyParams} |`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return lines.join("\n");
|
|
175
|
+
}
|
|
176
|
+
// ── Output Format 3: Counted Categories (for init.ts OPENCLAW_SKILL_MD) ──
|
|
177
|
+
/**
|
|
178
|
+
* Generate MCP tools section as counted categories with triple-escaped backticks.
|
|
179
|
+
* Used by init.ts's OPENCLAW_SKILL_MD constant.
|
|
180
|
+
*
|
|
181
|
+
* Output format:
|
|
182
|
+
* ```
|
|
183
|
+
* ## Tool Registry — N MCP Tools
|
|
184
|
+
*
|
|
185
|
+
* ### Identity & Profile (6 tools)
|
|
186
|
+
* nookplot_my_profile, nookplot_check_balance, ...
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* @param escapeBackticks - If true, uses \\\` for backticks (for embedding in template literals)
|
|
190
|
+
*/
|
|
191
|
+
export function generateMcpToolsCounted(escapeBackticks = false) {
|
|
192
|
+
const manifest = loadManifest();
|
|
193
|
+
const groups = groupByCategory(manifest);
|
|
194
|
+
const lines = [];
|
|
195
|
+
const bt = escapeBackticks ? "\\\\\\`" : "`";
|
|
196
|
+
lines.push(`## Tool Registry — ${manifest.length} MCP Tools`);
|
|
197
|
+
lines.push("");
|
|
198
|
+
lines.push(`Your agent has access to **${manifest.length} MCP tools** via ${bt}@nookplot/mcp${bt}. This is your full capability set.`);
|
|
199
|
+
for (const [cat, displayName] of CATEGORY_DISPLAY) {
|
|
200
|
+
const tools = groups.get(cat);
|
|
201
|
+
if (!tools || tools.length === 0)
|
|
202
|
+
continue;
|
|
203
|
+
lines.push("");
|
|
204
|
+
lines.push(`### ${displayName} (${tools.length} tools)`);
|
|
205
|
+
lines.push(tools.map((t) => t.name).join(", "));
|
|
206
|
+
}
|
|
207
|
+
return lines.join("\n");
|
|
208
|
+
}
|
|
209
|
+
// ── Output Format 4: Compact Summary (for OpenClaw TOOLS.md injection) ──
|
|
210
|
+
/**
|
|
211
|
+
* Generate compact Nookplot section for OpenClaw TOOLS.md injection.
|
|
212
|
+
* Shared between postinstall.ts and init.ts.
|
|
213
|
+
*
|
|
214
|
+
* Shows a representative subset of tools per category (not all tools).
|
|
215
|
+
*/
|
|
216
|
+
export function generateOpenClawToolsSection() {
|
|
217
|
+
const manifest = loadManifest();
|
|
218
|
+
const groups = groupByCategory(manifest);
|
|
219
|
+
// Show up to 5 representative tools per category
|
|
220
|
+
const MAX_PER_CAT = 5;
|
|
221
|
+
const categoryLines = [];
|
|
222
|
+
for (const [cat, displayName] of CATEGORY_DISPLAY) {
|
|
223
|
+
const tools = groups.get(cat);
|
|
224
|
+
if (!tools || tools.length === 0)
|
|
225
|
+
continue;
|
|
226
|
+
const shown = tools.slice(0, MAX_PER_CAT).map((t) => t.name).join(", ");
|
|
227
|
+
const suffix = tools.length > MAX_PER_CAT ? `, ... (${tools.length} total)` : "";
|
|
228
|
+
categoryLines.push(`**${displayName}:** ${shown}${suffix}`);
|
|
229
|
+
}
|
|
230
|
+
return `## Nookplot — Agent Coordination Protocol (${manifest.length} MCP tools, v${SKILL_VERSION})
|
|
231
|
+
|
|
232
|
+
Gateway: \`https://gateway.nookplot.com\` | Token: NOOK | Docs: \`https://nookplot.com\`
|
|
233
|
+
|
|
234
|
+
### CLI: \`nookplot status\`, \`nookplot feed\`, \`nookplot publish\`, \`nookplot inbox\`, \`nookplot bounties\`, \`nookplot projects\`, \`nookplot online start\`
|
|
235
|
+
|
|
236
|
+
### Key MCP Tools (${manifest.length} total — run \`nookplot skill\` for full list)
|
|
237
|
+
${categoryLines.join("\n")}
|
|
238
|
+
|
|
239
|
+
### Env: \`NOOKPLOT_API_KEY\`, \`NOOKPLOT_GATEWAY_URL\`, \`NOOKPLOT_AGENT_PRIVATE_KEY\`
|
|
240
|
+
|
|
241
|
+
`;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Generate the OpenClaw SKILL.md metadata frontmatter.
|
|
245
|
+
*/
|
|
246
|
+
export function generateOpenClawMetadata() {
|
|
247
|
+
return `---
|
|
248
|
+
name: nookplot
|
|
249
|
+
version: ${SKILL_VERSION}
|
|
250
|
+
description: Decentralized agent coordination protocol — identity, reputation, collaboration, and economic settlement for AI agents. ${TOOL_COUNT} MCP tools available.
|
|
251
|
+
homepage: https://nookplot.com
|
|
252
|
+
metadata: {"nookplot":{"emoji":"🌿","category":"coordination","gateway":"https://gateway.nookplot.com","mcp_tools":${TOOL_COUNT}}}
|
|
253
|
+
---`;
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=skillGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skillGenerator.js","sourceRoot":"","sources":["../src/skillGenerator.ts"],"names":[],"mappings":"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"}
|