vralphy 0.0.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.
Files changed (66) hide show
  1. package/bin/vralphy.js +3 -0
  2. package/dist/commands/build.d.ts +9 -0
  3. package/dist/commands/build.d.ts.map +1 -0
  4. package/dist/commands/build.js +85 -0
  5. package/dist/commands/build.js.map +1 -0
  6. package/dist/commands/init.d.ts +8 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +34 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/commands/plan.d.ts +9 -0
  11. package/dist/commands/plan.d.ts.map +1 -0
  12. package/dist/commands/plan.js +85 -0
  13. package/dist/commands/plan.js.map +1 -0
  14. package/dist/commands/spec.d.ts +9 -0
  15. package/dist/commands/spec.d.ts.map +1 -0
  16. package/dist/commands/spec.js +109 -0
  17. package/dist/commands/spec.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +114 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/lib/agents.d.ts +32 -0
  23. package/dist/lib/agents.d.ts.map +1 -0
  24. package/dist/lib/agents.js +94 -0
  25. package/dist/lib/agents.js.map +1 -0
  26. package/dist/lib/config.d.ts +38 -0
  27. package/dist/lib/config.d.ts.map +1 -0
  28. package/dist/lib/config.js +96 -0
  29. package/dist/lib/config.js.map +1 -0
  30. package/dist/lib/config.test.d.ts +2 -0
  31. package/dist/lib/config.test.d.ts.map +1 -0
  32. package/dist/lib/config.test.js +45 -0
  33. package/dist/lib/config.test.js.map +1 -0
  34. package/dist/lib/engines/base.d.ts +57 -0
  35. package/dist/lib/engines/base.d.ts.map +1 -0
  36. package/dist/lib/engines/base.js +18 -0
  37. package/dist/lib/engines/base.js.map +1 -0
  38. package/dist/lib/engines/base.test.d.ts +2 -0
  39. package/dist/lib/engines/base.test.d.ts.map +1 -0
  40. package/dist/lib/engines/base.test.js +28 -0
  41. package/dist/lib/engines/base.test.js.map +1 -0
  42. package/dist/lib/engines/claude.d.ts +11 -0
  43. package/dist/lib/engines/claude.d.ts.map +1 -0
  44. package/dist/lib/engines/claude.js +124 -0
  45. package/dist/lib/engines/claude.js.map +1 -0
  46. package/dist/lib/engines/index.d.ts +18 -0
  47. package/dist/lib/engines/index.d.ts.map +1 -0
  48. package/dist/lib/engines/index.js +37 -0
  49. package/dist/lib/engines/index.js.map +1 -0
  50. package/dist/lib/engines/opencode.d.ts +10 -0
  51. package/dist/lib/engines/opencode.d.ts.map +1 -0
  52. package/dist/lib/engines/opencode.js +71 -0
  53. package/dist/lib/engines/opencode.js.map +1 -0
  54. package/dist/lib/init.d.ts +8 -0
  55. package/dist/lib/init.d.ts.map +1 -0
  56. package/dist/lib/init.js +254 -0
  57. package/dist/lib/init.js.map +1 -0
  58. package/dist/lib/prompts.d.ts +34 -0
  59. package/dist/lib/prompts.d.ts.map +1 -0
  60. package/dist/lib/prompts.js +130 -0
  61. package/dist/lib/prompts.js.map +1 -0
  62. package/dist/lib/skills.d.ts +32 -0
  63. package/dist/lib/skills.d.ts.map +1 -0
  64. package/dist/lib/skills.js +119 -0
  65. package/dist/lib/skills.js.map +1 -0
  66. package/package.json +47 -0
@@ -0,0 +1,119 @@
1
+ import { readFile, readdir } from 'fs/promises';
2
+ import { existsSync } from 'fs';
3
+ import { join, basename } from 'path';
4
+ /**
5
+ * Parse frontmatter from markdown file
6
+ */
7
+ function parseFrontmatter(content) {
8
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
9
+ if (!frontmatterMatch) {
10
+ return { metadata: {}, content };
11
+ }
12
+ const [, frontmatter, body] = frontmatterMatch;
13
+ const metadata = {};
14
+ for (const line of frontmatter.split('\n')) {
15
+ const match = line.match(/^(\w+):\s*(.*)$/);
16
+ if (match) {
17
+ const [, key, value] = match;
18
+ if (value.startsWith('[') || value.startsWith('"')) {
19
+ try {
20
+ metadata[key] = JSON.parse(value);
21
+ }
22
+ catch {
23
+ metadata[key] = value;
24
+ }
25
+ }
26
+ else if (value.startsWith('-')) {
27
+ metadata[key] = [value.slice(1).trim()];
28
+ }
29
+ else {
30
+ metadata[key] = value;
31
+ }
32
+ }
33
+ else if (line.startsWith(' -') && Object.keys(metadata).length > 0) {
34
+ const lastKey = Object.keys(metadata).pop();
35
+ const arr = metadata[lastKey];
36
+ if (Array.isArray(arr)) {
37
+ arr.push(line.slice(4).trim());
38
+ }
39
+ }
40
+ }
41
+ return { metadata, content: body };
42
+ }
43
+ /**
44
+ * Load a single skill from file
45
+ */
46
+ async function loadSkill(path) {
47
+ const content = await readFile(path, 'utf-8');
48
+ const { metadata, content: body } = parseFrontmatter(content);
49
+ const name = metadata.name ?? basename(path, '.md');
50
+ return {
51
+ name,
52
+ path,
53
+ metadata: {
54
+ name,
55
+ description: metadata.description,
56
+ triggers: metadata.triggers,
57
+ alwaysInclude: metadata.alwaysInclude,
58
+ },
59
+ content: body,
60
+ };
61
+ }
62
+ /**
63
+ * Load all skills from a directory
64
+ */
65
+ export async function loadSkills(dir) {
66
+ if (!existsSync(dir)) {
67
+ return [];
68
+ }
69
+ const files = await readdir(dir);
70
+ const mdFiles = files.filter((f) => f.endsWith('.md'));
71
+ const skills = [];
72
+ for (const file of mdFiles) {
73
+ try {
74
+ const skill = await loadSkill(join(dir, file));
75
+ skills.push(skill);
76
+ }
77
+ catch (e) {
78
+ console.error(`Failed to load skill ${file}:`, e);
79
+ }
80
+ }
81
+ return skills;
82
+ }
83
+ /**
84
+ * Filter skills by triggers matching text
85
+ */
86
+ export function filterSkillsByTriggers(skills, text) {
87
+ const lowerText = text.toLowerCase();
88
+ return skills.filter((skill) => {
89
+ if (skill.metadata.alwaysInclude)
90
+ return true;
91
+ if (!skill.metadata.triggers)
92
+ return false;
93
+ return skill.metadata.triggers.some((trigger) => lowerText.includes(trigger.toLowerCase()));
94
+ });
95
+ }
96
+ /**
97
+ * Format skills for prompt injection
98
+ */
99
+ export function formatSkillsForPrompt(skills) {
100
+ if (skills.length === 0)
101
+ return '';
102
+ let result = '## Loaded Skills\n\n';
103
+ for (const skill of skills) {
104
+ result += `### ${skill.name}\n`;
105
+ if (skill.metadata.description) {
106
+ result += `${skill.metadata.description}\n\n`;
107
+ }
108
+ result += `${skill.content}\n\n`;
109
+ }
110
+ return result;
111
+ }
112
+ /**
113
+ * List available skills (for CLI command)
114
+ */
115
+ export async function listSkills(dir) {
116
+ const skills = await loadSkills(dir);
117
+ return skills.map((s) => ({ name: s.name, description: s.metadata.description }));
118
+ }
119
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAgBtC;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAE5E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,gBAAgB,CAAC;IAC/C,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;YAC7B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC;oBACH,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAG,CAAC;YAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE9D,MAAM,IAAI,GAAI,QAAQ,CAAC,IAAe,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhE,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,QAAQ,EAAE;YACR,IAAI;YACJ,WAAW,EAAE,QAAQ,CAAC,WAAiC;YACvD,QAAQ,EAAE,QAAQ,CAAC,QAAgC;YACnD,aAAa,EAAE,QAAQ,CAAC,aAAoC;SAC7D;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAe,EAAE,IAAY;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE3C,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC9C,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,IAAI,MAAM,GAAG,sBAAsB,CAAC;IAEpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC;QAChC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,MAAM,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,MAAM,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACpF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "vralphy",
3
+ "version": "0.0.1",
4
+ "description": "CLI tool implementing the Ralph Playbook methodology with engine flexibility",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "vralphy": "bin/vralphy.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "bin"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "test": "vitest run",
18
+ "typecheck": "tsc --noEmit",
19
+ "lint": "eslint src",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "cli",
24
+ "ai",
25
+ "claude",
26
+ "opencode",
27
+ "ralph",
28
+ "methodology"
29
+ ],
30
+ "author": "",
31
+ "license": "MIT",
32
+ "devDependencies": {
33
+ "@eslint/js": "^9.39.2",
34
+ "@types/node": "^20.10.0",
35
+ "@typescript-eslint/parser": "^8.53.1",
36
+ "eslint": "^8.55.0",
37
+ "typescript": "^5.3.0",
38
+ "typescript-eslint": "^8.53.1",
39
+ "vitest": "^1.0.0"
40
+ },
41
+ "dependencies": {
42
+ "commander": "^12.0.0"
43
+ },
44
+ "engines": {
45
+ "node": ">=18.0.0"
46
+ }
47
+ }