@aidemd-mcp/server 0.3.1 → 0.3.3
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/.aide/docs/index.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
## Pipeline Agents
|
|
13
13
|
|
|
14
|
-
AIDE ships
|
|
14
|
+
AIDE ships nine canonical agents that `aide_init` installs to `.claude/agents/aide/`. Eight map to pipeline phases; one is a read-only investigator:
|
|
15
15
|
|
|
16
16
|
| Agent | Model | Phase(s) | Brain Access |
|
|
17
17
|
|---|---|---|---|
|
|
@@ -23,8 +23,9 @@ AIDE ships eight canonical agents that `aide_init` installs to `.claude/agents/a
|
|
|
23
23
|
| `aide-qa` | sonnet | qa | none |
|
|
24
24
|
| `aide-aligner` | opus | align | none |
|
|
25
25
|
| `aide-auditor` | opus | refactor | read (playbook + brain) |
|
|
26
|
+
| `aide-explorer` | sonnet | investigation (read-only) | read |
|
|
26
27
|
|
|
27
|
-
The orchestrator (`/aide`) delegates to these agents by name. Each agent gets fresh context per phase — handoff is via files (`.aide`, `plan.aide`, `todo.aide`), not conversation.
|
|
28
|
+
The orchestrator (`/aide`) delegates to these agents by name. Each agent gets fresh context per phase — handoff is via files (`.aide`, `plan.aide`, `todo.aide`), not conversation. The explorer is the exception: it is a non-pipeline agent used for bug tracing, codebase questions, and intent-tree navigation — it never writes files.
|
|
28
29
|
|
|
29
30
|
## Skills
|
|
30
31
|
|
|
@@ -47,7 +47,10 @@ export default function buildTree(files, root) {
|
|
|
47
47
|
const connector = isLastFile ? "└──" : "├──";
|
|
48
48
|
const name = basename(file.relativePath);
|
|
49
49
|
const tag = `[${file.type}]`;
|
|
50
|
-
const
|
|
50
|
+
const label = file.type === "intent" || file.type === "research"
|
|
51
|
+
? file.description || ""
|
|
52
|
+
: file.summary || "";
|
|
53
|
+
const summary = label ? ` — ${label}` : "";
|
|
51
54
|
lines.push(` ${connector} ${name} ${tag}${summary}`);
|
|
52
55
|
}
|
|
53
56
|
if (d < sortedDirs.length - 1)
|
|
@@ -33,6 +33,7 @@ declare const DOC_PATHS: {
|
|
|
33
33
|
readonly "agents/aide/aide-qa": ".claude/agents/aide/aide-qa.md";
|
|
34
34
|
readonly "agents/aide/aide-auditor": ".claude/agents/aide/aide-auditor.md";
|
|
35
35
|
readonly "agents/aide/aide-aligner": ".claude/agents/aide/aide-aligner.md";
|
|
36
|
+
readonly "agents/aide/aide-explorer": ".claude/agents/aide/aide-explorer.md";
|
|
36
37
|
readonly "commands/aide/align": ".claude/commands/aide/align.md";
|
|
37
38
|
readonly "cascading-alignment": ".aide/docs/cascading-alignment.md";
|
|
38
39
|
readonly "skills/study-playbook": ".claude/skills/study-playbook/SKILL.md";
|
|
@@ -57,6 +57,7 @@ const DOC_PATHS = {
|
|
|
57
57
|
"agents/aide/aide-qa": ".claude/agents/aide/aide-qa.md",
|
|
58
58
|
"agents/aide/aide-auditor": ".claude/agents/aide/aide-auditor.md",
|
|
59
59
|
"agents/aide/aide-aligner": ".claude/agents/aide/aide-aligner.md",
|
|
60
|
+
"agents/aide/aide-explorer": ".claude/agents/aide/aide-explorer.md",
|
|
60
61
|
"commands/aide/align": ".claude/commands/aide/align.md",
|
|
61
62
|
"cascading-alignment": ".aide/docs/cascading-alignment.md",
|
|
62
63
|
"skills/study-playbook": ".claude/skills/study-playbook/SKILL.md",
|
|
@@ -96,6 +97,7 @@ const AGENT_DOCS = [
|
|
|
96
97
|
{ canonical: "agents/aide/aide-qa", hostFilename: "aide/aide-qa.md" },
|
|
97
98
|
{ canonical: "agents/aide/aide-auditor", hostFilename: "aide/aide-auditor.md" },
|
|
98
99
|
{ canonical: "agents/aide/aide-aligner", hostFilename: "aide/aide-aligner.md" },
|
|
100
|
+
{ canonical: "agents/aide/aide-explorer", hostFilename: "aide/aide-explorer.md" },
|
|
99
101
|
];
|
|
100
102
|
/**
|
|
101
103
|
* The canonical list of skill templates that ship into the host's skill
|
package/dist/util/scan/index.js
CHANGED
|
@@ -3,31 +3,22 @@ import { join, relative } from "node:path";
|
|
|
3
3
|
import { classifyFile } from "../../util/classify/index.js";
|
|
4
4
|
import { SKIP_DIRS } from "../../types/index.js";
|
|
5
5
|
import parseFrontmatter from "../../util/parseFrontmatter/index.js";
|
|
6
|
-
/**
|
|
7
|
-
function
|
|
6
|
+
/** Count checked and total checkbox items in content. */
|
|
7
|
+
function countCheckboxes(content) {
|
|
8
8
|
const lines = content.split("\n");
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
let done = 0;
|
|
10
|
+
let total = 0;
|
|
11
|
+
for (const line of lines) {
|
|
12
|
+
const trimmed = line.trim();
|
|
13
|
+
if (trimmed.startsWith("- [x]") || trimmed.startsWith("- [X]")) {
|
|
14
|
+
done++;
|
|
15
|
+
total++;
|
|
16
|
+
}
|
|
17
|
+
else if (trimmed.startsWith("- [ ]")) {
|
|
18
|
+
total++;
|
|
18
19
|
}
|
|
19
|
-
bodyStart = closingIdx !== -1 ? closingIdx + 1 : lines.length;
|
|
20
|
-
}
|
|
21
|
-
// Find the first non-empty, non-heading line after frontmatter
|
|
22
|
-
for (let i = bodyStart; i < lines.length; i++) {
|
|
23
|
-
const line = lines[i].trim();
|
|
24
|
-
if (!line || line.startsWith("#"))
|
|
25
|
-
continue;
|
|
26
|
-
if (line.length <= 80)
|
|
27
|
-
return line;
|
|
28
|
-
return line.slice(0, 77) + "...";
|
|
29
20
|
}
|
|
30
|
-
return
|
|
21
|
+
return { done, total };
|
|
31
22
|
}
|
|
32
23
|
/** Normalize a Windows or mixed path to POSIX forward slashes. */
|
|
33
24
|
function toPosix(p) {
|
|
@@ -66,14 +57,18 @@ async function walk(dir, root, files, shallow) {
|
|
|
66
57
|
let summary = "";
|
|
67
58
|
let description = "";
|
|
68
59
|
let status;
|
|
60
|
+
const type = classifyFile(entry.name);
|
|
69
61
|
if (!shallow) {
|
|
70
62
|
try {
|
|
71
63
|
const buf = await readFile(fullPath, { encoding: "utf-8" });
|
|
72
|
-
summary = extractSummary(buf.slice(0, 1000));
|
|
73
64
|
const { frontmatter } = parseFrontmatter(buf);
|
|
74
65
|
description = deriveDescription(frontmatter);
|
|
75
66
|
if (frontmatter?.status)
|
|
76
67
|
status = frontmatter.status;
|
|
68
|
+
if (type === "plan" || type === "todo") {
|
|
69
|
+
const { done, total } = countCheckboxes(buf);
|
|
70
|
+
summary = total > 0 ? `${done}/${total} done` : "";
|
|
71
|
+
}
|
|
77
72
|
}
|
|
78
73
|
catch {
|
|
79
74
|
// skip unreadable files
|
|
@@ -97,7 +92,7 @@ async function walk(dir, root, files, shallow) {
|
|
|
97
92
|
files.push({
|
|
98
93
|
path: fullPath,
|
|
99
94
|
relativePath: toPosix(relative(root, fullPath)),
|
|
100
|
-
type
|
|
95
|
+
type,
|
|
101
96
|
summary,
|
|
102
97
|
description,
|
|
103
98
|
status,
|
package/package.json
CHANGED