@dlnk/cli 0.3.0 → 0.5.0
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/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +161 -0
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +2 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +131 -0
- package/dist/init.js.map +1 -0
- package/dist/license.d.ts +8 -12
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +186 -121
- package/dist/license.js.map +1 -1
- package/dist/mcp.d.ts +31 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +159 -0
- package/dist/mcp.js.map +1 -0
- package/dist/subagent.d.ts +37 -0
- package/dist/subagent.d.ts.map +1 -0
- package/dist/subagent.js +128 -0
- package/dist/subagent.js.map +1 -0
- package/dlnk-release.sh +87 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,WAAW,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA2ClD,CAAC;AAGF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,YAAY,CAAC,EAAE,aAAa,CAAC;CACzB,GACL,OAAO,CAAC,kBAAkB,CAAC,CA+D7B;AAGD,wBAAsB,QAAQ,CAC5B,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAC1C,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE,GACL,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,EAAE,CAAC,CAgBnE"}
|
package/dist/subagent.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SUB_AGENTS = void 0;
|
|
7
|
+
exports.runPipeline = runPipeline;
|
|
8
|
+
exports.runSwarm = runSwarm;
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const engine_js_1 = require("./engine.js");
|
|
11
|
+
const memory_js_1 = require("./memory.js");
|
|
12
|
+
// ── Predefined Sub-agent Roles ────────────────────────────────
|
|
13
|
+
exports.SUB_AGENTS = {
|
|
14
|
+
planner: {
|
|
15
|
+
id: 'planner',
|
|
16
|
+
name: 'Planner',
|
|
17
|
+
emoji: '🧠',
|
|
18
|
+
role: 'expert software architect and project planner',
|
|
19
|
+
systemContext: 'Break down complex tasks into clear, actionable steps. Output a numbered execution plan.',
|
|
20
|
+
},
|
|
21
|
+
coder: {
|
|
22
|
+
id: 'coder',
|
|
23
|
+
name: 'Coder',
|
|
24
|
+
emoji: '💻',
|
|
25
|
+
role: 'senior software engineer',
|
|
26
|
+
systemContext: 'Write clean, production-ready code. Always handle errors. Add comments for complex logic.',
|
|
27
|
+
},
|
|
28
|
+
reviewer: {
|
|
29
|
+
id: 'reviewer',
|
|
30
|
+
name: 'Reviewer',
|
|
31
|
+
emoji: '🔍',
|
|
32
|
+
role: 'senior code reviewer',
|
|
33
|
+
systemContext: 'Review code for bugs, security issues, performance, and best practices. Be specific.',
|
|
34
|
+
},
|
|
35
|
+
tester: {
|
|
36
|
+
id: 'tester',
|
|
37
|
+
name: 'Tester',
|
|
38
|
+
emoji: '🧪',
|
|
39
|
+
role: 'QA engineer',
|
|
40
|
+
systemContext: 'Write comprehensive tests. Cover edge cases, error cases, and happy paths.',
|
|
41
|
+
},
|
|
42
|
+
devops: {
|
|
43
|
+
id: 'devops',
|
|
44
|
+
name: 'DevOps',
|
|
45
|
+
emoji: '⚙️',
|
|
46
|
+
role: 'DevOps engineer',
|
|
47
|
+
systemContext: 'Handle deployment, CI/CD, Docker, environment configs, and infrastructure.',
|
|
48
|
+
},
|
|
49
|
+
researcher: {
|
|
50
|
+
id: 'researcher',
|
|
51
|
+
name: 'Researcher',
|
|
52
|
+
emoji: '🔎',
|
|
53
|
+
role: 'technical researcher',
|
|
54
|
+
systemContext: 'Search for information, summarize findings, and provide citations.',
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
// ── Sequential Multi-Agent Pipeline ───────────────────────────
|
|
58
|
+
async function runPipeline(masterTask, agentIds, options = {}) {
|
|
59
|
+
const cwd = options.cwd || process.cwd();
|
|
60
|
+
const sharedMemory = options.sharedMemory || new memory_js_1.MemoryManager(cwd);
|
|
61
|
+
const agentResults = [];
|
|
62
|
+
// Step 1: Planner breaks down the master task
|
|
63
|
+
let plan = masterTask;
|
|
64
|
+
if (agentIds.length > 1 && agentIds[0] !== 'planner') {
|
|
65
|
+
console.log(chalk_1.default.gray('\n 🧠 Orchestrator planning task decomposition...'));
|
|
66
|
+
const planResult = await (0, engine_js_1.runAgent)(`Break down this task into ${agentIds.length} subtasks for these agents: ${agentIds.join(', ')}.\nTask: ${masterTask}\n\nOutput a numbered list of subtasks, one per agent.`, {
|
|
67
|
+
cwd,
|
|
68
|
+
permissionMode: 'auto',
|
|
69
|
+
memory: new memory_js_1.MemoryManager(cwd),
|
|
70
|
+
});
|
|
71
|
+
plan = planResult.output;
|
|
72
|
+
}
|
|
73
|
+
// Step 2: Extract subtasks from plan (simple line parsing)
|
|
74
|
+
const planLines = plan.split('\n').filter(l => /^\d+\./.test(l.trim()));
|
|
75
|
+
const subtasks = planLines.length >= agentIds.length
|
|
76
|
+
? planLines.map(l => l.replace(/^\d+\.\s*/, '').trim())
|
|
77
|
+
: agentIds.map(() => masterTask); // fallback: same task for all
|
|
78
|
+
// Step 3: Run each agent with their subtask
|
|
79
|
+
for (let i = 0; i < agentIds.length; i++) {
|
|
80
|
+
const agentId = agentIds[i];
|
|
81
|
+
const agentDef = exports.SUB_AGENTS[agentId];
|
|
82
|
+
if (!agentDef)
|
|
83
|
+
continue;
|
|
84
|
+
const task = subtasks[i] || masterTask;
|
|
85
|
+
if (options.onAgentStart)
|
|
86
|
+
options.onAgentStart(agentDef, task);
|
|
87
|
+
// Inject previous results as context
|
|
88
|
+
const contextNote = agentResults.length > 0
|
|
89
|
+
? `\n\nPrevious agents' work:\n${agentResults.map(r => `[${r.agentId}]: ${r.result.output.slice(0, 500)}`).join('\n\n')}`
|
|
90
|
+
: '';
|
|
91
|
+
const result = await (0, engine_js_1.runAgent)(task + contextNote, {
|
|
92
|
+
cwd,
|
|
93
|
+
role: agentDef.role,
|
|
94
|
+
permissionMode: 'auto',
|
|
95
|
+
memory: sharedMemory,
|
|
96
|
+
onStep: (step) => {
|
|
97
|
+
if (options.onStep)
|
|
98
|
+
options.onStep(agentId, step.type, step.content);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
agentResults.push({ agentId, task, result });
|
|
102
|
+
// Add to shared memory
|
|
103
|
+
sharedMemory.addNote(`[${agentDef.emoji} ${agentDef.name}] completed: ${task.slice(0, 100)}`);
|
|
104
|
+
}
|
|
105
|
+
// Step 4: Summarize
|
|
106
|
+
const summary = agentResults
|
|
107
|
+
.map(r => `${exports.SUB_AGENTS[r.agentId]?.emoji || '•'} **${r.agentId}**: ${r.result.success ? '✓' : '✗'} (${r.result.iterations} steps)`)
|
|
108
|
+
.join('\n');
|
|
109
|
+
return { plan, agentResults, summary };
|
|
110
|
+
}
|
|
111
|
+
// ── Parallel Swarm (fire all agents simultaneously) ───────────
|
|
112
|
+
async function runSwarm(tasks, options = {}) {
|
|
113
|
+
const cwd = options.cwd || process.cwd();
|
|
114
|
+
const promises = tasks.map(({ agentId, task }) => {
|
|
115
|
+
const agentDef = exports.SUB_AGENTS[agentId];
|
|
116
|
+
return (0, engine_js_1.runAgent)(task, {
|
|
117
|
+
cwd,
|
|
118
|
+
role: agentDef?.role,
|
|
119
|
+
permissionMode: 'auto',
|
|
120
|
+
onStep: (step) => {
|
|
121
|
+
if (options.onStep)
|
|
122
|
+
options.onStep(agentId, step.type, step.content);
|
|
123
|
+
}
|
|
124
|
+
}).then(result => ({ agentId, task, result }));
|
|
125
|
+
});
|
|
126
|
+
return Promise.all(promises);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=subagent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"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"}
|
package/dlnk-release.sh
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# dlnk-release.sh — Local CI/CD replacement for GitHub Actions
|
|
3
|
+
# Usage: bash dlnk-release.sh [patch|minor|major]
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
PROJECT="/home/donla/projects/dlnk-cli"
|
|
7
|
+
REPO="MutiAgentic/Dlnk"
|
|
8
|
+
NPM_TOKEN="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"
|
|
9
|
+
|
|
10
|
+
cd "$PROJECT"
|
|
11
|
+
|
|
12
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
13
|
+
echo " dLNk Release Pipeline"
|
|
14
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
15
|
+
|
|
16
|
+
# ── 1. Bump version ──────────────────────────────────────────
|
|
17
|
+
BUMP=${1:-patch}
|
|
18
|
+
CURRENT=$(node -p "require('./package.json').version")
|
|
19
|
+
|
|
20
|
+
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT"
|
|
21
|
+
case "$BUMP" in
|
|
22
|
+
major) MAJOR=$((MAJOR+1)); MINOR=0; PATCH=0 ;;
|
|
23
|
+
minor) MINOR=$((MINOR+1)); PATCH=0 ;;
|
|
24
|
+
patch) PATCH=$((PATCH+1)) ;;
|
|
25
|
+
esac
|
|
26
|
+
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
|
|
27
|
+
|
|
28
|
+
python3 -c "
|
|
29
|
+
import json
|
|
30
|
+
with open('package.json') as f: d = json.load(f)
|
|
31
|
+
d['version'] = '$NEW_VERSION'
|
|
32
|
+
with open('package.json', 'w') as f: json.dump(d, f, indent=2)
|
|
33
|
+
"
|
|
34
|
+
echo "✓ Version: $CURRENT → $NEW_VERSION"
|
|
35
|
+
|
|
36
|
+
# ── 2. Build TypeScript ──────────────────────────────────────
|
|
37
|
+
echo "⚡ Building TypeScript..."
|
|
38
|
+
npm run build
|
|
39
|
+
echo "✓ Build complete"
|
|
40
|
+
|
|
41
|
+
# ── 3. Package binaries ──────────────────────────────────────
|
|
42
|
+
echo "📦 Packaging binaries..."
|
|
43
|
+
npx pkg dist/index.js \
|
|
44
|
+
--targets node18-linux-x64,node18-win-x64 \
|
|
45
|
+
--output bin/dlnk \
|
|
46
|
+
2>&1 | grep -v "^>" | grep -v "Warning" || true
|
|
47
|
+
echo "✓ Binaries: $(ls -lh bin/ | grep dlnk | awk '{print $5, $9}' | tr '\n' ' ')"
|
|
48
|
+
|
|
49
|
+
# ── 4. Git commit + tag ──────────────────────────────────────
|
|
50
|
+
echo "📝 Committing..."
|
|
51
|
+
# Remove npmrc before commit
|
|
52
|
+
echo "" > .npmrc
|
|
53
|
+
git add -A
|
|
54
|
+
git commit -m "release: v$NEW_VERSION" --allow-empty
|
|
55
|
+
|
|
56
|
+
# Rewrite to strip any accidental secrets
|
|
57
|
+
git filter-branch --force --index-filter \
|
|
58
|
+
'git rm --cached --ignore-unmatch .npmrc' \
|
|
59
|
+
--prune-empty --tag-name-filter cat -- HEAD 2>&1 | grep -v "^Ref" || true
|
|
60
|
+
|
|
61
|
+
git tag "v$NEW_VERSION"
|
|
62
|
+
git push origin main --force --tags 2>&1 | grep -E "->|error" | head -5
|
|
63
|
+
echo "✓ Pushed to GitHub"
|
|
64
|
+
|
|
65
|
+
# ── 5. GitHub Release ────────────────────────────────────────
|
|
66
|
+
echo "🚀 Creating GitHub Release..."
|
|
67
|
+
gh release create "v$NEW_VERSION" \
|
|
68
|
+
bin/dlnk-linux \
|
|
69
|
+
bin/dlnk-win.exe \
|
|
70
|
+
--repo "$REPO" \
|
|
71
|
+
--title "dLNk CLI v$NEW_VERSION" \
|
|
72
|
+
--generate-notes 2>&1 | tail -2
|
|
73
|
+
echo "✓ GitHub Release created"
|
|
74
|
+
|
|
75
|
+
# ── 6. npm publish ───────────────────────────────────────────
|
|
76
|
+
echo "📤 Publishing to npm..."
|
|
77
|
+
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc
|
|
78
|
+
npm publish --access public 2>&1 | grep -E "^\+|error" | head -3
|
|
79
|
+
echo "" > .npmrc
|
|
80
|
+
echo "✓ npm published"
|
|
81
|
+
|
|
82
|
+
echo ""
|
|
83
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
84
|
+
echo " ✅ Released v$NEW_VERSION"
|
|
85
|
+
echo " npm: https://www.npmjs.com/package/@dlnk/cli"
|
|
86
|
+
echo " gh: https://github.com/$REPO/releases/tag/v$NEW_VERSION"
|
|
87
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|