@agentneeds/need 0.1.4 → 0.1.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/commands/init.js
CHANGED
|
@@ -5,6 +5,12 @@ function ensureDir(dirPath) {
|
|
|
5
5
|
fs.mkdirSync(dirPath, { recursive: true });
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
+
const CLAUDE_MD_MARKER = '<!-- need-tools -->';
|
|
9
|
+
const CLAUDE_MD_RULE = `${CLAUDE_MD_MARKER}
|
|
10
|
+
# Tool Discovery (need)
|
|
11
|
+
|
|
12
|
+
Before writing scripts or installing packages for common tasks (scraping, file conversion, data processing, image manipulation, etc.), search for existing CLI tools using the \`need\` MCP server's \`search_tools\` function. Install the best match with \`install_tool\`, then report success/failure with \`report_tool_usage\`. Only write custom code if no suitable tool exists.
|
|
13
|
+
${CLAUDE_MD_MARKER}`;
|
|
8
14
|
function getToolConfigs(cwd) {
|
|
9
15
|
const mcpInstructions = `When you need a CLI tool for a task, use \`need\` to find and install it:
|
|
10
16
|
|
|
@@ -15,7 +21,14 @@ function getToolConfigs(cwd) {
|
|
|
15
21
|
If you have access to MCP tools, prefer using \`search_tools\`, \`install_tool\`, and \`report_tool_usage\` from the \`need\` MCP server.`;
|
|
16
22
|
return [
|
|
17
23
|
{
|
|
18
|
-
name: 'Claude Code',
|
|
24
|
+
name: 'Claude Code (CLAUDE.md)',
|
|
25
|
+
filePath: path.join(cwd, 'CLAUDE.md'),
|
|
26
|
+
content: CLAUDE_MD_RULE,
|
|
27
|
+
append: true,
|
|
28
|
+
marker: CLAUDE_MD_MARKER,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'Claude Code (command)',
|
|
19
32
|
filePath: path.join(cwd, '.claude', 'commands', 'need.md'),
|
|
20
33
|
content: `---
|
|
21
34
|
description: Find and install CLI tools using need
|
|
@@ -60,7 +73,25 @@ export async function initCommand() {
|
|
|
60
73
|
const cwd = process.cwd();
|
|
61
74
|
const results = [];
|
|
62
75
|
for (const tool of getToolConfigs(cwd)) {
|
|
63
|
-
if (
|
|
76
|
+
if (tool.append && tool.marker) {
|
|
77
|
+
// Append mode: add to existing file or create, skip if marker present
|
|
78
|
+
if (fs.existsSync(tool.filePath)) {
|
|
79
|
+
const existing = fs.readFileSync(tool.filePath, 'utf-8');
|
|
80
|
+
if (existing.includes(tool.marker)) {
|
|
81
|
+
results.push({ name: tool.name, result: 'already exists', filePath: tool.filePath });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
fs.writeFileSync(tool.filePath, existing.trimEnd() + '\n\n' + tool.content + '\n', 'utf-8');
|
|
85
|
+
results.push({ name: tool.name, result: 'updated', filePath: tool.filePath });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
ensureDir(path.dirname(tool.filePath));
|
|
90
|
+
fs.writeFileSync(tool.filePath, tool.content + '\n', 'utf-8');
|
|
91
|
+
results.push({ name: tool.name, result: 'created', filePath: tool.filePath });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (fs.existsSync(tool.filePath)) {
|
|
64
95
|
results.push({ name: tool.name, result: 'already exists', filePath: tool.filePath });
|
|
65
96
|
}
|
|
66
97
|
else {
|
|
@@ -75,7 +106,7 @@ export async function initCommand() {
|
|
|
75
106
|
console.log(`\u2013 ${name} \u2014 already exists (${rel})`);
|
|
76
107
|
}
|
|
77
108
|
else {
|
|
78
|
-
console.log(`\u2713 ${name} \u2014
|
|
109
|
+
console.log(`\u2713 ${name} \u2014 ${result} (${rel})`);
|
|
79
110
|
}
|
|
80
111
|
}
|
|
81
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAYlC,SAAS,SAAS,CAAC,OAAe;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,cAAc,GAAG,GAAG,gBAAgB;;;;EAIxC,gBAAgB,EAAE,CAAC;AAErB,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,eAAe,GAAG;;;;;;0IAMgH,CAAC;IAEzI,OAAO;QACL;YACE,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;YACrC,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,gBAAgB;SACzB;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;YAC1D,OAAO,EAAE;;;;EAIb,eAAe;CAChB;SACI;QACD;YACE,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC;YACxD,OAAO,EAAE;;;;;;EAMb,eAAe;CAChB;SACI;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,yBAAyB,CAAC;YAC9D,OAAO,EAAE;;EAEb,eAAe;CAChB;SACI;QACD;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC;YACzD,OAAO,EAAE;;;;EAIb,eAAe;CAChB;SACI;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAkE,EAAE,CAAC;IAElF,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,sEAAsE;YACtE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvF,CAAC;qBAAM,CAAC;oBACN,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;oBAC5F,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACvC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;aAAM,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,2BAA2B,GAAG,GAAG,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -27,13 +27,37 @@ function configureMcpServer(filePath, key) {
|
|
|
27
27
|
fs.writeFileSync(filePath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
28
28
|
return 'configured';
|
|
29
29
|
}
|
|
30
|
+
const CLAUDE_MD_MARKER = '<!-- need-tools -->';
|
|
31
|
+
const CLAUDE_MD_RULE = `${CLAUDE_MD_MARKER}
|
|
32
|
+
# Tool Discovery (need)
|
|
33
|
+
|
|
34
|
+
Before writing scripts or installing packages for common tasks (scraping, file conversion, data processing, image manipulation, etc.), search for existing CLI tools using the \`need\` MCP server's \`search_tools\` function. Install the best match with \`install_tool\`, then report success/failure with \`report_tool_usage\`. Only write custom code if no suitable tool exists.
|
|
35
|
+
${CLAUDE_MD_MARKER}`;
|
|
36
|
+
function appendClaudeMd(filePath) {
|
|
37
|
+
if (fs.existsSync(filePath)) {
|
|
38
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
39
|
+
if (content.includes(CLAUDE_MD_MARKER)) {
|
|
40
|
+
return 'already configured';
|
|
41
|
+
}
|
|
42
|
+
fs.writeFileSync(filePath, content.trimEnd() + '\n\n' + CLAUDE_MD_RULE + '\n', 'utf-8');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
ensureDir(path.dirname(filePath));
|
|
46
|
+
fs.writeFileSync(filePath, CLAUDE_MD_RULE + '\n', 'utf-8');
|
|
47
|
+
}
|
|
48
|
+
return 'configured';
|
|
49
|
+
}
|
|
30
50
|
export async function setupCommand() {
|
|
31
51
|
const home = os.homedir();
|
|
32
52
|
const results = [];
|
|
33
|
-
// Claude Code
|
|
53
|
+
// Claude Code — MCP config
|
|
34
54
|
const claudeConfigPath = path.join(home, '.claude.json');
|
|
35
55
|
const claudeResult = configureMcpServer(claudeConfigPath, 'need');
|
|
36
|
-
results.push({ name: 'Claude Code', result: claudeResult });
|
|
56
|
+
results.push({ name: 'Claude Code (MCP)', result: claudeResult });
|
|
57
|
+
// Claude Code — global CLAUDE.md
|
|
58
|
+
const claudeMdPath = path.join(home, '.claude', 'CLAUDE.md');
|
|
59
|
+
const claudeMdResult = appendClaudeMd(claudeMdPath);
|
|
60
|
+
results.push({ name: 'Claude Code (instructions)', result: claudeMdResult });
|
|
37
61
|
// Cursor
|
|
38
62
|
const cursorDir = path.join(home, '.cursor');
|
|
39
63
|
if (fs.existsSync(cursorDir) && fs.statSync(cursorDir).isDirectory()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,CAAC;AAS3E,SAAS,SAAS,CAAC,OAAe;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,GAAW;IACvD,IAAI,MAAiB,CAAC;IAEtB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;QAEtC,IAAI,MAAM,CAAC,UAAU,IAAI,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClD,OAAO,oBAAoB,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,UAAW,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;IAErC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAmE,EAAE,CAAC;IAEnF,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|