codymaster 4.5.4 → 4.8.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.
Files changed (133) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/README.md +86 -31
  3. package/dist/backends/viking-backend.js +235 -0
  4. package/dist/backends/viking-http-client.js +176 -0
  5. package/dist/browse-server.js +251 -0
  6. package/dist/cli/command-registry.js +26 -0
  7. package/dist/cli/commands/agent.js +120 -0
  8. package/dist/cli/commands/dashboard.js +93 -0
  9. package/dist/cli/commands/design-studio.js +111 -0
  10. package/dist/cli/commands/distro.js +25 -0
  11. package/dist/cli/commands/engineering.js +488 -0
  12. package/dist/cli/commands/project.js +324 -0
  13. package/dist/cli/commands/skill-chain.js +269 -0
  14. package/dist/cli/commands/system.js +89 -0
  15. package/dist/cli/commands/task.js +254 -0
  16. package/dist/cli/update-check.js +83 -0
  17. package/dist/cm-config.js +110 -0
  18. package/dist/cm-suggest.js +77 -0
  19. package/dist/continuity.js +8 -0
  20. package/dist/distro-validate.js +54 -0
  21. package/dist/guardian-core.js +74 -0
  22. package/dist/index.js +36 -2759
  23. package/dist/mcp-context-server.js +60 -1
  24. package/dist/mcp-skills-tools.js +81 -0
  25. package/dist/retro-summary.js +70 -0
  26. package/dist/second-opinion-providers.js +79 -0
  27. package/dist/sprint-pipeline.js +228 -0
  28. package/dist/storage-backend.js +63 -0
  29. package/dist/utils/cli-utils.js +76 -0
  30. package/dist/utils/skill-utils.js +32 -0
  31. package/install.sh +286 -58
  32. package/package.json +16 -5
  33. package/scripts/build-skills.mjs +51 -0
  34. package/scripts/gate-0-repo-hygiene.js +75 -0
  35. package/scripts/postinstall.js +56 -1
  36. package/scripts/security-scan.js +1 -1
  37. package/scripts/validate-skills.mjs +42 -0
  38. package/scripts/viking-demo.ts +105 -0
  39. package/skills/CLAUDE.md +2 -2
  40. package/skills/_shared/helpers.md +10 -0
  41. package/skills/cm-ads-tracker/SKILL.md +3 -6
  42. package/skills/cm-browse/SKILL.md +28 -0
  43. package/skills/cm-conductor-worktrees/SKILL.md +24 -0
  44. package/skills/cm-content-factory/SKILL.md +1 -1
  45. package/skills/cm-content-factory/landing/docs/content/changelog.md +36 -0
  46. package/skills/cm-content-factory/landing/docs/content/deployment.md +46 -0
  47. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +67 -0
  48. package/skills/cm-content-factory/landing/docs/content/openspace.md +27 -0
  49. package/skills/cm-content-factory/landing/docs/content/openviking.md +33 -0
  50. package/skills/cm-content-factory/landing/docs/content/use-cases.md +26 -0
  51. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +28 -0
  52. package/skills/cm-content-factory/landing/docs/index.html +240 -0
  53. package/skills/cm-content-factory/landing/index.html +99 -99
  54. package/skills/cm-content-factory/landing/script.js +42 -0
  55. package/skills/cm-content-factory/landing/translations.js +400 -400
  56. package/skills/cm-continuity/SKILL.md +33 -6
  57. package/skills/cm-design-studio/SKILL.md +30 -0
  58. package/skills/cm-ecosystem-roadmap/SKILL.md +11 -0
  59. package/skills/cm-engineering-meta/SKILL.md +69 -0
  60. package/skills/cm-growth-hacking/SKILL.md +1 -12
  61. package/skills/cm-guardian-runtime/SKILL.md +22 -0
  62. package/skills/cm-mcp-engineering/SKILL.md +18 -0
  63. package/skills/cm-notebooklm/SKILL.md +1 -17
  64. package/skills/cm-post-deploy-canary/SKILL.md +18 -0
  65. package/skills/cm-qa-visual-cli/SKILL.md +18 -0
  66. package/skills/cm-retro-cli/SKILL.md +19 -0
  67. package/skills/cm-second-opinion-cli/SKILL.md +19 -0
  68. package/skills/cm-secret-shield/SKILL.md +2 -2
  69. package/skills/cm-sprint-bus/SKILL.md +29 -0
  70. package/skills/cm-start/SKILL.md +11 -2
  71. package/skills/cm-tdd/SKILL.md +61 -74
  72. package/skills/profiles/README.md +21 -0
  73. package/skills/profiles/core.txt +23 -0
  74. package/skills/profiles/design.txt +6 -0
  75. package/skills/profiles/full.txt +58 -0
  76. package/skills/profiles/growth.txt +10 -0
  77. package/skills/profiles/knowledge.txt +7 -0
  78. package/scripts/test-gemini.js +0 -13
  79. package/skills/cm-frappe-agent/SKILL.md +0 -134
  80. package/skills/cm-frappe-agent/agents/doctype-architect.md +0 -596
  81. package/skills/cm-frappe-agent/agents/erpnext-customizer.md +0 -643
  82. package/skills/cm-frappe-agent/agents/frappe-backend.md +0 -814
  83. package/skills/cm-frappe-agent/agents/frappe-custom-frontend.md +0 -557
  84. package/skills/cm-frappe-agent/agents/frappe-debugger.md +0 -625
  85. package/skills/cm-frappe-agent/agents/frappe-fixer.md +0 -275
  86. package/skills/cm-frappe-agent/agents/frappe-frontend.md +0 -660
  87. package/skills/cm-frappe-agent/agents/frappe-installer.md +0 -158
  88. package/skills/cm-frappe-agent/agents/frappe-performance.md +0 -307
  89. package/skills/cm-frappe-agent/agents/frappe-planner.md +0 -419
  90. package/skills/cm-frappe-agent/agents/frappe-remote-ops.md +0 -153
  91. package/skills/cm-frappe-agent/agents/github-workflow.md +0 -286
  92. package/skills/cm-frappe-agent/commands/frappe-app.md +0 -351
  93. package/skills/cm-frappe-agent/commands/frappe-backend.md +0 -162
  94. package/skills/cm-frappe-agent/commands/frappe-bench.md +0 -254
  95. package/skills/cm-frappe-agent/commands/frappe-debug.md +0 -263
  96. package/skills/cm-frappe-agent/commands/frappe-doctype-create.md +0 -272
  97. package/skills/cm-frappe-agent/commands/frappe-doctype-field.md +0 -310
  98. package/skills/cm-frappe-agent/commands/frappe-erpnext.md +0 -210
  99. package/skills/cm-frappe-agent/commands/frappe-fix.md +0 -59
  100. package/skills/cm-frappe-agent/commands/frappe-frontend.md +0 -210
  101. package/skills/cm-frappe-agent/commands/frappe-fullstack.md +0 -243
  102. package/skills/cm-frappe-agent/commands/frappe-github.md +0 -57
  103. package/skills/cm-frappe-agent/commands/frappe-install.md +0 -52
  104. package/skills/cm-frappe-agent/commands/frappe-plan.md +0 -442
  105. package/skills/cm-frappe-agent/commands/frappe-remote.md +0 -58
  106. package/skills/cm-frappe-agent/commands/frappe-test.md +0 -356
  107. package/skills/cm-frappe-agent/docs/README.md +0 -51
  108. package/skills/cm-frappe-agent/docs/agents-catalog.md +0 -113
  109. package/skills/cm-frappe-agent/docs/architecture.md +0 -149
  110. package/skills/cm-frappe-agent/docs/commands-catalog.md +0 -82
  111. package/skills/cm-frappe-agent/docs/resources-catalog.md +0 -66
  112. package/skills/cm-frappe-agent/docs/sitemap-urls.txt +0 -52
  113. package/skills/cm-frappe-agent/docs/sitemap.md +0 -81
  114. package/skills/cm-frappe-agent/docs/sop/user-guide.md +0 -178
  115. package/skills/cm-frappe-agent/docs/sop/vibe-coding-guide.md +0 -122
  116. package/skills/cm-frappe-agent/resources/7-layer-architecture.md +0 -985
  117. package/skills/cm-frappe-agent/resources/bench_commands.md +0 -73
  118. package/skills/cm-frappe-agent/resources/code-patterns-guide.md +0 -948
  119. package/skills/cm-frappe-agent/resources/common_pitfalls.md +0 -266
  120. package/skills/cm-frappe-agent/resources/doctype-registry.md +0 -158
  121. package/skills/cm-frappe-agent/resources/installation-guide.md +0 -289
  122. package/skills/cm-frappe-agent/resources/rest-api-patterns.md +0 -182
  123. package/skills/cm-frappe-agent/resources/scaffold_checklist.md +0 -82
  124. package/skills/cm-frappe-agent/resources/upgrade_patterns.md +0 -113
  125. package/skills/cm-frappe-agent/resources/web-form-patterns.md +0 -252
  126. package/skills/cm-frappe-agent/skills/bench-commands/SKILL.md +0 -621
  127. package/skills/cm-frappe-agent/skills/client-scripts/SKILL.md +0 -642
  128. package/skills/cm-frappe-agent/skills/doctype-patterns/SKILL.md +0 -576
  129. package/skills/cm-frappe-agent/skills/frappe-api/SKILL.md +0 -740
  130. package/skills/cm-frappe-agent/skills/remote-operations/SKILL.md +0 -47
  131. package/skills/cm-frappe-agent/skills/server-scripts/SKILL.md +0 -608
  132. package/skills/cm-frappe-agent/skills/web-forms/SKILL.md +0 -46
  133. package/skills/frappe-app-builder.zip +0 -0
@@ -4,16 +4,16 @@
4
4
  <head>
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Content FactorySelf-Learning AI Content Engine | Tody AI</title>
7
+ <title>CodyMaster v5The Neural Spine for AI-Native Engineering</title>
8
8
  <meta name="description"
9
- content="AI-powered content engine that researches, writes, audits, and publishes then learns from feedback. 20+ niche templates, 8 operating modes, $0 writer cost. Config-driven, self-improving." />
9
+ content="The high-performance autonomous backbone for AI agents. Featuring OpenViking semantic memory, context bus orchestration, and OpenSpace workspace isolation. Build real products with context-aware intelligence." />
10
10
  <meta name="keywords"
11
- content="AI content factory, content automation, SEO content, self-learning AI, content pipeline, AI writer" />
11
+ content="CodyMaster v5, AI agent backbone, OpenViking, OpenSpace, semantic memory, context bus, AI-native engineering" />
12
12
 
13
13
  <!-- Open Graph -->
14
- <meta property="og:title" content="Content FactorySelf-Learning AI Content Engine" />
14
+ <meta property="og:title" content="CodyMaster v5The Neural Spine for AI Agents" />
15
15
  <meta property="og:description"
16
- content="Config-driven AI content engine. Researches, writes, audits, publishes — and gets smarter with every use." />
16
+ content="Autonomous backbone for AI-Native Engineering. Unified context, semantic memory, and resource management." />
17
17
  <meta property="og:type" content="website" />
18
18
 
19
19
  <!-- Fonts -->
@@ -40,15 +40,15 @@
40
40
  <div class="nav-logo-icon">
41
41
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5"
42
42
  stroke-linecap="round" stroke-linejoin="round">
43
- <path d="M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z" />
43
+ <path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" />
44
44
  </svg>
45
45
  </div>
46
- Content Factory
46
+ CodyMaster v5
47
47
  </a>
48
48
 
49
49
  <div class="nav-links" id="nav-links">
50
50
  <a href="#features" data-i18n="nav.features">Features</a>
51
- <a href="#how-it-works" data-i18n="nav.howItWorks">How It Works</a>
51
+ <a href="docs/" data-i18n="nav.docs">Docs</a>
52
52
  <a href="#pricing" data-i18n="nav.pricing">Pricing</a>
53
53
  <a href="#faq" data-i18n="nav.faq">FAQ</a>
54
54
  <select id="lang-select" class="lang-select" aria-label="Select Language">
@@ -60,7 +60,7 @@
60
60
  </div>
61
61
 
62
62
  <div style="display:flex;align-items:center;gap:12px;">
63
- <a href="https://github.com/todyai/content-factory" class="nav-github" target="_blank" rel="noopener">
63
+ <a href="https://github.com/tody-agent/codymaster" class="nav-github" target="_blank" rel="noopener">
64
64
  <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
65
65
  <path
66
66
  d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
@@ -120,20 +120,20 @@
120
120
 
121
121
  <div class="hero-stats animate-in delay-4">
122
122
  <div class="stat-item">
123
- <span class="stat-value">20+</span>
124
- <span class="stat-label" data-i18n="hero.statTemplates">Niche Templates</span>
123
+ <span class="stat-value">69+</span>
124
+ <span class="stat-label" data-i18n="hero.statTemplates">Agent Skills</span>
125
125
  </div>
126
126
  <div class="stat-item">
127
- <span class="stat-value">8</span>
128
- <span class="stat-label" data-i18n="hero.statModes">Operating Modes</span>
127
+ <span class="stat-value">3</span>
128
+ <span class="stat-label" data-i18n="hero.statModes">Memory Tiers</span>
129
129
  </div>
130
130
  <div class="stat-item">
131
- <span class="stat-value">$0</span>
132
- <span class="stat-label" data-i18n="hero.statCost">Writer Cost</span>
131
+ <span class="stat-value">8+</span>
132
+ <span class="stat-label" data-i18n="hero.statCost">Deployment Gates</span>
133
133
  </div>
134
134
  <div class="stat-item">
135
- <span class="stat-value">3</span>
136
- <span class="stat-label" data-i18n="hero.statMemory">Layer Memory</span>
135
+ <span class="stat-value">∞</span>
136
+ <span class="stat-label" data-i18n="hero.statMemory">Context Depth</span>
137
137
  </div>
138
138
  </div>
139
139
  </div>
@@ -210,11 +210,11 @@
210
210
  <!-- ===== MODES GRID ===== -->
211
211
  <section class="modes section" id="features">
212
212
  <div class="container">
213
- <p class="section-label reveal">8 OPERATING MODES</p>
214
- <h2 class="section-title reveal">
213
+ <p class="section-label reveal" data-i18n="features.label">8 OPERATING MODES</p>
214
+ <h2 class="section-title reveal" data-i18n="features.title">
215
215
  One engine. Every content workflow.
216
216
  </h2>
217
- <p class="section-subtitle reveal">
217
+ <p class="section-subtitle reveal" data-i18n="features.subtitle">
218
218
  From research to publish — each mode is a specialist. Run one at a time, or chain them all in Pipeline mode.
219
219
  </p>
220
220
 
@@ -228,8 +228,8 @@
228
228
  <line x1="12" y1="15" x2="12" y2="3" />
229
229
  </svg>
230
230
  </div>
231
- <h3>Extract</h3>
232
- <p>Pull structured knowledge from docs, PDFs, URLs into your knowledge base.</p>
231
+ <h3 data-i18n="features.m1Name">Extract</h3>
232
+ <p data-i18n="features.m1Desc">Pull structured knowledge from docs, PDFs, URLs into your knowledge base.</p>
233
233
  </div>
234
234
 
235
235
  <div class="mode-card reveal">
@@ -243,8 +243,8 @@
243
243
  <line x1="10" y1="9" x2="8" y2="9" />
244
244
  </svg>
245
245
  </div>
246
- <h3>Plan</h3>
247
- <p>Generate topic queues from your knowledge base — prioritized by monetization potential.</p>
246
+ <h3 data-i18n="features.m2Name">Plan</h3>
247
+ <p data-i18n="features.m2Desc">Generate topic queues from your knowledge base — prioritized by monetization potential.</p>
248
248
  </div>
249
249
 
250
250
  <div class="mode-card reveal">
@@ -255,8 +255,8 @@
255
255
  <path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z" />
256
256
  </svg>
257
257
  </div>
258
- <h3>Write</h3>
259
- <p>AI writes with memory context — learning from past wins and mistakes.</p>
258
+ <h3 data-i18n="features.m3Name">Write</h3>
259
+ <p data-i18n="features.m3Desc">AI writes with memory context — learning from past wins and mistakes.</p>
260
260
  </div>
261
261
 
262
262
  <div class="mode-card reveal">
@@ -267,8 +267,8 @@
267
267
  <path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1-2 2h11" />
268
268
  </svg>
269
269
  </div>
270
- <h3>Audit</h3>
271
- <p>Auto quality-check every article. Auto-fix issues. Penalty for fails.</p>
270
+ <h3 data-i18n="features.m4Name">Audit</h3>
271
+ <p data-i18n="features.m4Desc">Auto quality-check every article. Auto-fix issues. Penalty for fails.</p>
272
272
  </div>
273
273
 
274
274
  <div class="mode-card reveal">
@@ -279,8 +279,8 @@
279
279
  <line x1="21" y1="21" x2="16.65" y2="16.65" />
280
280
  </svg>
281
281
  </div>
282
- <h3>SEO</h3>
283
- <p>Extract & apply: title, meta, schema markup, internal links, keyword density.</p>
282
+ <h3 data-i18n="features.m5Name">SEO</h3>
283
+ <p data-i18n="features.m5Desc">Extract & apply: title, meta, schema markup, internal links, keyword density.</p>
284
284
  </div>
285
285
 
286
286
  <div class="mode-card reveal">
@@ -292,8 +292,8 @@
292
292
  <path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3" />
293
293
  </svg>
294
294
  </div>
295
- <h3>Publish</h3>
296
- <p>Build and deploy content to production. One command, zero friction.</p>
295
+ <h3 data-i18n="features.m6Name">Publish</h3>
296
+ <p data-i18n="features.m6Desc">Build and deploy content to production. One command, zero friction.</p>
297
297
  </div>
298
298
 
299
299
  <div class="mode-card reveal">
@@ -305,8 +305,8 @@
305
305
  <line x1="12" y1="8" x2="12.01" y2="8" />
306
306
  </svg>
307
307
  </div>
308
- <h3>Research</h3>
309
- <p>Auto-research any topic: web search, competitor analysis, knowledge synthesis.</p>
308
+ <h3 data-i18n="features.m7Name">Research</h3>
309
+ <p data-i18n="features.m7Desc">Auto-research any topic: web search, competitor analysis, knowledge synthesis.</p>
310
310
  </div>
311
311
 
312
312
  <div class="mode-card reveal">
@@ -317,8 +317,8 @@
317
317
  <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
318
318
  </svg>
319
319
  </div>
320
- <h3>Learn</h3>
321
- <p>Detects edits & deletes. Extracts patterns. Gets smarter over time.</p>
320
+ <h3 data-i18n="features.m8Name">Learn</h3>
321
+ <p data-i18n="features.m8Desc">Detects edits & deletes. Extracts patterns. Gets smarter over time.</p>
322
322
  </div>
323
323
  </div>
324
324
  </div>
@@ -329,30 +329,30 @@
329
329
  <!-- ===== 3-STEP PROCESS ===== -->
330
330
  <section class="process section" id="how-it-works">
331
331
  <div class="container">
332
- <p class="section-label reveal">HOW IT WORKS</p>
333
- <h2 class="section-title reveal">
332
+ <p class="section-label reveal" data-i18n="process.label">HOW IT WORKS</p>
333
+ <h2 class="section-title reveal" data-i18n="process.title">
334
334
  3 steps. That's it.
335
335
  </h2>
336
- <p class="section-subtitle reveal">
336
+ <p class="section-subtitle reveal" data-i18n="process.subtitle">
337
337
  No complex setup. No learning curve. One config file drives everything.
338
338
  </p>
339
339
 
340
340
  <div class="process-steps">
341
341
  <div class="process-step reveal">
342
342
  <div class="process-step-number">1</div>
343
- <h3>Configure</h3>
344
- <p>Set your niche, brand voice, content types, and SEO rules in one JSON config. 20+ ready-made templates
343
+ <h3 data-i18n="process.s1Name">Configure</h3>
344
+ <p data-i18n="process.s1Desc">Set your niche, brand voice, content types, and SEO rules in one JSON config. 20+ ready-made templates
345
345
  included.</p>
346
346
  </div>
347
347
  <div class="process-step reveal">
348
348
  <div class="process-step-number">2</div>
349
- <h3>Run Pipeline</h3>
350
- <p>One command fires the full engine: research → plan → write → audit → SEO → publish. Fully automated.</p>
349
+ <h3 data-i18n="process.s2Name">Run Pipeline</h3>
350
+ <p data-i18n="process.s2Desc">One command fires the full engine: research → plan → write → audit → SEO → publish. Fully automated.</p>
351
351
  </div>
352
352
  <div class="process-step reveal">
353
353
  <div class="process-step-number">3</div>
354
- <h3>Publish &amp; Learn</h3>
355
- <p>Content deploys instantly. The system learns from your feedback, scoring every article to improve the next
354
+ <h3 data-i18n="process.s3Name">Publish &amp; Learn</h3>
355
+ <p data-i18n="process.s3Desc">Content deploys instantly. The system learns from your feedback, scoring every article to improve the next
356
356
  batch.</p>
357
357
  </div>
358
358
  </div>
@@ -364,12 +364,12 @@
364
364
  <!-- ===== INTELLIGENCE ===== -->
365
365
  <section class="intelligence section" id="intelligence">
366
366
  <div class="container">
367
- <p class="section-label reveal">SELF-LEARNING INTELLIGENCE</p>
368
- <h2 class="section-title reveal">
367
+ <p class="section-label reveal" data-i18n="intelligence.label">SELF-LEARNING INTELLIGENCE</p>
368
+ <h2 class="section-title reveal" data-i18n="intelligence.title">
369
369
  The more you use it,<br />
370
370
  <span class="gradient-text">the smarter it gets.</span>
371
371
  </h2>
372
- <p class="section-subtitle reveal">
372
+ <p class="section-subtitle reveal" data-i18n="intelligence.subtitle">
373
373
  3-layer memory architecture + reward/penalty scoreboard. Every edit, every publish, every feedback loop makes
374
374
  the engine sharper.
375
375
  </p>
@@ -383,8 +383,8 @@
383
383
  <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
384
384
  </svg>
385
385
  </div>
386
- <h3>Semantic Memory</h3>
387
- <p>Long-term patterns: writing style, SEO rules, recurring mistakes to avoid.</p>
386
+ <h3 data-i18n="intelligence.mem1Name">Semantic Memory</h3>
387
+ <p data-i18n="intelligence.mem1Desc">Long-term patterns: writing style, SEO rules, recurring mistakes to avoid.</p>
388
388
  </div>
389
389
  <div class="memory-card reveal">
390
390
  <div class="memory-card-icon episodic">
@@ -394,8 +394,8 @@
394
394
  <polyline points="12 6 12 12 16 14" />
395
395
  </svg>
396
396
  </div>
397
- <h3>Episodic Memory</h3>
398
- <p>Per-session experiences with outcomes — what worked, what failed, and why.</p>
397
+ <h3 data-i18n="intelligence.mem2Name">Episodic Memory</h3>
398
+ <p data-i18n="intelligence.mem2Desc">Per-session experiences with outcomes — what worked, what failed, and why.</p>
399
399
  </div>
400
400
  <div class="memory-card reveal">
401
401
  <div class="memory-card-icon working">
@@ -406,8 +406,8 @@
406
406
  <line x1="12" y1="17" x2="12" y2="21" />
407
407
  </svg>
408
408
  </div>
409
- <h3>Working Memory</h3>
410
- <p>Current session context — active config, topic queue, and live scoring.</p>
409
+ <h3 data-i18n="intelligence.mem3Name">Working Memory</h3>
410
+ <p data-i18n="intelligence.mem3Desc">Current session context — active config, topic queue, and live scoring.</p>
411
411
  </div>
412
412
  </div>
413
413
 
@@ -446,95 +446,95 @@
446
446
  <!-- ===== PRICING ===== -->
447
447
  <section class="pricing section" id="pricing">
448
448
  <div class="container">
449
- <p class="section-label reveal">PRICING</p>
450
- <h2 class="section-title reveal">
449
+ <p class="section-label reveal" data-i18n="pricing.label">PRICING</p>
450
+ <h2 class="section-title reveal" data-i18n="pricing.title">
451
451
  Start free. Upgrade when you're ready.
452
452
  </h2>
453
- <p class="section-subtitle reveal">
453
+ <p class="section-subtitle reveal" data-i18n="pricing.subtitle">
454
454
  No credit card. No lock-in. The engine is yours to run.
455
455
  </p>
456
456
 
457
457
  <div class="pricing-grid">
458
458
  <div class="pricing-card reveal">
459
- <div class="pricing-plan-name">Free</div>
459
+ <div class="pricing-plan-name" data-i18n="pricing.freeName">Free</div>
460
460
  <div class="pricing-price"><span class="currency">$</span>0</div>
461
- <div class="pricing-period">Free forever</div>
461
+ <div class="pricing-period" data-i18n="pricing.freePeriod">Free forever</div>
462
462
  <ul class="pricing-features">
463
- <li>
463
+ <li data-i18n="pricing.free1">
464
464
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
465
465
  <polyline points="20 6 9 17 4 12" />
466
466
  </svg>
467
467
  Core pipeline (Extract → Write → Publish)
468
468
  </li>
469
- <li>
469
+ <li data-i18n="pricing.free2">
470
470
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
471
471
  <polyline points="20 6 9 17 4 12" />
472
472
  </svg>
473
473
  5 niche templates included
474
474
  </li>
475
- <li>
475
+ <li data-i18n="pricing.free3">
476
476
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
477
477
  <polyline points="20 6 9 17 4 12" />
478
478
  </svg>
479
479
  Basic audit & SEO
480
480
  </li>
481
- <li>
481
+ <li data-i18n="pricing.free4">
482
482
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
483
483
  <polyline points="20 6 9 17 4 12" />
484
484
  </svg>
485
485
  Community support
486
486
  </li>
487
487
  </ul>
488
- <a href="#" class="pricing-btn free">Get Started Free</a>
488
+ <a href="#" class="pricing-btn free" data-i18n="pricing.freeBtn">Get Started Free</a>
489
489
  </div>
490
490
 
491
491
  <div class="pricing-card pro reveal">
492
- <div class="pricing-plan-name">Pro</div>
492
+ <div class="pricing-plan-name" data-i18n="pricing.proName">Pro</div>
493
493
  <div class="pricing-price"><span class="currency">$</span>29</div>
494
- <div class="pricing-period">per month</div>
494
+ <div class="pricing-period" data-i18n="pricing.proPeriod">per month</div>
495
495
  <ul class="pricing-features">
496
- <li>
496
+ <li data-i18n="pricing.pro1">
497
497
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
498
498
  <polyline points="20 6 9 17 4 12" />
499
499
  </svg>
500
500
  All 8 operating modes
501
501
  </li>
502
- <li>
502
+ <li data-i18n="pricing.pro2">
503
503
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
504
504
  <polyline points="20 6 9 17 4 12" />
505
505
  </svg>
506
506
  20+ niche templates
507
507
  </li>
508
- <li>
508
+ <li data-i18n="pricing.pro3">
509
509
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
510
510
  <polyline points="20 6 9 17 4 12" />
511
511
  </svg>
512
512
  3-layer memory system
513
513
  </li>
514
- <li>
514
+ <li data-i18n="pricing.pro4">
515
515
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
516
516
  <polyline points="20 6 9 17 4 12" />
517
517
  </svg>
518
518
  Auto-research & monetization scoring
519
519
  </li>
520
- <li>
520
+ <li data-i18n="pricing.pro5">
521
521
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
522
522
  <polyline points="20 6 9 17 4 12" />
523
523
  </svg>
524
524
  OpenClaw extensions
525
525
  </li>
526
- <li>
526
+ <li data-i18n="pricing.pro6">
527
527
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5">
528
528
  <polyline points="20 6 9 17 4 12" />
529
529
  </svg>
530
530
  Priority support
531
531
  </li>
532
532
  </ul>
533
- <a href="#" class="pricing-btn pro-btn">Get Pro Access</a>
533
+ <a href="#" class="pricing-btn pro-btn" data-i18n="pricing.proBtn">Get Pro Access</a>
534
534
  </div>
535
535
  </div>
536
536
 
537
- <div class="pricing-ticker reveal">
537
+ <div class="pricing-ticker reveal" data-i18n="pricing.ticker">
538
538
  ⚡ Early adopter pricing — price increases after 500 users. Lock in your rate now.
539
539
  </div>
540
540
  </div>
@@ -545,16 +545,16 @@
545
545
  <!-- ===== FAQ ===== -->
546
546
  <section class="faq section" id="faq">
547
547
  <div class="container">
548
- <p class="section-label reveal">FAQ</p>
549
- <h2 class="section-title reveal">Common questions</h2>
548
+ <p class="section-label reveal" data-i18n="faq.label">FAQ</p>
549
+ <h2 class="section-title reveal" data-i18n="faq.title">Common questions</h2>
550
550
 
551
551
  <div class="faq-list">
552
552
  <div class="faq-item reveal">
553
- <button class="faq-question" aria-expanded="false">
553
+ <button class="faq-question" aria-expanded="false" data-i18n="faq.q1Title">
554
554
  What AI platforms does Content Factory work with?
555
555
  <span class="faq-icon">+</span>
556
556
  </button>
557
- <div class="faq-answer">
557
+ <div class="faq-answer" data-i18n="faq.q1Ans">
558
558
  <p>Content Factory is a <strong>skill/agent system</strong> — it works with any AI coding tool: Cursor,
559
559
  Claude, Gemini, Amp, Windsurf, and more. It gives your AI the knowledge to produce professional,
560
560
  SEO-optimized content.</p>
@@ -562,11 +562,11 @@
562
562
  </div>
563
563
 
564
564
  <div class="faq-item reveal">
565
- <button class="faq-question" aria-expanded="false">
565
+ <button class="faq-question" aria-expanded="false" data-i18n="faq.q2Title">
566
566
  How does the self-learning memory work?
567
567
  <span class="faq-icon">+</span>
568
568
  </button>
569
- <div class="faq-answer">
569
+ <div class="faq-answer" data-i18n="faq.q2Ans">
570
570
  <p>Three layers: <strong>Semantic</strong> (long-term patterns), <strong>Episodic</strong> (per-session
571
571
  outcomes), and <strong>Working</strong> (current context). When you edit or delete content, the system
572
572
  detects it via git diffs and adjusts its writing patterns. High-scoring content styles get reinforced;
@@ -575,11 +575,11 @@
575
575
  </div>
576
576
 
577
577
  <div class="faq-item reveal">
578
- <button class="faq-question" aria-expanded="false">
578
+ <button class="faq-question" aria-expanded="false" data-i18n="faq.q3Title">
579
579
  Can I use it for my specific niche?
580
580
  <span class="faq-icon">+</span>
581
581
  </button>
582
- <div class="faq-answer">
582
+ <div class="faq-answer" data-i18n="faq.q3Ans">
583
583
  <p>Absolutely. Content Factory is <strong>config-driven and niche-agnostic</strong>. We include 20+
584
584
  ready-made templates: real estate, health & wellness, SaaS, dental, fitness, crypto, e-commerce, and more.
585
585
  You can also create custom configs for any niche.</p>
@@ -587,22 +587,22 @@
587
587
  </div>
588
588
 
589
589
  <div class="faq-item reveal">
590
- <button class="faq-question" aria-expanded="false">
590
+ <button class="faq-question" aria-expanded="false" data-i18n="faq.q4Title">
591
591
  How long does setup take?
592
592
  <span class="faq-icon">+</span>
593
593
  </button>
594
- <div class="faq-answer">
594
+ <div class="faq-answer" data-i18n="faq.q4Ans">
595
595
  <p>About <strong>60 seconds</strong>. Copy a template config, adjust your niche and brand settings, and run
596
596
  the pipeline. No installation, no dependencies beyond Python 3 and your AI tool.</p>
597
597
  </div>
598
598
  </div>
599
599
 
600
600
  <div class="faq-item reveal">
601
- <button class="faq-question" aria-expanded="false">
601
+ <button class="faq-question" aria-expanded="false" data-i18n="faq.q5Title">
602
602
  Is this just another AI writing tool?
603
603
  <span class="faq-icon">+</span>
604
604
  </button>
605
- <div class="faq-answer">
605
+ <div class="faq-answer" data-i18n="faq.q5Ans">
606
606
  <p>No. Most AI tools generate generic content from a prompt. Content Factory is a <strong>complete
607
607
  production system</strong> — it researches, plans topics by monetization potential, writes with brand
608
608
  memory, auto-audits quality, optimizes SEO, and publishes. Then it learns from the results. It's a
@@ -611,11 +611,11 @@
611
611
  </div>
612
612
 
613
613
  <div class="faq-item reveal">
614
- <button class="faq-question" aria-expanded="false">
614
+ <button class="faq-question" aria-expanded="false" data-i18n="faq.q6Title">
615
615
  Can I extend it with custom scripts?
616
616
  <span class="faq-icon">+</span>
617
617
  </button>
618
- <div class="faq-answer">
618
+ <div class="faq-answer" data-i18n="faq.q6Ans">
619
619
  <p>Yes. Content Factory has a built-in <strong>hook system</strong> and <strong>OpenClaw adapter</strong>
620
620
  for extensions. You can add custom pre/post hooks at any pipeline phase, integrate external tools, or
621
621
  build entirely new modes.</p>
@@ -630,18 +630,18 @@
630
630
 
631
631
  <section class="footer-cta">
632
632
  <div class="container">
633
- <h2 class="reveal">
633
+ <h2 class="reveal" data-i18n="footer.ctaTitle">
634
634
  Stop producing noise.<br />
635
635
  <span class="gradient-text">Start producing content that converts.</span>
636
636
  </h2>
637
- <p class="reveal">One config. One command. Infinite, self-improving content.</p>
637
+ <p class="reveal" data-i18n="footer.ctaSub">One config. One command. Infinite, self-improving content.</p>
638
638
  <div class="reveal">
639
639
  <a href="#pricing" class="btn-primary">
640
640
  <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
641
641
  <polygon
642
642
  points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" />
643
643
  </svg>
644
- Start Free Now
644
+ <span data-i18n="footer.ctaBtn">Start Free Now</span>
645
645
  </a>
646
646
  </div>
647
647
  </div>
@@ -655,19 +655,19 @@
655
655
  <div class="footer-logo-icon">
656
656
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5"
657
657
  stroke-linecap="round" stroke-linejoin="round">
658
- <path d="M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z" />
658
+ <path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" />
659
659
  </svg>
660
660
  </div>
661
- Content Factory
661
+ CodyMaster v5
662
662
  </div>
663
663
  <div class="footer-links">
664
- <a href="#features">Features</a>
665
- <a href="#how-it-works">How It Works</a>
666
- <a href="#pricing">Pricing</a>
667
- <a href="#faq">FAQ</a>
668
- <a href="https://github.com/todyai/content-factory" target="_blank" rel="noopener">GitHub</a>
664
+ <a href="#features" data-i18n="nav.features">Features</a>
665
+ <a href="docs/" data-i18n="nav.docs">Docs</a>
666
+ <a href="#pricing" data-i18n="nav.pricing">Pricing</a>
667
+ <a href="#faq" data-i18n="nav.faq">FAQ</a>
668
+ <a href="https://github.com/tody-agent/codymaster" target="_blank" rel="noopener">GitHub</a>
669
669
  </div>
670
- <div class="footer-copy">
670
+ <div class="footer-copy" data-i18n="footer.copy">
671
671
  Built by <strong>Tody AI</strong> — Part of the AgentSkills Kit
672
672
  </div>
673
673
  </div>
@@ -98,4 +98,46 @@
98
98
  }
99
99
  });
100
100
  });
101
+
102
+ /* --- Translation Logic --- */
103
+ const langSelect = document.getElementById('lang-select');
104
+
105
+ function applyTranslations(lang) {
106
+ const langData = window.translations[lang] || window.translations['en'];
107
+ if (!langData) return;
108
+
109
+ document.querySelectorAll('[data-i18n]').forEach(el => {
110
+ const key = el.getAttribute('data-i18n');
111
+ const keys = key.split('.');
112
+ let text = langData;
113
+
114
+ keys.forEach(k => {
115
+ if (text) text = text[k];
116
+ });
117
+
118
+ if (text) {
119
+ if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') {
120
+ el.placeholder = text;
121
+ } else {
122
+ el.innerHTML = text;
123
+ }
124
+ }
125
+ });
126
+
127
+ document.documentElement.lang = lang;
128
+ localStorage.setItem('preferred-lang', lang);
129
+ if (langSelect) langSelect.value = lang;
130
+ }
131
+
132
+ if (langSelect) {
133
+ langSelect.addEventListener('change', (e) => {
134
+ applyTranslations(e.target.value);
135
+ });
136
+ }
137
+
138
+ // Initialize language
139
+ const savedLang = localStorage.getItem('preferred-lang') ||
140
+ (navigator.language.startsWith('vi') ? 'vi' : 'en');
141
+ applyTranslations(savedLang);
142
+
101
143
  })();