@juancr11/sibu 0.4.2 → 0.5.1
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/bin/features/init-project/handler.js +5 -3
- package/bin/shared/prompts.js +17 -1
- package/package.json +4 -3
- package/templates/AGENTS.md +8 -0
- package/templates/manifest.json +9 -9
- package/templates/skills/ai-implementation-plan-executor/SKILL.md +2 -3
- package/templates/skills/technical-design-writer/SKILL.md +4 -0
- package/templates/skills/ux-expert/SKILL.md +4 -0
|
@@ -4,7 +4,7 @@ import { intro, log, outro } from '@clack/prompts';
|
|
|
4
4
|
import chalk from 'chalk';
|
|
5
5
|
import { STATE_RELATIVE_PATH } from '../../shared/catalog.js';
|
|
6
6
|
import { getProjectContext } from '../../shared/paths.js';
|
|
7
|
-
import { askForArchitectureSkill, askForFrameworkSkills, askForLanguageSkills, askForProjectOverview, askForSupportedAgents, renderIntro } from '../../shared/prompts.js';
|
|
7
|
+
import { askForArchitectureSkill, askForFrameworkSkills, askForLanguageSkills, askForProjectOverview, askForSupportedAgents, askForWorkflowSkills, renderIntro } from '../../shared/prompts.js';
|
|
8
8
|
import { readStateForDoctor } from '../../shared/state.js';
|
|
9
9
|
import { getWorkflowTargets, renderMissingWorkflowFiles, writeSibuState } from '../../shared/workflow-targets.js';
|
|
10
10
|
export async function handleInitProject(_command) {
|
|
@@ -31,7 +31,8 @@ export async function handleInitProject(_command) {
|
|
|
31
31
|
const selectedLanguageSkills = await askForLanguageSkills();
|
|
32
32
|
const selectedFrameworkSkills = await askForFrameworkSkills();
|
|
33
33
|
const selectedArchitectureSkill = await askForArchitectureSkill();
|
|
34
|
-
const
|
|
34
|
+
const selectedWorkflowSkills = await askForWorkflowSkills();
|
|
35
|
+
const targets = getWorkflowTargets(rootPath, selectedAgents, selectedLanguageSkills, selectedFrameworkSkills, selectedArchitectureSkill, selectedWorkflowSkills);
|
|
35
36
|
const missingTargets = targets.filter((target) => !fs.existsSync(target.targetPath));
|
|
36
37
|
log.message('I will create this project’s initial AI workflow files.');
|
|
37
38
|
for (const target of targets) {
|
|
@@ -51,13 +52,14 @@ export async function handleInitProject(_command) {
|
|
|
51
52
|
selectedLanguageSkills,
|
|
52
53
|
selectedFrameworkSkills,
|
|
53
54
|
selectedArchitectureSkill,
|
|
55
|
+
selectedWorkflowSkills,
|
|
54
56
|
});
|
|
55
57
|
for (const file of files) {
|
|
56
58
|
fs.mkdirSync(path.dirname(file.targetPath), { recursive: true });
|
|
57
59
|
fs.writeFileSync(file.targetPath, file.contents, { encoding: 'utf8', flag: 'wx' });
|
|
58
60
|
log.success(`Created ${file.label}`);
|
|
59
61
|
}
|
|
60
|
-
writeSibuState({ rootPath, statePath, selectedAgents, selectedLanguageSkills, selectedFrameworkSkills, selectedArchitectureSkill, targets });
|
|
62
|
+
writeSibuState({ rootPath, statePath, selectedAgents, selectedLanguageSkills, selectedFrameworkSkills, selectedArchitectureSkill, selectedWorkflowSkills, targets });
|
|
61
63
|
log.success(`Created ${STATE_RELATIVE_PATH}`);
|
|
62
64
|
outro(chalk.green('Setup complete.'));
|
|
63
65
|
}
|
package/bin/shared/prompts.js
CHANGED
|
@@ -3,7 +3,7 @@ import { cancel, isCancel, multiselect, select, text } from '@clack/prompts';
|
|
|
3
3
|
import gradient from 'gradient-string';
|
|
4
4
|
import { Box, Text, render, useApp } from 'ink';
|
|
5
5
|
import { useEffect } from 'react';
|
|
6
|
-
import { SELECTABLE_ARCHITECTURE_SKILLS, SELECTABLE_FRAMEWORK_SKILLS, SELECTABLE_LANGUAGE_SKILLS, SUPPORTED_AGENTS } from './catalog.js';
|
|
6
|
+
import { SELECTABLE_ARCHITECTURE_SKILLS, SELECTABLE_FRAMEWORK_SKILLS, SELECTABLE_LANGUAGE_SKILLS, SELECTABLE_WORKFLOW_SKILLS, SUPPORTED_AGENTS } from './catalog.js';
|
|
7
7
|
const NONE_OPTION_ID = 'none';
|
|
8
8
|
export async function renderIntro() {
|
|
9
9
|
console.log(gradient(['#39ff14', '#00e5ff', '#9b5de5']).multiline('⧖ S I B U ⧖'));
|
|
@@ -99,6 +99,22 @@ export async function askForArchitectureSkill() {
|
|
|
99
99
|
}
|
|
100
100
|
return SELECTABLE_ARCHITECTURE_SKILLS.find((skill) => skill.id === selectedArchitectureSkillId);
|
|
101
101
|
}
|
|
102
|
+
export async function askForWorkflowSkills() {
|
|
103
|
+
const selectedWorkflowSkillIds = await multiselect({
|
|
104
|
+
message: 'Select optional workflow skills for this project.',
|
|
105
|
+
required: false,
|
|
106
|
+
options: SELECTABLE_WORKFLOW_SKILLS.map((skill) => ({
|
|
107
|
+
value: skill.id,
|
|
108
|
+
label: skill.name,
|
|
109
|
+
hint: skill.description,
|
|
110
|
+
})),
|
|
111
|
+
});
|
|
112
|
+
if (isCancel(selectedWorkflowSkillIds)) {
|
|
113
|
+
cancel('Initialization cancelled.');
|
|
114
|
+
process.exit(0);
|
|
115
|
+
}
|
|
116
|
+
return SELECTABLE_WORKFLOW_SKILLS.filter((skill) => selectedWorkflowSkillIds.includes(skill.id));
|
|
117
|
+
}
|
|
102
118
|
export function shouldAskForNewLanguageSkills(state) {
|
|
103
119
|
return (state.selectedLanguageSkills?.length ?? 0) === 0;
|
|
104
120
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juancr11/sibu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "CLI for setting up a local AI-augmented development workflow.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
"validate:packed-runtime": "node ./scripts/validate-packed-cli-runtime.mjs",
|
|
37
37
|
"validate:doctor-version-advisory": "pnpm build && node ./scripts/validate-doctor-version-advisory.mjs",
|
|
38
38
|
"validate:post-update-doctor-drift": "pnpm build && node ./scripts/validate-post-update-doctor-drift.mjs",
|
|
39
|
-
"validate:release": "pnpm verify && npm pack && pnpm run validate:packed-runtime
|
|
39
|
+
"validate:release-publish": "pnpm verify && npm pack && pnpm run validate:packed-runtime",
|
|
40
|
+
"validate:release": "pnpm run validate:release-publish && pnpm run validate:doctor-version-advisory && pnpm run validate:post-update-doctor-drift",
|
|
40
41
|
"admin:release": "node ./bin/admin/release.js"
|
|
41
42
|
},
|
|
42
43
|
"keywords": [
|
|
@@ -54,7 +55,7 @@
|
|
|
54
55
|
"@types/react": "^19.2.14",
|
|
55
56
|
"typescript": "^6.0.2"
|
|
56
57
|
},
|
|
57
|
-
"packageManager": "pnpm@10.
|
|
58
|
+
"packageManager": "pnpm@10.33.2",
|
|
58
59
|
"dependencies": {
|
|
59
60
|
"@clack/prompts": "^1.2.0",
|
|
60
61
|
"chalk": "^5.6.2",
|
package/templates/AGENTS.md
CHANGED
|
@@ -19,6 +19,14 @@
|
|
|
19
19
|
- Ask again only if the scope changes materially, the approach becomes materially more complex or risky, or the user explicitly asks to review before continuing.
|
|
20
20
|
- Use Conventional Commits 1.0.0 for commit messages.
|
|
21
21
|
|
|
22
|
+
## Context budget discipline
|
|
23
|
+
|
|
24
|
+
Treat context as a shared budget owned by the user. Prefer narrow, purposeful context before broad reads: search targeted paths, inspect snippets before full files, and avoid dependency, generated, build, cache, and lockfile content unless relevant.
|
|
25
|
+
|
|
26
|
+
Do not dump full files, full diffs, broad recursive scans, or uncapped command output unless needed for quality or explicitly requested. Summarize large diffs, logs, command output, and generated artifacts by default, with focused excerpts when they support a decision.
|
|
27
|
+
|
|
28
|
+
Keep responses concise by default, but spend the context needed for correctness, safety, validation, human control, or required context gathering. Warn or ask before optional expensive context operations.
|
|
29
|
+
|
|
22
30
|
## Communication style
|
|
23
31
|
|
|
24
32
|
- Keep responses as short as practical while still being clear and useful.
|
package/templates/manifest.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"templateVersion": "
|
|
2
|
+
"templateVersion": "52",
|
|
3
3
|
"templates": {
|
|
4
4
|
"AGENTS.md": {
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "22",
|
|
6
6
|
"description": "Project-level agent instructions and Sibu maintenance guidance.",
|
|
7
7
|
"changes": [
|
|
8
|
-
"
|
|
8
|
+
"Adds concise context-budget discipline so agents prefer narrow reads, summarize large outputs, and preserve quality over token savings."
|
|
9
9
|
]
|
|
10
10
|
},
|
|
11
11
|
".codex/config.toml": {
|
|
@@ -52,10 +52,10 @@
|
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
54
|
"skills/technical-design-writer/SKILL.md": {
|
|
55
|
-
"version": "
|
|
55
|
+
"version": "11",
|
|
56
56
|
"description": "Mandatory technical design writer skill installed once at the shared .agents/skills workspace path.",
|
|
57
57
|
"changes": [
|
|
58
|
-
"
|
|
58
|
+
"Tightens final responses so technical design updates report only the output path unless inline review is requested."
|
|
59
59
|
]
|
|
60
60
|
},
|
|
61
61
|
"skills/typescript/SKILL.md": {
|
|
@@ -115,10 +115,10 @@
|
|
|
115
115
|
]
|
|
116
116
|
},
|
|
117
117
|
"skills/ai-implementation-plan-executor/SKILL.md": {
|
|
118
|
-
"version": "
|
|
118
|
+
"version": "10",
|
|
119
119
|
"description": "Mandatory AI implementation plan executor skill for implementing existing story implementation plans one reviewed step at a time.",
|
|
120
120
|
"changes": [
|
|
121
|
-
"
|
|
121
|
+
"Clarifies step-completion reports so agents say the step finished and identify the next step before waiting for approval."
|
|
122
122
|
]
|
|
123
123
|
},
|
|
124
124
|
"skills/ai-prompt-engineer-master/SKILL.md": {
|
|
@@ -129,10 +129,10 @@
|
|
|
129
129
|
]
|
|
130
130
|
},
|
|
131
131
|
"skills/ux-expert/SKILL.md": {
|
|
132
|
-
"version": "
|
|
132
|
+
"version": "3",
|
|
133
133
|
"description": "Selectable UX expert skill for UI-changing features, responsive design, flows, states, accessibility, and binding mockups.",
|
|
134
134
|
"changes": [
|
|
135
|
-
"
|
|
135
|
+
"Tightens final responses so UX spec updates report only the output path unless inline review is requested."
|
|
136
136
|
]
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -161,10 +161,9 @@ Do not:
|
|
|
161
161
|
|
|
162
162
|
After implementing one step, briefly report:
|
|
163
163
|
|
|
164
|
+
- that the step finished
|
|
164
165
|
- current step file path
|
|
165
|
-
-
|
|
166
|
-
- validation run and result
|
|
167
|
-
- any risks, blockers, or follow-up questions
|
|
166
|
+
- the next step file path, or that no next step remains
|
|
168
167
|
- that you are waiting for user approval before marking the step approved, committing it, and continuing to the next step
|
|
169
168
|
|
|
170
169
|
After approving and committing the final step in a story implementation plan, also briefly report the Epic continuation check result:
|
|
@@ -110,3 +110,7 @@ Use this structure as a starting point. Delete sections that do not add value.
|
|
|
110
110
|
## Quality bar
|
|
111
111
|
|
|
112
112
|
A good technical design is short, specific, and useful. It should not try to be the product brief, architecture skill, clean-code skill, implementation plan, or ticket backlog.
|
|
113
|
+
|
|
114
|
+
## Final response behavior
|
|
115
|
+
|
|
116
|
+
After writing the file, report only the path. Do not paste the full technical design unless the user asks to review it inline.
|
|
@@ -89,3 +89,7 @@ Use only helpful sections from this shape:
|
|
|
89
89
|
```
|
|
90
90
|
|
|
91
91
|
The Binding Mockups section is authoritative for downstream work unless this UX spec is revised.
|
|
92
|
+
|
|
93
|
+
## Final response behavior
|
|
94
|
+
|
|
95
|
+
After writing the file, report only the path. Do not paste the full UX spec unless the user asks to review it inline.
|