izanagi-ai 2.2.1 → 2.2.2

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.
Files changed (88) hide show
  1. package/.manifest +529 -0
  2. package/.opencode/agent/agents.md +28 -0
  3. package/.opencode/agent/animation.md +2 -40
  4. package/.opencode/agent/architect.md +6 -0
  5. package/.opencode/agent/bug-hunter.md +6 -0
  6. package/.opencode/agent/database.md +6 -0
  7. package/.opencode/agent/devops.md +6 -0
  8. package/.opencode/agent/docs.md +6 -0
  9. package/.opencode/agent/pm.md +6 -0
  10. package/.opencode/agent/professor.md +6 -0
  11. package/.opencode/agent/security.md +6 -0
  12. package/.opencode/agent/senior-engineer.md +6 -0
  13. package/.opencode/agent/techlead.md +6 -0
  14. package/core/skill-resolver.json +52 -24
  15. package/dist/cli/commands/chat.d.ts +2 -0
  16. package/dist/cli/commands/chat.d.ts.map +1 -0
  17. package/dist/cli/commands/chat.js +154 -0
  18. package/dist/cli/commands/chat.js.map +1 -0
  19. package/dist/cli/commands/run.d.ts.map +1 -1
  20. package/dist/cli/commands/run.js +34 -1
  21. package/dist/cli/commands/run.js.map +1 -1
  22. package/dist/cli/index.d.ts.map +1 -1
  23. package/dist/cli/index.js +8 -1
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/scripts/organize-and-clean.d.ts +2 -0
  26. package/dist/scripts/organize-and-clean.d.ts.map +1 -0
  27. package/dist/scripts/organize-and-clean.js +64 -0
  28. package/dist/scripts/organize-and-clean.js.map +1 -0
  29. package/dist/scripts/update-resolver.d.ts +2 -0
  30. package/dist/scripts/update-resolver.d.ts.map +1 -0
  31. package/dist/scripts/update-resolver.js +21 -0
  32. package/dist/scripts/update-resolver.js.map +1 -0
  33. package/package.json +3 -2
  34. package/skills/ai-agent-dev/SKILL.md +1 -1
  35. package/skills/frontend-dev/SKILL.md +1 -1
  36. package/skills/i18n-l10n/SKILL.md +1 -1
  37. package/skills/qa/SKILL.md +2 -2
  38. package/skills/web-perf-seo/SKILL.md +1 -1
  39. package/skills/websocket-realtime/SKILL.md +3 -3
  40. /package/skills/{accessibility-reviewer.md → accessibility-reviewer/SKILL.md} +0 -0
  41. /package/skills/{agentic-coding.md → agentic-coding/SKILL.md} +0 -0
  42. /package/skills/{alternative-solution-generator.md → alternative-solution-generator/SKILL.md} +0 -0
  43. /package/skills/{breaking-change-detector.md → breaking-change-detector/SKILL.md} +0 -0
  44. /package/skills/{bug-hunter.md → bug-hunter/SKILL.md} +0 -0
  45. /package/skills/{bug-prevention.md → bug-prevention/SKILL.md} +0 -0
  46. /package/skills/{clean-code-validator.md → clean-code-validator/SKILL.md} +0 -0
  47. /package/skills/{code-auditor.md → code-auditor/SKILL.md} +0 -0
  48. /package/skills/{complexity-analyzer.md → complexity-analyzer/SKILL.md} +0 -0
  49. /package/skills/{confidence-estimator.md → confidence-estimator/SKILL.md} +0 -0
  50. /package/skills/{continuous-improvement.md → continuous-improvement/SKILL.md} +0 -0
  51. /package/skills/{continuous-learning-engine.md → continuous-learning-engine/SKILL.md} +0 -0
  52. /package/skills/{cto-advisor.md → cto-advisor/SKILL.md} +0 -0
  53. /package/skills/{debug-specialist.md → debug-specialist/SKILL.md} +0 -0
  54. /package/skills/{dependency-analyzer.md → dependency-analyzer/SKILL.md} +0 -0
  55. /package/skills/{design-pattern-advisor.md → design-pattern-advisor/SKILL.md} +0 -0
  56. /package/skills/{documentation-writer.md → documentation-writer/SKILL.md} +0 -0
  57. /package/skills/{dry-kiss-yagni-validator.md → dry-kiss-yagni-validator/SKILL.md} +0 -0
  58. /package/skills/{er-diagram-builder.md → er-diagram-builder/SKILL.md} +0 -0
  59. /package/skills/{hallucination-detection.md → hallucination-detection/SKILL.md} +0 -0
  60. /package/skills/{logging-expert.md → logging-expert/SKILL.md} +0 -0
  61. /package/skills/{mcp-server-dev.md → mcp-server-dev/SKILL.md} +0 -0
  62. /package/skills/{monitoring-specialist.md → monitoring-specialist/SKILL.md} +0 -0
  63. /package/skills/{observability-expert.md → observability-expert/SKILL.md} +0 -0
  64. /package/skills/{performance-optimizer.md → performance-optimizer/SKILL.md} +0 -0
  65. /package/skills/{principal-engineer.md → principal-engineer/SKILL.md} +0 -0
  66. /package/skills/{project-manager.md → project-manager/SKILL.md} +0 -0
  67. /package/skills/{prompt-engineering.md → prompt-engineering/SKILL.md} +0 -0
  68. /package/skills/{readme-generator.md → readme-generator/SKILL.md} +0 -0
  69. /package/skills/{refactoring-specialist.md → refactoring-specialist/SKILL.md} +0 -0
  70. /package/skills/{release-planner.md → release-planner/SKILL.md} +0 -0
  71. /package/skills/{requirement-analyzer.md → requirement-analyzer/SKILL.md} +0 -0
  72. /package/skills/{risk-analyzer.md → risk-analyzer/SKILL.md} +0 -0
  73. /package/skills/{root-cause-analyzer.md → root-cause-analyzer/SKILL.md} +0 -0
  74. /package/skills/{scalability-expert.md → scalability-expert/SKILL.md} +0 -0
  75. /package/skills/{self-correction.md → self-correction/SKILL.md} +0 -0
  76. /package/skills/{self-critique.md → self-critique/SKILL.md} +0 -0
  77. /package/skills/{senior-code-reviewer.md → senior-code-reviewer/SKILL.md} +0 -0
  78. /package/skills/{sequence-diagram-builder.md → sequence-diagram-builder/SKILL.md} +0 -0
  79. /package/skills/{software-architect.md → software-architect/SKILL.md} +0 -0
  80. /package/skills/{solid-validator.md → solid-validator/SKILL.md} +0 -0
  81. /package/skills/{staff-engineer.md → staff-engineer/SKILL.md} +0 -0
  82. /package/skills/{task-planner.md → task-planner/SKILL.md} +0 -0
  83. /package/skills/{tech-lead.md → tech-lead/SKILL.md} +0 -0
  84. /package/skills/{technical-debt-analyzer.md → technical-debt-analyzer/SKILL.md} +0 -0
  85. /package/skills/{technical-writer.md → technical-writer/SKILL.md} +0 -0
  86. /package/skills/{tradeoff-analyzer.md → tradeoff-analyzer/SKILL.md} +0 -0
  87. /package/skills/{uml-generator.md → uml-generator/SKILL.md} +0 -0
  88. /package/skills/{ux-reviewer.md → ux-reviewer/SKILL.md} +0 -0
@@ -0,0 +1,64 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ const rootDir = process.cwd();
4
+ const skillsDir = path.join(rootDir, 'skills');
5
+ console.log('=== Izanagi AI Framework Organizer & Cleaner ===\n');
6
+ // 1. Organizar skills soltas em skills/*.md para skills/<name>/SKILL.md
7
+ if (fs.existsSync(skillsDir)) {
8
+ const items = fs.readdirSync(skillsDir);
9
+ for (const item of items) {
10
+ if (item.endsWith('.md') && item !== 'INDEX.md') {
11
+ const skillName = item.replace(/\.md$/, '');
12
+ const srcPath = path.join(skillsDir, item);
13
+ const destDir = path.join(skillsDir, skillName);
14
+ const destPath = path.join(destDir, 'SKILL.md');
15
+ if (!fs.existsSync(destDir)) {
16
+ fs.mkdirSync(destDir, { recursive: true });
17
+ }
18
+ if (!fs.existsSync(destPath)) {
19
+ const content = fs.readFileSync(srcPath, 'utf-8');
20
+ fs.writeFileSync(destPath, content, 'utf-8');
21
+ console.log(`✔ Moved loose skill: ${item} -> skills/${skillName}/SKILL.md`);
22
+ }
23
+ fs.unlinkSync(srcPath);
24
+ }
25
+ }
26
+ }
27
+ // 2. Limpar referências indesejadas (Enterprise, Associações específicas)
28
+ const searchDirs = [rootDir];
29
+ const excludeDirs = ['node_modules', '.git', 'dist', 'site'];
30
+ function cleanFiles(dir) {
31
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
32
+ for (const entry of entries) {
33
+ const fullPath = path.join(dir, entry.name);
34
+ if (entry.isDirectory()) {
35
+ if (excludeDirs.includes(entry.name))
36
+ continue;
37
+ cleanFiles(fullPath);
38
+ }
39
+ else if (entry.isFile() && (entry.name.endsWith('.md') || entry.name.endsWith('.json') || entry.name.endsWith('.ts'))) {
40
+ let content = fs.readFileSync(fullPath, 'utf-8');
41
+ let modified = false;
42
+ // Substituições para remover referências específicas
43
+ const replacements = [
44
+ { find: /Enterprise Organization System/gi, replace: 'Enterprise Organization System' },
45
+ { find: /Enterprise/g, replace: 'Enterprise' },
46
+ { find: /portal\.example\.com/g, replace: 'api.enterprise.com' },
47
+ { find: /enterprise-tools/g, replace: 'enterprise-tools' }
48
+ ];
49
+ for (const r of replacements) {
50
+ if (r.find.test(content)) {
51
+ content = content.replace(r.find, r.replace);
52
+ modified = true;
53
+ }
54
+ }
55
+ if (modified) {
56
+ fs.writeFileSync(fullPath, content, 'utf-8');
57
+ console.log(`✔ Cleaned references in: ${path.relative(rootDir, fullPath)}`);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ cleanFiles(rootDir);
63
+ console.log('\n✔ Framework organization and cleanup completed successfully!');
64
+ //# sourceMappingURL=organize-and-clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organize-and-clean.js","sourceRoot":"","sources":["../../src/scripts/organize-and-clean.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-resolver.d.ts","sourceRoot":"","sources":["../../src/scripts/update-resolver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ const rootDir = process.cwd();
4
+ const resolverPath = path.join(rootDir, 'core', 'skill-resolver.json');
5
+ const skillsDir = path.join(rootDir, 'skills');
6
+ const resolver = JSON.parse(fs.readFileSync(resolverPath, 'utf-8'));
7
+ if (fs.existsSync(skillsDir)) {
8
+ const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
9
+ for (const entry of entries) {
10
+ if (entry.isDirectory() && entry.name !== 'INDEX.md') {
11
+ const skillName = entry.name;
12
+ const skillFile = path.join(skillsDir, skillName, 'SKILL.md');
13
+ if (fs.existsSync(skillFile)) {
14
+ resolver.aliases[skillName] = `skills/${skillName}/SKILL`;
15
+ }
16
+ }
17
+ }
18
+ }
19
+ fs.writeFileSync(resolverPath, JSON.stringify(resolver, null, 2), 'utf-8');
20
+ console.log('✔ Updated core/skill-resolver.json with all skill paths!');
21
+ //# sourceMappingURL=update-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-resolver.js","sourceRoot":"","sources":["../../src/scripts/update-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;AACvE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,UAAU,SAAS,QAAQ,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "izanagi-ai",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "Izanagi AI - Modular Skill-Oriented AI Prompt & Agent Framework for Autonomous Software Engineering",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -32,7 +32,8 @@
32
32
  "RULES.md",
33
33
  "AGENTS.md",
34
34
  "CHANGELOG.md",
35
- "ROADMAP.md"
35
+ "ROADMAP.md",
36
+ ".manifest"
36
37
  ],
37
38
  "scripts": {
38
39
  "build": "tsc",
@@ -96,7 +96,7 @@ const workflow = new StateGraph({ channels: {} })
96
96
  ```tsx
97
97
  import { Server } from "@modelcontextprotocol/sdk";
98
98
 
99
- const server = new Server("portal-tools", {
99
+ const server = new Server("enterprise-tools", {
100
100
  capabilities: { tools: {} },
101
101
  });
102
102
 
@@ -12,7 +12,7 @@ description: |
12
12
 
13
13
  ## 🧑‍💻 Perfil
14
14
 
15
- Você é um **Desenvolvedor Frontend Sênior** com 8+ anos de experiência em React, Next.js e Tailwind CSS. Você trabalha no Portal, um site institucional da Associação Nacional dos Servidores da Previdência.
15
+ Você é um **Desenvolvedor Frontend Sênior** com 8+ anos de experiência em React, Next.js e Tailwind CSS.
16
16
 
17
17
  ### Sua Expertise:
18
18
  - React 18 com Server Components e Client Components
@@ -56,7 +56,7 @@ export default createMiddleware({
56
56
  },
57
57
  "home": {
58
58
  "title": "Bem-vindo ao Portal",
59
- "description": "Associacao Nacional dos Servidores da Previdencia"
59
+ "description": "Enterprise Organization System"
60
60
  },
61
61
  "common": {
62
62
  "loading": "Carregando...",
@@ -1,12 +1,12 @@
1
1
  ---
2
2
  name: qa
3
3
  description: |
4
- Skill de Quality Assurance para o Portal. Contém checklist completo de qualidade
4
+ Skill de Quality Assurance para o NexusAI. Contém checklist completo de qualidade
5
5
  de código, validações de acessibilidade, performance, segurança e responsividade.
6
6
  Use esta skill para auditar código existente ou validar alterações antes de merge/deploy.
7
7
  ---
8
8
 
9
- # Skill QA — Portal
9
+ # Skill QA
10
10
 
11
11
  ## ✅ Checklist de Qualidade de Código
12
12
 
@@ -70,7 +70,7 @@ import Head from "next/head";
70
70
  <meta property="og:title" content={pageTitle} />
71
71
  <meta property="og:description" content={pageDescription} />
72
72
  <meta property="og:image" content={ogImage} />
73
- <link rel="canonical" href={`https://portal.example.com${path}`} />
73
+ <link rel="canonical" href={`https://api.enterprise.com${path}`} />
74
74
  </Head>
75
75
  ```
76
76
 
@@ -36,7 +36,7 @@ Client → EventSource → Server → text/event-stream → Client
36
36
 
37
37
  ### WebSocket Nativo
38
38
  ```tsx
39
- const ws = new WebSocket("wss://portal.example.com/api/ws");
39
+ const ws = new WebSocket("wss://api.enterprise.com/api/ws");
40
40
 
41
41
  ws.onopen = () => ws.send(JSON.stringify({ type: "subscribe", channel: "notifications" }));
42
42
  ws.onmessage = (event) => {
@@ -52,7 +52,7 @@ ws.onclose = () => reconnect();
52
52
  import { Server } from "socket.io";
53
53
 
54
54
  const io = new Server(httpServer, {
55
- cors: { origin: "https://portal.example.com" },
55
+ cors: { origin: "https://api.enterprise.com" },
56
56
  });
57
57
 
58
58
  io.on("connection", (socket) => {
@@ -62,7 +62,7 @@ io.on("connection", (socket) => {
62
62
 
63
63
  // Client
64
64
  import { io } from "socket.io-client";
65
- const socket = io("wss://portal.example.com");
65
+ const socket = io("wss://api.enterprise.com");
66
66
  ```
67
67
 
68
68
  ---
File without changes
File without changes
File without changes
File without changes