awesome-agv 3.2.0 → 3.4.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 CHANGED
@@ -333,9 +333,8 @@ Skills are deep expertise modules loaded on demand — agents only pay the token
333
333
  * **[Convergence Loop](.agents/skills/convergence-loop/SKILL.md)**: Iterative problem solving protocol for coordinators.
334
334
  * **[Fault Recovery](.agents/skills/fault-recovery/SKILL.md)**: Structured fault tolerance and escalation ladder.
335
335
  * **[Integrity Enforcement](.agents/skills/integrity-enforcement/SKILL.md)**: Zero-tolerance compliance checking for the arbiter agent.
336
- * **[Parallel Dispatch](.agents/skills/parallel-dispatch/SKILL.md)**: MECE task decomposition, file ownership enforcement, DAG-based execution, and safe merge protocol for intra-domain parallel dispatch. The safety invariants that prevent merge chaos when multiple agents write in parallel. Applies recursively at every nesting depth.
337
- * **[Scope Decomposition](.agents/skills/scope-decomposition/SKILL.md)**: Project and mission decomposition techniques.
338
- * **[Audit Checklist](.agents/skills/audit-checklist/SKILL.md)**: Consolidated audit checklists for code review and verification — loaded by `/audit` workflow and multi-agent review pipelines.
336
+ * **[Parallel Dispatch](.agents/skills/parallel-dispatch/SKILL.md)**: MECE task decomposition, scope sizing, file ownership enforcement, DAG-based execution, and safe merge protocol for intra-domain parallel dispatch. Includes scope decomposition techniques previously in a separate skill.
337
+ * **[Agent Protocols](.agents/skills/agent-protocols/SKILL.md)**: Shared behavioral protocols for all agents: recursive nesting, pre-implementation restatement, agent definition cascade, and parallel dispatch format.
339
338
  * **[Acceptance Review](.agents/skills/acceptance-review/SKILL.md)**: Spec adherence and deliverable completeness verification — ensures what was delivered matches what was requested.
340
339
 
341
340
  #### 🌐 Language & Framework Idioms (26)
package/agv.config.json CHANGED
@@ -34,11 +34,11 @@
34
34
  "perf-optimization",
35
35
  "refactoring-patterns",
36
36
  "research-methodology",
37
- "scope-decomposition",
38
37
  "sequential-thinking",
39
38
  "supply-chain-security",
40
39
  "testability-patterns",
41
- "testing-strategy"
40
+ "testing-strategy",
41
+ "agent-protocols"
42
42
  ],
43
43
  "stacks": {
44
44
  "go": {
@@ -254,9 +254,8 @@
254
254
  "fault-recovery",
255
255
  "integrity-enforcement",
256
256
  "parallel-dispatch",
257
- "scope-decomposition",
258
- "audit-checklist",
259
- "acceptance-review"
257
+ "acceptance-review",
258
+ "agent-protocols"
260
259
  ]
261
260
  }
262
261
  }
@@ -694,6 +694,35 @@ function writeAgvrc(targetDir, mode, selectedStacks, deselected) {
694
694
  fs.writeFileSync(rcPath, JSON.stringify(config, null, 2) + '\n');
695
695
  }
696
696
 
697
+ // ── Patch .gitignore ───────────────────────────────────────────────────────────
698
+ const AGENTWORK_ENTRY = '.agentwork/';
699
+
700
+ /**
701
+ * Ensures .agentwork/ is listed in .gitignore.
702
+ * Creates .gitignore if it doesn't exist.
703
+ * Returns: 'created' | 'patched' | 'already_present'
704
+ */
705
+ function patchGitignore(targetDir) {
706
+ const gitignorePath = path.join(targetDir, '.gitignore');
707
+
708
+ if (!fs.existsSync(gitignorePath)) {
709
+ fs.writeFileSync(gitignorePath, `${AGENTWORK_ENTRY}\n`, 'utf8');
710
+ return 'created';
711
+ }
712
+
713
+ const content = fs.readFileSync(gitignorePath, 'utf8');
714
+ const lines = content.split('\n').map((l) => l.trim());
715
+
716
+ if (lines.includes(AGENTWORK_ENTRY)) {
717
+ return 'already_present';
718
+ }
719
+
720
+ // Append with a preceding newline if the file doesn't end with one
721
+ const separator = content.endsWith('\n') ? '' : '\n';
722
+ fs.appendFileSync(gitignorePath, `${separator}${AGENTWORK_ENTRY}\n`, 'utf8');
723
+ return 'patched';
724
+ }
725
+
697
726
  // ── Read existing .agvrc ───────────────────────────────────────────────────────
698
727
  function readAgvrc(targetDir) {
699
728
  const rcPath = path.join(targetDir, AGENT_DIR, CONFIG_FILE);
@@ -760,7 +789,7 @@ function readManifest(tarballPath) {
760
789
  }
761
790
 
762
791
  // ── Print Success Summary ──────────────────────────────────────────────────────
763
- function printSuccess(targetDir, mode, selectedStacks) {
792
+ function printSuccess(targetDir, mode, selectedStacks, gitignoreResult) {
764
793
  const agentDir = path.join(targetDir, AGENT_DIR);
765
794
  const rulesDir = path.join(agentDir, 'rules');
766
795
  const skillsDir = path.join(agentDir, 'skills');
@@ -788,6 +817,16 @@ function printSuccess(targetDir, mode, selectedStacks) {
788
817
  ? `${icon.target} Curated`
789
818
  : `${icon.gear} Advanced`;
790
819
 
820
+ // Gitignore status message
821
+ let gitignoreMsg;
822
+ if (gitignoreResult === 'created') {
823
+ gitignoreMsg = `${icon.check} ${c.bold}.gitignore${c.reset} created with ${c.cyan}.agentwork/${c.reset} entry`;
824
+ } else if (gitignoreResult === 'patched') {
825
+ gitignoreMsg = `${icon.check} ${c.bold}.gitignore${c.reset} patched — added ${c.cyan}.agentwork/${c.reset}`;
826
+ } else {
827
+ gitignoreMsg = `${icon.check} ${c.bold}.gitignore${c.reset} already contains ${c.cyan}.agentwork/${c.reset}`;
828
+ }
829
+
791
830
  console.log(`
792
831
  ${c.green}${c.bold} Installation complete! ${icon.rocket}${c.reset}
793
832
 
@@ -798,6 +837,8 @@ ${c.green}${c.bold} Installation complete! ${icon.rocket}${c.reset}
798
837
  ${icon.tool} ${c.bold}${skillsCount}${c.reset} Skills ${c.dim}Debugging, design, code review, language idioms${c.reset}
799
838
  ${icon.cycle} ${c.bold}${workflowsCount}${c.reset} Workflows ${c.dim}End-to-end dev processes${c.reset}
800
839
  🤖 ${c.bold}${agentsCount}${c.reset} Agents ${c.dim}Specialized multi-agent personas${c.reset}
840
+
841
+ ${gitignoreMsg}
801
842
  `);
802
843
 
803
844
  if (selectedStacks && selectedStacks.size > 0) {
@@ -1005,8 +1046,11 @@ async function main() {
1005
1046
  // ── Write .agvrc ──
1006
1047
  writeAgvrc(options.targetDir, mode, selectedStackKeys, deselected);
1007
1048
 
1049
+ // ── Patch .gitignore ──
1050
+ const gitignoreResult = patchGitignore(options.targetDir);
1051
+
1008
1052
  // ── Success ──
1009
- printSuccess(options.targetDir, mode, selectedStackKeys);
1053
+ printSuccess(options.targetDir, mode, selectedStackKeys, gitignoreResult);
1010
1054
  } catch (err) {
1011
1055
  console.error(`\n ${icon.error} ${c.red}Installation failed:${c.reset} ${err.message}\n`);
1012
1056
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awesome-agv",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "description": "Selective installer for Awesome AGV — a rugged, high-quality AI Agent configuration suite with 25 rules, 59 skills, 12 workflows, and 21 agent personas.",
5
5
  "bin": {
6
6
  "awesome-agv": "./bin/awesome-agv.js"