@wayai/cli 0.1.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 (43) hide show
  1. package/dist/commands/login.d.ts +4 -0
  2. package/dist/commands/login.js +123 -0
  3. package/dist/commands/login.js.map +1 -0
  4. package/dist/commands/logout.d.ts +4 -0
  5. package/dist/commands/logout.js +14 -0
  6. package/dist/commands/logout.js.map +1 -0
  7. package/dist/commands/pull.d.ts +4 -0
  8. package/dist/commands/pull.js +73 -0
  9. package/dist/commands/pull.js.map +1 -0
  10. package/dist/commands/push.d.ts +4 -0
  11. package/dist/commands/push.js +90 -0
  12. package/dist/commands/push.js.map +1 -0
  13. package/dist/commands/status.d.ts +4 -0
  14. package/dist/commands/status.js +26 -0
  15. package/dist/commands/status.js.map +1 -0
  16. package/dist/index.d.ts +13 -0
  17. package/dist/index.js +90 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lib/api-client.d.ts +18 -0
  20. package/dist/lib/api-client.js +50 -0
  21. package/dist/lib/api-client.js.map +1 -0
  22. package/dist/lib/auth.d.ts +59 -0
  23. package/dist/lib/auth.js +191 -0
  24. package/dist/lib/auth.js.map +1 -0
  25. package/dist/lib/config.d.ts +14 -0
  26. package/dist/lib/config.js +37 -0
  27. package/dist/lib/config.js.map +1 -0
  28. package/dist/lib/diff-display.d.ts +8 -0
  29. package/dist/lib/diff-display.js +37 -0
  30. package/dist/lib/diff-display.js.map +1 -0
  31. package/dist/lib/parser.d.ts +11 -0
  32. package/dist/lib/parser.js +64 -0
  33. package/dist/lib/parser.js.map +1 -0
  34. package/dist/lib/types.d.ts +106 -0
  35. package/dist/lib/types.js +5 -0
  36. package/dist/lib/types.js.map +1 -0
  37. package/dist/lib/utils.d.ts +16 -0
  38. package/dist/lib/utils.js +38 -0
  39. package/dist/lib/utils.js.map +1 -0
  40. package/dist/lib/yaml-writer.d.ts +13 -0
  41. package/dist/lib/yaml-writer.js +101 -0
  42. package/dist/lib/yaml-writer.js.map +1 -0
  43. package/package.json +41 -0
@@ -0,0 +1,101 @@
1
+ /**
2
+ * YAML writer — converts HubAsCodePayload to wayai.yaml + agents/*.md files
3
+ * Reverse of parser.ts
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import * as yaml from 'js-yaml';
8
+ import { slugify } from './utils.js';
9
+ /**
10
+ * Write a HubAsCodePayload to disk as wayai.yaml + agents/*.md files.
11
+ *
12
+ * - Creates `wayai.yaml` with `instructions:` referencing agent .md file paths
13
+ * - Creates `agents/<slug>.md` for each agent with instructions
14
+ * - Removes orphan .md files in agents/ that don't match any current agent
15
+ */
16
+ export function writeHubFolder(hubFolder, payload) {
17
+ // Ensure directories exist
18
+ const agentsDir = path.join(hubFolder, 'agents');
19
+ if (!fs.existsSync(hubFolder)) {
20
+ fs.mkdirSync(hubFolder, { recursive: true });
21
+ }
22
+ if (!fs.existsSync(agentsDir)) {
23
+ fs.mkdirSync(agentsDir, { recursive: true });
24
+ }
25
+ // Build YAML-safe payload with file references instead of inline instructions
26
+ const yamlPayload = buildYamlPayload(payload);
27
+ const agentFiles = extractAgentFiles(payload);
28
+ // Write wayai.yaml
29
+ const yamlContent = yaml.dump(yamlPayload, {
30
+ lineWidth: -1, // don't wrap lines
31
+ noRefs: true, // don't use YAML anchors
32
+ quotingType: '"',
33
+ forceQuotes: false,
34
+ sortKeys: false,
35
+ });
36
+ fs.writeFileSync(path.join(hubFolder, 'wayai.yaml'), yamlContent, 'utf-8');
37
+ // Write agent instruction files
38
+ const currentSlugs = new Set();
39
+ for (const { slug, content } of agentFiles) {
40
+ currentSlugs.add(slug);
41
+ fs.writeFileSync(path.join(agentsDir, `${slug}.md`), content, 'utf-8');
42
+ }
43
+ // Remove orphan .md files
44
+ if (fs.existsSync(agentsDir)) {
45
+ const existingFiles = fs.readdirSync(agentsDir);
46
+ for (const file of existingFiles) {
47
+ if (file.endsWith('.md')) {
48
+ const slug = file.slice(0, -3);
49
+ if (!currentSlugs.has(slug)) {
50
+ fs.unlinkSync(path.join(agentsDir, file));
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ /**
57
+ * Build the YAML-safe version of the payload.
58
+ * Replaces inline instructions with file path references.
59
+ */
60
+ function buildYamlPayload(payload) {
61
+ const result = {
62
+ version: payload.version,
63
+ hub_id: payload.hub_id,
64
+ hub_environment: payload.hub_environment,
65
+ hub: payload.hub,
66
+ };
67
+ if (payload.agents && payload.agents.length > 0) {
68
+ result.agents = payload.agents.map((agent) => {
69
+ const entry = { ...agent };
70
+ // Replace inline instructions with file reference
71
+ if (agent.instructions) {
72
+ const slug = slugify(agent.name);
73
+ entry.instructions = `agents/${slug}.md`;
74
+ }
75
+ return entry;
76
+ });
77
+ }
78
+ if (payload.states && payload.states.length > 0) {
79
+ result.states = payload.states;
80
+ }
81
+ if (payload.connections && payload.connections.length > 0) {
82
+ result.connections = payload.connections;
83
+ }
84
+ return result;
85
+ }
86
+ /**
87
+ * Extract agent instruction files from the payload.
88
+ */
89
+ function extractAgentFiles(payload) {
90
+ const files = [];
91
+ for (const agent of payload.agents || []) {
92
+ if (agent.instructions) {
93
+ files.push({
94
+ slug: slugify(agent.name),
95
+ content: agent.instructions,
96
+ });
97
+ }
98
+ }
99
+ return files;
100
+ }
101
+ //# sourceMappingURL=yaml-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-writer.js","sourceRoot":"","sources":["../../src/lib/yaml-writer.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@wayai/cli",
3
+ "version": "0.1.0",
4
+ "description": "WayAI CLI — sync hub configuration between local files and the platform",
5
+ "type": "module",
6
+ "bin": {
7
+ "wayai": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "prepublishOnly": "tsc",
12
+ "dev": "tsc --watch",
13
+ "test": "vitest run",
14
+ "test:watch": "vitest"
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/wayai-pro/platform.git",
25
+ "directory": "cli"
26
+ },
27
+ "keywords": ["wayai", "cli", "hub", "ai", "config"],
28
+ "license": "MIT",
29
+ "dependencies": {
30
+ "js-yaml": "^4.1.0"
31
+ },
32
+ "devDependencies": {
33
+ "@types/js-yaml": "^4.0.9",
34
+ "@types/node": "^20.11.0",
35
+ "typescript": "^5.5.0",
36
+ "vitest": "^3.2.0"
37
+ },
38
+ "engines": {
39
+ "node": ">=18.0.0"
40
+ }
41
+ }