@lazyingart/agintiflow 0.12.11 → 0.14.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/README.md +11 -1
- package/docs/large-codebase-engineering.md +2 -2
- package/docs/productive-agent-roadmap.md +3 -3
- package/docs/skills-and-tools.md +58 -0
- package/package.json +5 -2
- package/scripts/smoke-capabilities.js +9 -1
- package/scripts/smoke-cli-chat.js +5 -1
- package/scripts/smoke-coding-tools.js +12 -0
- package/scripts/smoke-skills.js +70 -0
- package/scripts/smoke-web-api.js +3 -0
- package/skills/aaps/SKILL.md +21 -0
- package/skills/android/SKILL.md +23 -0
- package/skills/book-writing/SKILL.md +23 -0
- package/skills/c-cpp/SKILL.md +23 -0
- package/skills/code/SKILL.md +25 -0
- package/skills/github-maintenance/SKILL.md +23 -0
- package/skills/image-generation/SKILL.md +23 -0
- package/skills/latex-manuscript/SKILL.md +25 -0
- package/skills/novel-writing/SKILL.md +21 -0
- package/skills/python/SKILL.md +24 -0
- package/skills/r-stan/SKILL.md +24 -0
- package/skills/shell/SKILL.md +21 -0
- package/skills/system-maintenance/SKILL.md +24 -0
- package/skills/website-app/SKILL.md +26 -0
- package/skills/word-documents/SKILL.md +22 -0
- package/src/agent-runner.js +19 -0
- package/src/capabilities.js +18 -1
- package/src/cli.js +28 -1
- package/src/codebase-map.js +151 -0
- package/src/interactive-cli.js +28 -0
- package/src/model-client.js +4 -0
- package/src/parallel-scouts.js +71 -49
- package/src/project.js +3 -0
- package/src/session-store.js +9 -0
- package/src/skill-library.js +153 -0
- package/web.js +2 -0
package/README.md
CHANGED
|
@@ -75,7 +75,7 @@ For code edits, AgInTiFlow routes patch/refactor/database-style tasks to DeepSee
|
|
|
75
75
|
|
|
76
76
|
For larger repositories, use `--profile large-codebase` or choose **Large codebase engineering** in the web UI. The web default stays **Auto**, and Auto now escalates codebase/system/debugging prompts to the same engineering loop when needed. Complex work routes to DeepSeek v4 pro, starts with `inspect_project`, then uses search/read/patch/check loops inspired by Codex, Copilot SDK, Claude Code, Gemini CLI, Qwen, and Claw Code. See [docs/large-codebase-engineering.md](docs/large-codebase-engineering.md).
|
|
77
77
|
|
|
78
|
-
AgInTiFlow can also spend cheap DeepSeek calls on parallel scout notes before the main executor starts a complicated task. It first
|
|
78
|
+
AgInTiFlow can also spend cheap DeepSeek calls on parallel scout notes before the main executor starts a complicated task. It first writes a bounded project map to `.aginti/codebase-map.json`, then runs scouts for architecture, implementation, review, research, context mapping, tests, git workflow, integration, symbol tracing, and dependency risks. A coordinator Swarm Board is injected for the main agent and saved as `artifacts/scout-blackboard.json` in the session. The executor still does the real file/shell/browser work itself. Disable with `--no-parallel-scouts` or set `--scout-count 1..10`.
|
|
79
79
|
|
|
80
80
|
The next productive-agent roadmap is tracked in [docs/productive-agent-roadmap.md](docs/productive-agent-roadmap.md): durable codebase maps, stronger scout blackboards, long-run checkpoints, LSP/symbol tools, test triage, and release automation.
|
|
81
81
|
|
|
@@ -83,6 +83,16 @@ For current docs, install errors, package/toolchain setup, and source discovery,
|
|
|
83
83
|
|
|
84
84
|
For raster image work, AgInTiFlow has an optional `image_generation` skill backed by the `generate_image` tool and a local `GRSAI` key. The skill tells DeepSeek when image generation is appropriate; the tool calls GRS AI Nano Banana, saves manifests/images under `artifacts/images`, and sends the result to the canvas. See [docs/auxiliary-image-generation.md](docs/auxiliary-image-generation.md).
|
|
85
85
|
|
|
86
|
+
AgInTiFlow now ships a Markdown skill library in `skills/<id>/SKILL.md`. Skills are prompt playbooks, while tools are deterministic actions such as `apply_patch`, `run_command`, `web_search`, `generate_image`, and `send_to_canvas`. Built-in skills cover code, websites/apps, LaTeX manuscripts, books, Word documents, image generation, GitHub, system maintenance, Android, R/Stan, Python, C/C++, shell, AAPS, and novel writing. See [docs/skills-and-tools.md](docs/skills-and-tools.md).
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
aginti skills
|
|
90
|
+
aginti skills website
|
|
91
|
+
aginti --list-skills latex
|
|
92
|
+
# in chat:
|
|
93
|
+
/skills github commit
|
|
94
|
+
```
|
|
95
|
+
|
|
86
96
|
Launch the local web UI from an installed package:
|
|
87
97
|
|
|
88
98
|
```bash
|
|
@@ -99,9 +99,9 @@ DeepSeek calls are cheap enough that complex tasks can use several short advisor
|
|
|
99
99
|
- Symbol tracer: predicts names, APIs, routes, schemas, and searches that connect the change.
|
|
100
100
|
- Dependency doctor: checks package managers, Docker/toolchain setup, generated artifacts, and install risks.
|
|
101
101
|
|
|
102
|
-
Before scouts run, AgInTiFlow builds a bounded shared context pack
|
|
102
|
+
Before scouts run, AgInTiFlow builds a bounded shared context pack from a durable project map at `.aginti/codebase-map.json`: manifests, top-level files, source/test directories, package scripts, language counts, git status hints, and recommended reads. This avoids the weak pattern of each scout rediscovering the repo differently or flooding the main context with an infinite tree.
|
|
103
103
|
|
|
104
|
-
Scout output is synthesized by a coordinator Swarm Board and injected as advisory context only. The board records shared context, execution order, conflicts/unknowns, must-read files/checks, and stop conditions. The main agent still owns execution and must use real tools to inspect, edit, run commands, and finish. CLI flags:
|
|
104
|
+
Scout output is synthesized by a coordinator Swarm Board, persisted as `artifacts/scout-blackboard.json`, and injected as advisory context only. The board records shared context, execution order, conflicts/unknowns, must-read files/checks, and stop conditions. The main agent still owns execution and must use real tools to inspect, edit, run commands, and finish. CLI flags:
|
|
105
105
|
|
|
106
106
|
```bash
|
|
107
107
|
aginti --parallel-scouts --scout-count 10 "fix this complicated repo bug"
|
|
@@ -19,8 +19,8 @@ AgInTiFlow should become a practical coding agent, not only a chat UI around a m
|
|
|
19
19
|
|
|
20
20
|
## Missing Productive-Agent Pieces
|
|
21
21
|
|
|
22
|
-
1. Durable codebase map: cache `inspect_project`, symbol locations, test commands, package scripts, and recently changed files per project.
|
|
23
|
-
2. Scout blackboard: let scouts write short structured findings to a shared board, then run a coordinator pass that resolves conflicts before execution.
|
|
22
|
+
1. Durable codebase map: cache `inspect_project`, symbol locations, test commands, package scripts, and recently changed files per project. Initial slice implemented as `.aginti/codebase-map.json` with manifests, source/test dirs, package scripts, languages, git hints, and recommended reads.
|
|
23
|
+
2. Scout blackboard: let scouts write short structured findings to a shared board, then run a coordinator pass that resolves conflicts before execution. Initial slice implemented as per-session `artifacts/scout-blackboard.json` with role lanes, findings, coordinator handoff, and codebase-map metadata.
|
|
24
24
|
3. Long-run checkpoints: save phase state after inspect, patch, test, repair, and commit so a long task can recover after interruption.
|
|
25
25
|
4. Symbol/LSP tools: add find-definition, references, diagnostics, and document-symbols for JS/TS, Python, Rust, Go, and C/C++ where available.
|
|
26
26
|
5. Test triage: parse common test failures into file, symbol, command, and likely cause so repair loops stay narrow.
|
|
@@ -30,6 +30,6 @@ AgInTiFlow should become a practical coding agent, not only a chat UI around a m
|
|
|
30
30
|
|
|
31
31
|
## Swarm Design
|
|
32
32
|
|
|
33
|
-
Scouts must not become noisy subagents. Each scout gets the same bounded context pack and one role. The coordinator produces a Swarm Board with shared context, execution order, disagreements, must-read files, checks, and stop conditions. The main agent still owns tool use and must re-read exact files before editing.
|
|
33
|
+
Scouts must not become noisy subagents. Each scout gets the same bounded context pack generated from the durable codebase map and one role. The coordinator produces a Swarm Board with shared context, execution order, disagreements, must-read files, checks, and stop conditions. The main agent still owns tool use and must re-read exact files before editing.
|
|
34
34
|
|
|
35
35
|
Use 3 scouts for medium tasks, 5 for large tasks, and up to 10 for complex multi-language or system tasks. More scouts are only useful when their roles cover different failure modes.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Skills And Tools
|
|
2
|
+
|
|
3
|
+
AgInTiFlow separates **skills** from **tools** so the agent can stay general while still improving on specialized work.
|
|
4
|
+
|
|
5
|
+
## Definitions
|
|
6
|
+
|
|
7
|
+
**Skill**: Markdown guidance stored at `skills/<id>/SKILL.md`. A skill describes when to use a workflow, what to inspect first, which outputs matter, and which tools are usually useful. Skills are prompt context, not executable code.
|
|
8
|
+
|
|
9
|
+
**Tool**: A deterministic callable capability exposed to the model, such as `inspect_project`, `read_file`, `apply_patch`, `run_command`, `web_search`, `generate_image`, `preview_workspace`, or `send_to_canvas`.
|
|
10
|
+
|
|
11
|
+
**Profile**: A broad runtime mode such as `auto`, `code`, `latex`, or `maintenance`. Profiles tune routing, max steps, and general behavior. Skills can combine across profiles.
|
|
12
|
+
|
|
13
|
+
## Built-In Skills
|
|
14
|
+
|
|
15
|
+
The package ships built-in skills for code engineering, website/app building, LaTeX manuscripts, books, Microsoft Word documents, image generation, GitHub maintenance, system maintenance, Android, R/Stan, Python, C/C++, shell scripting, AAPS, and novel writing.
|
|
16
|
+
|
|
17
|
+
List them from a project:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
aginti skills
|
|
21
|
+
aginti skills website
|
|
22
|
+
aginti --list-skills latex
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Inside interactive chat:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
/skills
|
|
29
|
+
/skills github commit
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Selection Flow
|
|
33
|
+
|
|
34
|
+
For every run, AgInTiFlow scores the user goal and active profile against skill frontmatter:
|
|
35
|
+
|
|
36
|
+
```yaml
|
|
37
|
+
---
|
|
38
|
+
id: latex-manuscript
|
|
39
|
+
label: LaTeX Manuscript
|
|
40
|
+
description: Write, compile, and package LaTeX papers, reports, figures, bibliographies, and PDFs.
|
|
41
|
+
triggers:
|
|
42
|
+
- latex
|
|
43
|
+
- tex
|
|
44
|
+
- manuscript
|
|
45
|
+
tools:
|
|
46
|
+
- write_file
|
|
47
|
+
- apply_patch
|
|
48
|
+
- run_command
|
|
49
|
+
---
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Selected skills are injected into the plan and execution prompts. The LLM still decides what to do; skills only provide domain playbooks and guardrails.
|
|
53
|
+
|
|
54
|
+
## Adding A Skill
|
|
55
|
+
|
|
56
|
+
Create `skills/<id>/SKILL.md` with valid YAML frontmatter and a short Markdown body. Keep descriptions strings, not YAML arrays, because loaders expect `id`, `label`, and `description` as scalar strings.
|
|
57
|
+
|
|
58
|
+
Good skills are small, actionable, and tool-aware. They should say what to inspect, what to create or verify, and what to avoid. They should not hard-code one exact task.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lazyingart/agintiflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AgInTiFlow is a resumable Playwright website-control agent with OpenAI-compatible tool calling.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -46,10 +46,12 @@
|
|
|
46
46
|
"scripts/smoke-coding-tools.js",
|
|
47
47
|
"scripts/smoke-capabilities.js",
|
|
48
48
|
"scripts/smoke-inbox.js",
|
|
49
|
+
"scripts/smoke-skills.js",
|
|
49
50
|
"scripts/smoke-toolchain-docker.js",
|
|
50
51
|
"scripts/smoke-web-api.js",
|
|
51
52
|
"src/",
|
|
52
53
|
"run.js",
|
|
54
|
+
"skills/",
|
|
53
55
|
"web.js"
|
|
54
56
|
],
|
|
55
57
|
"bin": {
|
|
@@ -64,11 +66,12 @@
|
|
|
64
66
|
"smoke:coding-tools": "node scripts/smoke-coding-tools.js",
|
|
65
67
|
"smoke:auxiliary-tools": "node scripts/smoke-auxiliary-tools.js",
|
|
66
68
|
"smoke:cli-chat": "node scripts/smoke-cli-chat.js",
|
|
69
|
+
"smoke:skills": "node scripts/smoke-skills.js",
|
|
67
70
|
"smoke:toolchain-docker": "node scripts/smoke-toolchain-docker.js",
|
|
68
71
|
"smoke:inbox": "node scripts/smoke-inbox.js",
|
|
69
72
|
"smoke:web-api": "node scripts/smoke-web-api.js",
|
|
70
73
|
"real:deepseek": "node scripts/real-deepseek-capabilities.js",
|
|
71
|
-
"test": "npm run check && npm run smoke:web-api && npm run smoke:coding-tools && npm run smoke:auxiliary-tools && npm run smoke:capabilities && npm run smoke:cli-chat && npm run smoke:inbox",
|
|
74
|
+
"test": "npm run check && npm run smoke:web-api && npm run smoke:coding-tools && npm run smoke:auxiliary-tools && npm run smoke:capabilities && npm run smoke:skills && npm run smoke:cli-chat && npm run smoke:inbox",
|
|
72
75
|
"pack:dry-run": "npm pack --dry-run",
|
|
73
76
|
"smoke:capabilities": "node scripts/smoke-capabilities.js"
|
|
74
77
|
},
|
|
@@ -81,6 +81,14 @@ try {
|
|
|
81
81
|
capabilities.trustedDockerPolicy.some((check) => check.command.startsWith("chmod") && check.allowed),
|
|
82
82
|
"trusted Docker policy did not allow chmod"
|
|
83
83
|
);
|
|
84
|
+
assert(
|
|
85
|
+
capabilities.tools?.skills?.some((skill) => skill.id === "website-app"),
|
|
86
|
+
"capabilities did not report built-in website skill"
|
|
87
|
+
);
|
|
88
|
+
assert(
|
|
89
|
+
capabilities.tools?.skills?.some((skill) => skill.id === "latex-manuscript"),
|
|
90
|
+
"capabilities did not report built-in LaTeX skill"
|
|
91
|
+
);
|
|
84
92
|
|
|
85
93
|
const doctor = JSON.parse(await runCli(["doctor", "--capabilities", "--json"]));
|
|
86
94
|
assert(doctor.project.root === tempRoot, "doctor --capabilities used the wrong project root");
|
|
@@ -91,7 +99,7 @@ try {
|
|
|
91
99
|
{
|
|
92
100
|
ok: true,
|
|
93
101
|
projectRoot: tempRoot,
|
|
94
|
-
checks: ["aginti-md-init", "capabilities-cli", "doctor-capabilities", "maintenance-policy", "trusted-docker-policy", "git-policy"],
|
|
102
|
+
checks: ["aginti-md-init", "capabilities-cli", "doctor-capabilities", "maintenance-policy", "trusted-docker-policy", "git-policy", "skills-capability"],
|
|
95
103
|
},
|
|
96
104
|
null,
|
|
97
105
|
2
|
|
@@ -122,6 +122,10 @@ try {
|
|
|
122
122
|
if (!instructionsResult.stdout.includes("AGINTI.md") || !instructionsResult.stdout.includes("Project instructions")) {
|
|
123
123
|
throw new Error("interactive /instructions did not show AGINTI.md");
|
|
124
124
|
}
|
|
125
|
+
const skillsResult = await runChat("/skills website\n/exit\n");
|
|
126
|
+
if (!skillsResult.stdout.includes("website-app") || !skillsResult.stdout.includes("Website And App Builder")) {
|
|
127
|
+
throw new Error("interactive /skills did not show matching built-in skills");
|
|
128
|
+
}
|
|
125
129
|
await runChat("remember that this project prefers pytest smoke tests in AGINTI.md\n/exit\n");
|
|
126
130
|
const updatedInstructions = await fs.readFile(path.join(tempRoot, "AGINTI.md"), "utf8");
|
|
127
131
|
if (!updatedInstructions.includes("pytest smoke tests")) {
|
|
@@ -159,7 +163,7 @@ try {
|
|
|
159
163
|
{
|
|
160
164
|
ok: true,
|
|
161
165
|
projectRoot: tempRoot,
|
|
162
|
-
checks: ["markdown-render", "markdown-table-no-duplicate", "patch-diff-render", "prompt-layout", "live-input-status-layout", "agent-response-gutter", "aginti-md", "instructions-command", "instructions-chat-edit", "interactive-chat", "mock-file-write", "run-status", "resume-latest", "resume-history-full"],
|
|
166
|
+
checks: ["markdown-render", "markdown-table-no-duplicate", "patch-diff-render", "prompt-layout", "live-input-status-layout", "agent-response-gutter", "aginti-md", "instructions-command", "skills-command", "instructions-chat-edit", "interactive-chat", "mock-file-write", "run-status", "resume-latest", "resume-history-full"],
|
|
163
167
|
},
|
|
164
168
|
null,
|
|
165
169
|
2
|
|
@@ -5,6 +5,7 @@ import path from "node:path";
|
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { repairModelMessageHistory, runAgent } from "../src/agent-runner.js";
|
|
7
7
|
import { resolveRuntimeConfig } from "../src/config.js";
|
|
8
|
+
import { readCodebaseMap } from "../src/codebase-map.js";
|
|
8
9
|
import { engineeringGuidanceForTask, recommendedMaxStepsForTask } from "../src/engineering-guidance.js";
|
|
9
10
|
import { selectModelRoute } from "../src/model-routing.js";
|
|
10
11
|
import { listParallelScouts, runParallelScouts, shouldRunParallelScouts } from "../src/parallel-scouts.js";
|
|
@@ -219,10 +220,19 @@ try {
|
|
|
219
220
|
assert(scoutRun.contextPack.includes("package.json"), "parallel scout context pack did not include manifest evidence");
|
|
220
221
|
assert(scoutRun.summary.includes("## shared context pack"), "parallel scout summary omitted shared context pack");
|
|
221
222
|
assert(scoutRun.summary.includes("## coordinator"), "parallel scout summary omitted coordinator synthesis");
|
|
223
|
+
assert(scoutRun.codebaseMap?.fingerprint, "parallel scout run did not return durable codebase map metadata");
|
|
224
|
+
assert(scoutRun.blackboard?.lanes?.length === 10, "parallel scout blackboard did not include all scout lanes");
|
|
225
|
+
assert(scoutRun.blackboard?.coordinator.includes("Swarm Board"), "parallel scout blackboard did not retain coordinator synthesis");
|
|
222
226
|
assert(
|
|
223
227
|
fakeScoutPrompts.filter((prompt) => /Shared context pack:[\s\S]*package\.json/.test(prompt)).length >= 10,
|
|
224
228
|
"parallel scouts did not receive the shared context pack"
|
|
225
229
|
);
|
|
230
|
+
const codebaseMap = await readCodebaseMap(workspace);
|
|
231
|
+
assert(codebaseMap.ok && codebaseMap.map.fingerprint === scoutRun.codebaseMap.fingerprint, "durable codebase map was not persisted");
|
|
232
|
+
const blackboardStore = new SessionStore(runtimeDir, "blackboard-smoke");
|
|
233
|
+
const blackboardPath = await blackboardStore.saveJsonArtifact("scout-blackboard.json", scoutRun.blackboard);
|
|
234
|
+
const blackboardJson = JSON.parse(await fs.readFile(blackboardPath, "utf8"));
|
|
235
|
+
assert(blackboardJson.lanes.length === 10, "scout blackboard artifact did not persist lanes");
|
|
226
236
|
|
|
227
237
|
const inspectRun = await runMock("Inspect this large codebase and recommend next reads.", "coding-inspect");
|
|
228
238
|
assert(
|
|
@@ -368,6 +378,8 @@ try {
|
|
|
368
378
|
"web_search_dry_run",
|
|
369
379
|
"inspect_project",
|
|
370
380
|
"parallel_scout_context_pack",
|
|
381
|
+
"durable_codebase_map",
|
|
382
|
+
"scout_blackboard",
|
|
371
383
|
"mock_inspect_project",
|
|
372
384
|
"write_file",
|
|
373
385
|
"duplicate_write_failed",
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { formatSkillsForPrompt, listSkills, selectSkillsForGoal } from "../src/skill-library.js";
|
|
7
|
+
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
10
|
+
|
|
11
|
+
function assert(condition, message) {
|
|
12
|
+
if (!condition) throw new Error(message);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function selectedIds(goal, taskProfile = "auto") {
|
|
16
|
+
return selectSkillsForGoal(goal, { taskProfile, limit: 8 }).map((skill) => skill.id);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const skills = listSkills({ includeBody: true });
|
|
20
|
+
const ids = new Set(skills.map((skill) => skill.id));
|
|
21
|
+
assert(skills.length >= 14, "expected built-in skills to load");
|
|
22
|
+
for (const required of [
|
|
23
|
+
"aaps",
|
|
24
|
+
"code",
|
|
25
|
+
"github-maintenance",
|
|
26
|
+
"image-generation",
|
|
27
|
+
"latex-manuscript",
|
|
28
|
+
"system-maintenance",
|
|
29
|
+
"website-app",
|
|
30
|
+
"word-documents",
|
|
31
|
+
]) {
|
|
32
|
+
assert(ids.has(required), `missing required skill ${required}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
assert(selectedIds("write a beautiful React website and preview it").includes("website-app"), "website prompt did not select website-app");
|
|
36
|
+
assert(selectedIds("write a LaTeX paper and compile a PDF").includes("latex-manuscript"), "latex prompt did not select latex-manuscript");
|
|
37
|
+
assert(selectedIds("edit a Microsoft Word docx and preserve the original").includes("word-documents"), "docx prompt did not select word-documents");
|
|
38
|
+
assert(selectedIds("generate a logo image with grsai nanobanana").includes("image-generation"), "image prompt did not select image-generation");
|
|
39
|
+
assert(selectedIds("git status commit push with gh").includes("github-maintenance"), "git prompt did not select github-maintenance");
|
|
40
|
+
assert(selectedIds("create an .aaps example for @lazyingart/aaps").includes("aaps"), "AAPS prompt did not select aaps");
|
|
41
|
+
assert(selectedIds("debug a C++ CMake build").includes("c-cpp"), "C++ prompt did not select c-cpp");
|
|
42
|
+
assert(selectedIds("set up Stan and CmdStanR reproducibly").includes("r-stan"), "Stan prompt did not select r-stan");
|
|
43
|
+
|
|
44
|
+
const prompt = formatSkillsForPrompt(selectSkillsForGoal("write latex manuscript with figures", { taskProfile: "latex", limit: 3 }));
|
|
45
|
+
assert(prompt.includes("A skill is Markdown guidance"), "skill prompt does not explain skill semantics");
|
|
46
|
+
assert(prompt.includes("latex-manuscript"), "skill prompt omitted selected skill");
|
|
47
|
+
assert(prompt.length < 5400, "skill prompt is too large for normal runs");
|
|
48
|
+
|
|
49
|
+
const cli = await execFileAsync(process.execPath, [path.join(repoRoot, "bin/aginti-cli.js"), "skills", "website"], {
|
|
50
|
+
cwd: repoRoot,
|
|
51
|
+
timeout: 10000,
|
|
52
|
+
maxBuffer: 512 * 1024,
|
|
53
|
+
env: {
|
|
54
|
+
...process.env,
|
|
55
|
+
AGINTIFLOW_RUNTIME_DIR: "",
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
assert(cli.stdout.includes("website-app"), "aginti skills website did not print website-app");
|
|
59
|
+
|
|
60
|
+
console.log(
|
|
61
|
+
JSON.stringify(
|
|
62
|
+
{
|
|
63
|
+
ok: true,
|
|
64
|
+
skills: skills.length,
|
|
65
|
+
checks: ["load-built-ins", "select-by-goal", "prompt-format", "cli-skills"],
|
|
66
|
+
},
|
|
67
|
+
null,
|
|
68
|
+
2
|
|
69
|
+
)
|
|
70
|
+
);
|
package/scripts/smoke-web-api.js
CHANGED
|
@@ -81,6 +81,9 @@ try {
|
|
|
81
81
|
if (!Array.isArray(config.taskProfiles) || !config.taskProfiles.some((profile) => profile.id === "latex")) {
|
|
82
82
|
throw new Error("task profiles are not advertised by /api/config");
|
|
83
83
|
}
|
|
84
|
+
if (!Array.isArray(config.skills) || !config.skills.some((skill) => skill.id === "website-app")) {
|
|
85
|
+
throw new Error("built-in skills are not advertised by /api/config");
|
|
86
|
+
}
|
|
84
87
|
|
|
85
88
|
const keyStatus = await fetchJson("/api/keys/status");
|
|
86
89
|
if (typeof keyStatus.keyStatus?.deepseek !== "boolean") throw new Error("key status endpoint is invalid");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: aaps
|
|
3
|
+
label: AAPS Workflows
|
|
4
|
+
description: Work with ../AAPS, .aaps files, @lazyingart/aaps, automation plans, and related project conventions.
|
|
5
|
+
triggers:
|
|
6
|
+
- aaps
|
|
7
|
+
- .aaps
|
|
8
|
+
- @lazyingart/aaps
|
|
9
|
+
- automation plan
|
|
10
|
+
tools:
|
|
11
|
+
- inspect_project
|
|
12
|
+
- read_file
|
|
13
|
+
- write_file
|
|
14
|
+
- run_command
|
|
15
|
+
- web_search
|
|
16
|
+
---
|
|
17
|
+
# AAPS Workflows
|
|
18
|
+
|
|
19
|
+
Inspect nearby `.aaps` files, package docs, and project notes before generating workflows. Keep assumptions explicit and outputs project-local.
|
|
20
|
+
|
|
21
|
+
Do not publish, upload, or expose credentials unless explicitly requested and safe.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: android
|
|
3
|
+
label: Android Development
|
|
4
|
+
description: Build and debug Android, Gradle, Kotlin, Java, emulator, and mobile app projects.
|
|
5
|
+
triggers:
|
|
6
|
+
- android
|
|
7
|
+
- gradle
|
|
8
|
+
- kotlin
|
|
9
|
+
- java
|
|
10
|
+
- apk
|
|
11
|
+
- emulator
|
|
12
|
+
tools:
|
|
13
|
+
- inspect_project
|
|
14
|
+
- search_files
|
|
15
|
+
- apply_patch
|
|
16
|
+
- run_command
|
|
17
|
+
- web_search
|
|
18
|
+
---
|
|
19
|
+
# Android Development
|
|
20
|
+
|
|
21
|
+
Inspect Gradle files, manifests, package names, modules, and existing build scripts before editing. Prefer narrow Gradle tasks and source-set-aware patches.
|
|
22
|
+
|
|
23
|
+
If SDK/emulator tooling is missing, produce a setup report or project-local script rather than guessing.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: book-writing
|
|
3
|
+
label: Book And Long-Form Writing
|
|
4
|
+
description: Plan, draft, revise, and structure books, chapters, scripts, tutorials, and long documents.
|
|
5
|
+
triggers:
|
|
6
|
+
- book
|
|
7
|
+
- chapter
|
|
8
|
+
- script
|
|
9
|
+
- tutorial
|
|
10
|
+
- long form
|
|
11
|
+
- outline
|
|
12
|
+
- manuscript
|
|
13
|
+
tools:
|
|
14
|
+
- write_file
|
|
15
|
+
- read_file
|
|
16
|
+
- web_search
|
|
17
|
+
- send_to_canvas
|
|
18
|
+
---
|
|
19
|
+
# Book And Long-Form Writing
|
|
20
|
+
|
|
21
|
+
Start with structure: audience, promise, outline, chapter flow, voice, and revision plan. Save durable drafts as Markdown unless the user requests another format.
|
|
22
|
+
|
|
23
|
+
Use web search for current facts and keep source notes when claims matter. For long work, produce incremental chapters and revision notes instead of one huge brittle output.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: c-cpp
|
|
3
|
+
label: C And C++ Development
|
|
4
|
+
description: Work with C, C++, CMake, Make, native builds, tests, and low-level debugging.
|
|
5
|
+
triggers:
|
|
6
|
+
- c++
|
|
7
|
+
- cpp
|
|
8
|
+
- c language
|
|
9
|
+
- cmake
|
|
10
|
+
- makefile
|
|
11
|
+
- gcc
|
|
12
|
+
- clang
|
|
13
|
+
tools:
|
|
14
|
+
- inspect_project
|
|
15
|
+
- search_files
|
|
16
|
+
- apply_patch
|
|
17
|
+
- run_command
|
|
18
|
+
---
|
|
19
|
+
# C And C++ Development
|
|
20
|
+
|
|
21
|
+
Inspect build files before source edits. Keep patches narrow, respect formatting style, and run the smallest compile/test target available.
|
|
22
|
+
|
|
23
|
+
If native dependencies are missing, prefer Docker/project-local setup notes and do not silently change host toolchains.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: code
|
|
3
|
+
label: Code Engineering
|
|
4
|
+
description: Build, edit, debug, test, and maintain software projects across languages.
|
|
5
|
+
triggers:
|
|
6
|
+
- code
|
|
7
|
+
- app
|
|
8
|
+
- bug
|
|
9
|
+
- test
|
|
10
|
+
- refactor
|
|
11
|
+
- package
|
|
12
|
+
- project
|
|
13
|
+
tools:
|
|
14
|
+
- inspect_project
|
|
15
|
+
- search_files
|
|
16
|
+
- read_file
|
|
17
|
+
- apply_patch
|
|
18
|
+
- run_command
|
|
19
|
+
- web_search
|
|
20
|
+
---
|
|
21
|
+
# Code Engineering
|
|
22
|
+
|
|
23
|
+
Orient before editing: inspect the project map, read instructions/manifests, search exact symbols or errors, then patch the smallest coherent set of files.
|
|
24
|
+
|
|
25
|
+
Prefer deterministic `apply_patch` for source edits. Run focused checks first, repair failures, then broaden checks only when useful. Summarize changed files, commands run, and residual risk.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: github-maintenance
|
|
3
|
+
label: GitHub And Release Maintenance
|
|
4
|
+
description: Use git and gh safely for status, commits, pull requests, releases, and repository maintenance.
|
|
5
|
+
triggers:
|
|
6
|
+
- git
|
|
7
|
+
- github
|
|
8
|
+
- gh
|
|
9
|
+
- commit
|
|
10
|
+
- push
|
|
11
|
+
- pull request
|
|
12
|
+
- release
|
|
13
|
+
tools:
|
|
14
|
+
- run_command
|
|
15
|
+
- read_file
|
|
16
|
+
- apply_patch
|
|
17
|
+
- web_search
|
|
18
|
+
---
|
|
19
|
+
# GitHub And Release Maintenance
|
|
20
|
+
|
|
21
|
+
Always inspect `git status --short` and relevant diffs before committing or pushing. Keep commits scoped and stop on conflicts, divergence, or unrelated dirty work.
|
|
22
|
+
|
|
23
|
+
Use `gh` for PR/release/status workflows when authenticated. Fold long command output but preserve key errors, URLs, branch names, and commit hashes.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: image-generation
|
|
3
|
+
label: Image Generation
|
|
4
|
+
description: Generate or edit raster images, posters, covers, logos, illustrations, and visual assets.
|
|
5
|
+
triggers:
|
|
6
|
+
- image
|
|
7
|
+
- logo
|
|
8
|
+
- poster
|
|
9
|
+
- cover
|
|
10
|
+
- illustration
|
|
11
|
+
- nanobanana
|
|
12
|
+
- grsai
|
|
13
|
+
- gpt image
|
|
14
|
+
tools:
|
|
15
|
+
- generate_image
|
|
16
|
+
- write_file
|
|
17
|
+
- send_to_canvas
|
|
18
|
+
---
|
|
19
|
+
# Image Generation
|
|
20
|
+
|
|
21
|
+
Use image generation when the user asks for a raster visual asset or prompt. Write a concise prompt with subject, style, composition, color, lighting, and output constraints.
|
|
22
|
+
|
|
23
|
+
Prefer `generate_image` when a GRS AI key is available. Save selected outputs under artifacts and send the chosen image to canvas.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: latex-manuscript
|
|
3
|
+
label: LaTeX Manuscript
|
|
4
|
+
description: Write, compile, and package LaTeX papers, reports, figures, bibliographies, and PDFs.
|
|
5
|
+
triggers:
|
|
6
|
+
- latex
|
|
7
|
+
- tex
|
|
8
|
+
- manuscript
|
|
9
|
+
- paper
|
|
10
|
+
- pdf
|
|
11
|
+
- figure
|
|
12
|
+
- overleaf
|
|
13
|
+
tools:
|
|
14
|
+
- write_file
|
|
15
|
+
- apply_patch
|
|
16
|
+
- run_command
|
|
17
|
+
- open_workspace_file
|
|
18
|
+
- send_to_canvas
|
|
19
|
+
- web_search
|
|
20
|
+
---
|
|
21
|
+
# LaTeX Manuscript
|
|
22
|
+
|
|
23
|
+
Use a project subfolder with `main.tex`, figures, bibliography, and generated PDFs. Compile from the correct directory with `latexmk` or `pdflatex` when available.
|
|
24
|
+
|
|
25
|
+
If TeX is missing, produce an honest setup note or Docker-local setup plan instead of faking success. Send the final PDF or source to canvas when useful.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: novel-writing
|
|
3
|
+
label: Novel Writing
|
|
4
|
+
description: Plan, draft, revise, and manage novels, character arcs, scenes, chapters, and long fiction.
|
|
5
|
+
triggers:
|
|
6
|
+
- novel
|
|
7
|
+
- fiction
|
|
8
|
+
- character
|
|
9
|
+
- scene
|
|
10
|
+
- plot
|
|
11
|
+
- chapter
|
|
12
|
+
tools:
|
|
13
|
+
- write_file
|
|
14
|
+
- read_file
|
|
15
|
+
- send_to_canvas
|
|
16
|
+
---
|
|
17
|
+
# Novel Writing
|
|
18
|
+
|
|
19
|
+
Track premise, characters, setting, conflict, tone, and continuity. Save outlines, chapter drafts, and revision notes as durable files.
|
|
20
|
+
|
|
21
|
+
For long works, write in scenes or chapters and maintain a compact continuity bible instead of relying on chat history alone.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: python
|
|
3
|
+
label: Python Development
|
|
4
|
+
description: Build Python packages, CLIs, scripts, tests, notebooks, plotting, and data workflows.
|
|
5
|
+
triggers:
|
|
6
|
+
- python
|
|
7
|
+
- pytest
|
|
8
|
+
- pyproject
|
|
9
|
+
- pip
|
|
10
|
+
- uv
|
|
11
|
+
- matplotlib
|
|
12
|
+
- pandas
|
|
13
|
+
tools:
|
|
14
|
+
- inspect_project
|
|
15
|
+
- search_files
|
|
16
|
+
- apply_patch
|
|
17
|
+
- run_command
|
|
18
|
+
- send_to_canvas
|
|
19
|
+
---
|
|
20
|
+
# Python Development
|
|
21
|
+
|
|
22
|
+
Inspect `pyproject.toml`, requirements, package layout, and tests. Prefer stdlib tests when dependency installs are unnecessary; otherwise use project-local venv/conda/uv or Docker.
|
|
23
|
+
|
|
24
|
+
For plots and artifacts, save files with clear names and send useful outputs to canvas.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: r-stan
|
|
3
|
+
label: R And Stan
|
|
4
|
+
description: Work with R, Stan, CmdStan, CmdStanR, PyStan, statistics, and reproducible analysis projects.
|
|
5
|
+
triggers:
|
|
6
|
+
- r
|
|
7
|
+
- stan
|
|
8
|
+
- cmdstan
|
|
9
|
+
- cmdstanr
|
|
10
|
+
- pystan
|
|
11
|
+
- statistics
|
|
12
|
+
- bayesian
|
|
13
|
+
tools:
|
|
14
|
+
- inspect_project
|
|
15
|
+
- write_file
|
|
16
|
+
- run_command
|
|
17
|
+
- web_search
|
|
18
|
+
- send_to_canvas
|
|
19
|
+
---
|
|
20
|
+
# R And Stan
|
|
21
|
+
|
|
22
|
+
Keep analysis reproducible: scripts, data paths, package notes, seed handling, and output folders. Prefer Docker or project-local toolchains for installation.
|
|
23
|
+
|
|
24
|
+
For Stan, validate model syntax and compile/run only when toolchains exist; otherwise write honest setup scripts and checks.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: shell
|
|
3
|
+
label: Shell Scripting
|
|
4
|
+
description: Write, audit, and run shell scripts for automation, setup, diagnostics, and maintenance.
|
|
5
|
+
triggers:
|
|
6
|
+
- shell
|
|
7
|
+
- bash
|
|
8
|
+
- script
|
|
9
|
+
- terminal
|
|
10
|
+
- command
|
|
11
|
+
- cli
|
|
12
|
+
tools:
|
|
13
|
+
- write_file
|
|
14
|
+
- run_command
|
|
15
|
+
- web_search
|
|
16
|
+
---
|
|
17
|
+
# Shell Scripting
|
|
18
|
+
|
|
19
|
+
Prefer idempotent scripts with `set -euo pipefail` when appropriate, clear variables, dry-run or validation modes, and `bash -n` checks.
|
|
20
|
+
|
|
21
|
+
Separate diagnosis from mutation. Keep dangerous host operations explicit and reversible.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: system-maintenance
|
|
3
|
+
label: System Maintenance
|
|
4
|
+
description: Diagnose and repair local system, shell, package, Docker, conda, Python, R, and toolchain problems.
|
|
5
|
+
triggers:
|
|
6
|
+
- system
|
|
7
|
+
- install
|
|
8
|
+
- package
|
|
9
|
+
- docker
|
|
10
|
+
- conda
|
|
11
|
+
- environment
|
|
12
|
+
- fix computer
|
|
13
|
+
- error
|
|
14
|
+
tools:
|
|
15
|
+
- run_command
|
|
16
|
+
- write_file
|
|
17
|
+
- web_search
|
|
18
|
+
- send_to_canvas
|
|
19
|
+
---
|
|
20
|
+
# System Maintenance
|
|
21
|
+
|
|
22
|
+
Diagnose first with read-only commands. Prefer Docker/project-local scripts and `/aginti-env` for broad toolchain setup. Host-level sudo or destructive operations require explicit user approval outside normal automation.
|
|
23
|
+
|
|
24
|
+
For complicated setup, write idempotent scripts, run syntax checks, and report exact next safe command.
|