@nookplot/cli 0.7.11 → 0.7.15
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/channels.js +10 -10
- package/dist/commands/gpu.js +82 -82
- package/dist/commands/inbox.js +8 -8
- package/dist/commands/init.js +445 -445
- package/dist/commands/listen.js +1 -1
- package/dist/commands/listen.js.map +1 -1
- package/dist/commands/mine.d.ts +21 -0
- package/dist/commands/mine.js +220 -0
- package/dist/commands/mine.js.map +1 -0
- package/dist/commands/online.js +1 -1
- package/dist/commands/online.js.map +1 -1
- package/dist/commands/proactive.js +16 -16
- package/dist/commands/profile.js +17 -17
- package/dist/commands/skill.js +382 -382
- package/dist/evalManifest.json +27 -27
- package/dist/index.js +16 -14
- package/dist/index.js.map +1 -1
- package/dist/postinstall.js +189 -189
- package/dist/skillGenerator.d.ts +1 -1
- package/dist/skillGenerator.js +18 -18
- package/dist/tool-manifest.json +4548 -4360
- package/dist/utils/miningCapabilities.d.ts +59 -0
- package/dist/utils/miningCapabilities.js +176 -0
- package/dist/utils/miningCapabilities.js.map +1 -0
- package/dist/utils/skills.js +12 -12
- package/package.json +2 -2
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mining capability detection for `nookplot mine`.
|
|
3
|
+
*
|
|
4
|
+
* Probes the local environment to determine which mining tracks are eligible:
|
|
5
|
+
* - knowledge: any reasoning LLM (Anthropic / OpenAI / local Ollama)
|
|
6
|
+
* - embedding: Ollama with nomic-embed-text installed
|
|
7
|
+
* - rlm: reasoning LLM + Python sandbox (E2B/local interpreter)
|
|
8
|
+
* - gradient: GPU presence (informational only — no solver yet)
|
|
9
|
+
*
|
|
10
|
+
* Detection runs on `nookplot mine` startup, on SIGHUP (manual re-detect),
|
|
11
|
+
* and every {@link CAPABILITY_REFRESH_INTERVAL_MS} thereafter so the loop
|
|
12
|
+
* picks up newly-installed Ollama models / rotated keys without restart.
|
|
13
|
+
*
|
|
14
|
+
* @module utils/miningCapabilities
|
|
15
|
+
*/
|
|
16
|
+
export type MiningTrack = "knowledge" | "embedding" | "rlm" | "gradient";
|
|
17
|
+
export interface MiningCapability {
|
|
18
|
+
track: MiningTrack;
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
reason?: string;
|
|
21
|
+
/** Detected provider that satisfied this capability (if enabled). */
|
|
22
|
+
provider?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Capability re-detection cadence (1h). SIGHUP forces immediate re-detect. */
|
|
25
|
+
export declare const CAPABILITY_REFRESH_INTERVAL_MS: number;
|
|
26
|
+
/**
|
|
27
|
+
* Detect all four mining capabilities. Pure function (no side effects beyond
|
|
28
|
+
* network probes). Safe to call repeatedly; each call re-probes everything.
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectCapabilities(): Promise<MiningCapability[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Convenience: returns true if any mining track is enabled. The loop should
|
|
33
|
+
* exit early when this is false rather than burning CPU on a doomed loop.
|
|
34
|
+
*/
|
|
35
|
+
export declare function anyEnabled(caps: MiningCapability[]): boolean;
|
|
36
|
+
/** Filter to enabled capabilities, preserving order. */
|
|
37
|
+
export declare function enabledTracks(caps: MiningCapability[]): MiningTrack[];
|
|
38
|
+
/**
|
|
39
|
+
* Returns the first reasoning provider available, or null if none. Order:
|
|
40
|
+
* 1. ANTHROPIC_API_KEY
|
|
41
|
+
* 2. OPENAI_API_KEY
|
|
42
|
+
* 3. Ollama with a model in REASONING_MODEL_PREFIXES
|
|
43
|
+
*/
|
|
44
|
+
export declare function detectReasoningProvider(): Promise<string | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Returns the list of Ollama-installed model names, or [] if Ollama is not
|
|
47
|
+
* running. Never throws — a 2s timeout protects against slow boots.
|
|
48
|
+
*/
|
|
49
|
+
export declare function listOllamaModels(): Promise<string[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Returns true if `python3` is in PATH and runs. Exit code is the only
|
|
52
|
+
* signal — we don't care about the version string.
|
|
53
|
+
*/
|
|
54
|
+
export declare function hasPython(): Promise<boolean>;
|
|
55
|
+
/**
|
|
56
|
+
* Returns a short identifier of detected GPU vendor or null. The gradient
|
|
57
|
+
* track ships disabled regardless — this is purely UI signal.
|
|
58
|
+
*/
|
|
59
|
+
export declare function detectGpu(): Promise<string | null>;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mining capability detection for `nookplot mine`.
|
|
3
|
+
*
|
|
4
|
+
* Probes the local environment to determine which mining tracks are eligible:
|
|
5
|
+
* - knowledge: any reasoning LLM (Anthropic / OpenAI / local Ollama)
|
|
6
|
+
* - embedding: Ollama with nomic-embed-text installed
|
|
7
|
+
* - rlm: reasoning LLM + Python sandbox (E2B/local interpreter)
|
|
8
|
+
* - gradient: GPU presence (informational only — no solver yet)
|
|
9
|
+
*
|
|
10
|
+
* Detection runs on `nookplot mine` startup, on SIGHUP (manual re-detect),
|
|
11
|
+
* and every {@link CAPABILITY_REFRESH_INTERVAL_MS} thereafter so the loop
|
|
12
|
+
* picks up newly-installed Ollama models / rotated keys without restart.
|
|
13
|
+
*
|
|
14
|
+
* @module utils/miningCapabilities
|
|
15
|
+
*/
|
|
16
|
+
import { spawn } from "node:child_process";
|
|
17
|
+
import { platform } from "node:os";
|
|
18
|
+
/** Capability re-detection cadence (1h). SIGHUP forces immediate re-detect. */
|
|
19
|
+
export const CAPABILITY_REFRESH_INTERVAL_MS = 60 * 60 * 1000;
|
|
20
|
+
/** Ollama default port. */
|
|
21
|
+
const OLLAMA_BASE = "http://127.0.0.1:11434";
|
|
22
|
+
/** Models that count as "reasoning-capable" for knowledge / RLM tracks. */
|
|
23
|
+
const REASONING_MODEL_PREFIXES = [
|
|
24
|
+
"hermes", "llama3", "qwen", "mistral", "deepseek",
|
|
25
|
+
"phi", "gemma", "command", "yi", "mixtral",
|
|
26
|
+
];
|
|
27
|
+
/** Embedding models the embedding track can use. */
|
|
28
|
+
const EMBEDDING_MODELS = ["nomic-embed-text"];
|
|
29
|
+
// ── Public API ──────────────────────────────────────────────────────────
|
|
30
|
+
/**
|
|
31
|
+
* Detect all four mining capabilities. Pure function (no side effects beyond
|
|
32
|
+
* network probes). Safe to call repeatedly; each call re-probes everything.
|
|
33
|
+
*/
|
|
34
|
+
export async function detectCapabilities() {
|
|
35
|
+
const reasoning = await detectReasoningProvider();
|
|
36
|
+
const ollamaModels = await listOllamaModels();
|
|
37
|
+
const embeddingModel = ollamaModels.find((m) => EMBEDDING_MODELS.some((e) => m.startsWith(e)));
|
|
38
|
+
const pythonAvailable = await hasPython();
|
|
39
|
+
const gpu = await detectGpu();
|
|
40
|
+
const knowledge = reasoning
|
|
41
|
+
? { track: "knowledge", enabled: true, provider: reasoning }
|
|
42
|
+
: { track: "knowledge", enabled: false, reason: "No LLM available — set ANTHROPIC_API_KEY, OPENAI_API_KEY, or run Ollama with a reasoning model" };
|
|
43
|
+
const embedding = embeddingModel
|
|
44
|
+
? { track: "embedding", enabled: true, provider: `ollama (${embeddingModel})` }
|
|
45
|
+
: { track: "embedding", enabled: false, reason: "Run: ollama pull nomic-embed-text" };
|
|
46
|
+
const rlm = !reasoning
|
|
47
|
+
? { track: "rlm", enabled: false, reason: "RLM needs an LLM — set ANTHROPIC_API_KEY, OPENAI_API_KEY, or run Ollama" }
|
|
48
|
+
: !pythonAvailable
|
|
49
|
+
? { track: "rlm", enabled: false, reason: "RLM needs Python 3 in PATH for sandbox execution" }
|
|
50
|
+
: { track: "rlm", enabled: true, provider: `${reasoning} + python` };
|
|
51
|
+
const gradient = gpu
|
|
52
|
+
? { track: "gradient", enabled: false, reason: "GPU detected — gradient mining solver coming in a future phase", provider: gpu }
|
|
53
|
+
: { track: "gradient", enabled: false, reason: "No GPU detected" };
|
|
54
|
+
return [knowledge, embedding, rlm, gradient];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Convenience: returns true if any mining track is enabled. The loop should
|
|
58
|
+
* exit early when this is false rather than burning CPU on a doomed loop.
|
|
59
|
+
*/
|
|
60
|
+
export function anyEnabled(caps) {
|
|
61
|
+
return caps.some((c) => c.enabled);
|
|
62
|
+
}
|
|
63
|
+
/** Filter to enabled capabilities, preserving order. */
|
|
64
|
+
export function enabledTracks(caps) {
|
|
65
|
+
return caps.filter((c) => c.enabled).map((c) => c.track);
|
|
66
|
+
}
|
|
67
|
+
// ── Reasoning provider detection (env vars + Ollama) ─────────────────────
|
|
68
|
+
/**
|
|
69
|
+
* Returns the first reasoning provider available, or null if none. Order:
|
|
70
|
+
* 1. ANTHROPIC_API_KEY
|
|
71
|
+
* 2. OPENAI_API_KEY
|
|
72
|
+
* 3. Ollama with a model in REASONING_MODEL_PREFIXES
|
|
73
|
+
*/
|
|
74
|
+
export async function detectReasoningProvider() {
|
|
75
|
+
if (process.env.ANTHROPIC_API_KEY)
|
|
76
|
+
return "anthropic";
|
|
77
|
+
if (process.env.OPENAI_API_KEY)
|
|
78
|
+
return "openai";
|
|
79
|
+
const models = await listOllamaModels();
|
|
80
|
+
for (const m of models) {
|
|
81
|
+
if (REASONING_MODEL_PREFIXES.some((p) => m.toLowerCase().includes(p))) {
|
|
82
|
+
return `ollama (${m})`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
// ── Ollama probe ─────────────────────────────────────────────────────────
|
|
88
|
+
/**
|
|
89
|
+
* Returns the list of Ollama-installed model names, or [] if Ollama is not
|
|
90
|
+
* running. Never throws — a 2s timeout protects against slow boots.
|
|
91
|
+
*/
|
|
92
|
+
export async function listOllamaModels() {
|
|
93
|
+
try {
|
|
94
|
+
const controller = new AbortController();
|
|
95
|
+
const timeout = setTimeout(() => controller.abort(), 2000);
|
|
96
|
+
const res = await fetch(`${OLLAMA_BASE}/api/tags`, { signal: controller.signal });
|
|
97
|
+
clearTimeout(timeout);
|
|
98
|
+
if (!res.ok)
|
|
99
|
+
return [];
|
|
100
|
+
const body = (await res.json());
|
|
101
|
+
return (body.models ?? []).map((m) => m.name);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ── Python sandbox probe ─────────────────────────────────────────────────
|
|
108
|
+
/**
|
|
109
|
+
* Returns true if `python3` is in PATH and runs. Exit code is the only
|
|
110
|
+
* signal — we don't care about the version string.
|
|
111
|
+
*/
|
|
112
|
+
export async function hasPython() {
|
|
113
|
+
return runWithExitCode("python3", ["--version"], 1500);
|
|
114
|
+
}
|
|
115
|
+
// ── GPU probe (informational) ────────────────────────────────────────────
|
|
116
|
+
/**
|
|
117
|
+
* Returns a short identifier of detected GPU vendor or null. The gradient
|
|
118
|
+
* track ships disabled regardless — this is purely UI signal.
|
|
119
|
+
*/
|
|
120
|
+
export async function detectGpu() {
|
|
121
|
+
const os = platform();
|
|
122
|
+
if (os === "darwin") {
|
|
123
|
+
// Apple silicon — `system_profiler SPDisplaysDataType` lists GPU. Quicker:
|
|
124
|
+
// assume any darwin host has at least integrated GPU. We treat M1/M2/M3
|
|
125
|
+
// as detected because Metal is always present.
|
|
126
|
+
return process.arch === "arm64" ? "apple-silicon" : null;
|
|
127
|
+
}
|
|
128
|
+
if (os === "linux" || os === "win32") {
|
|
129
|
+
if (await runWithExitCode("nvidia-smi", ["--query-gpu=name", "--format=csv,noheader"], 1500)) {
|
|
130
|
+
return "nvidia";
|
|
131
|
+
}
|
|
132
|
+
if (await runWithExitCode("rocminfo", ["--noversion"], 1500)) {
|
|
133
|
+
return "amd";
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
// ── Helpers ──────────────────────────────────────────────────────────────
|
|
139
|
+
function runWithExitCode(cmd, args, timeoutMs) {
|
|
140
|
+
return new Promise((resolve) => {
|
|
141
|
+
let settled = false;
|
|
142
|
+
let child;
|
|
143
|
+
try {
|
|
144
|
+
child = spawn(cmd, args, { stdio: "ignore" });
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
resolve(false);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const timeout = setTimeout(() => {
|
|
151
|
+
if (!settled) {
|
|
152
|
+
settled = true;
|
|
153
|
+
try {
|
|
154
|
+
child.kill("SIGKILL");
|
|
155
|
+
}
|
|
156
|
+
catch { /* ignore */ }
|
|
157
|
+
resolve(false);
|
|
158
|
+
}
|
|
159
|
+
}, timeoutMs);
|
|
160
|
+
child.on("error", () => {
|
|
161
|
+
if (settled)
|
|
162
|
+
return;
|
|
163
|
+
settled = true;
|
|
164
|
+
clearTimeout(timeout);
|
|
165
|
+
resolve(false);
|
|
166
|
+
});
|
|
167
|
+
child.on("exit", (code) => {
|
|
168
|
+
if (settled)
|
|
169
|
+
return;
|
|
170
|
+
settled = true;
|
|
171
|
+
clearTimeout(timeout);
|
|
172
|
+
resolve(code === 0);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=miningCapabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"miningCapabilities.js","sourceRoot":"","sources":["../../src/utils/miningCapabilities.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/skills.js
CHANGED
|
@@ -223,18 +223,18 @@ export function extractCapabilities(skills) {
|
|
|
223
223
|
* Generate a starter skills.yaml content string.
|
|
224
224
|
*/
|
|
225
225
|
export function generateStarterSkillsYaml() {
|
|
226
|
-
return `# skills.yaml — Declarative skill definitions for your Nookplot agent
|
|
227
|
-
#
|
|
228
|
-
# Each skill becomes a marketplace listing and updates your agent's profile.
|
|
229
|
-
# Run \`nookplot skills sync\` to publish changes to the network.
|
|
230
|
-
|
|
231
|
-
skills:
|
|
232
|
-
- name: example-skill
|
|
233
|
-
description: "Describe what this skill does"
|
|
234
|
-
category: ai
|
|
235
|
-
# price: "0.50" # USDC per task (optional — omit for free)
|
|
236
|
-
# pricingModel: per-task # per-task | hourly | subscription | custom
|
|
237
|
-
tags: [example]
|
|
226
|
+
return `# skills.yaml — Declarative skill definitions for your Nookplot agent
|
|
227
|
+
#
|
|
228
|
+
# Each skill becomes a marketplace listing and updates your agent's profile.
|
|
229
|
+
# Run \`nookplot skills sync\` to publish changes to the network.
|
|
230
|
+
|
|
231
|
+
skills:
|
|
232
|
+
- name: example-skill
|
|
233
|
+
description: "Describe what this skill does"
|
|
234
|
+
category: ai
|
|
235
|
+
# price: "0.50" # USDC per task (optional — omit for free)
|
|
236
|
+
# pricingModel: per-task # per-task | hourly | subscription | custom
|
|
237
|
+
tags: [example]
|
|
238
238
|
`;
|
|
239
239
|
}
|
|
240
240
|
//# sourceMappingURL=skills.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nookplot/cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.15",
|
|
4
4
|
"description": "CLI toolkit for NookPlot agent developers — scaffold, register, sync, and monitor agents",
|
|
5
5
|
"author": "nookplot",
|
|
6
6
|
"type": "module",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"postinstall": "node dist/postinstall.js 2>/dev/null || true"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@nookplot/runtime": "^0.5.
|
|
27
|
+
"@nookplot/runtime": "^0.5.118",
|
|
28
28
|
"chalk": "5.6.2",
|
|
29
29
|
"commander": "12.1.0",
|
|
30
30
|
"dotenv": "16.6.1",
|