embark-cli 1.2.3 → 1.3.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 (64) hide show
  1. package/.claude/settings.json +26 -0
  2. package/.claude/settings.local.json +7 -1
  3. package/.claude/skills/embark-research/SKILL.md +63 -0
  4. package/.claude/skills/embark-review/SKILL.md +81 -0
  5. package/dist/agents/amp.d.ts +5 -0
  6. package/dist/agents/amp.d.ts.map +1 -0
  7. package/dist/agents/amp.js +115 -0
  8. package/dist/agents/amp.js.map +1 -0
  9. package/dist/agents/claude.d.ts +5 -0
  10. package/dist/agents/claude.d.ts.map +1 -0
  11. package/dist/agents/claude.js +179 -0
  12. package/dist/agents/claude.js.map +1 -0
  13. package/dist/agents/codex.d.ts +5 -0
  14. package/dist/agents/codex.d.ts.map +1 -0
  15. package/dist/agents/codex.js +115 -0
  16. package/dist/agents/codex.js.map +1 -0
  17. package/dist/agents/gemini.d.ts +5 -0
  18. package/dist/agents/gemini.d.ts.map +1 -0
  19. package/dist/agents/gemini.js +115 -0
  20. package/dist/agents/gemini.js.map +1 -0
  21. package/dist/agents/index.d.ts +27 -0
  22. package/dist/agents/index.d.ts.map +1 -0
  23. package/dist/agents/index.js +90 -0
  24. package/dist/agents/index.js.map +1 -0
  25. package/dist/cli-history.d.ts +2 -0
  26. package/dist/cli-history.d.ts.map +1 -0
  27. package/dist/cli-history.js +101 -0
  28. package/dist/cli-history.js.map +1 -0
  29. package/dist/cli-index.d.ts.map +1 -1
  30. package/dist/cli-index.js +9 -2
  31. package/dist/cli-index.js.map +1 -1
  32. package/dist/cli-install.d.ts +2 -0
  33. package/dist/cli-install.d.ts.map +1 -0
  34. package/dist/cli-install.js +205 -0
  35. package/dist/cli-install.js.map +1 -0
  36. package/dist/cli-search.js +2 -2
  37. package/dist/cli-search.js.map +1 -1
  38. package/dist/cli-utils.d.ts +26 -0
  39. package/dist/cli-utils.d.ts.map +1 -1
  40. package/dist/cli-utils.js +270 -1
  41. package/dist/cli-utils.js.map +1 -1
  42. package/dist/embark-client.d.ts +14 -0
  43. package/dist/embark-client.d.ts.map +1 -1
  44. package/dist/embark-client.js +115 -0
  45. package/dist/embark-client.js.map +1 -1
  46. package/dist/git-utils.d.ts +7 -1
  47. package/dist/git-utils.d.ts.map +1 -1
  48. package/dist/git-utils.js +88 -1
  49. package/dist/git-utils.js.map +1 -1
  50. package/dist/handlers.d.ts +1 -0
  51. package/dist/handlers.d.ts.map +1 -1
  52. package/dist/index.js +20 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/skills/index.d.ts +3 -0
  55. package/dist/skills/index.d.ts.map +1 -0
  56. package/dist/skills/index.js +150 -0
  57. package/dist/skills/index.js.map +1 -0
  58. package/dist/stats-server.d.ts.map +1 -1
  59. package/dist/stats-server.js +4 -0
  60. package/dist/stats-server.js.map +1 -1
  61. package/dist/stats.d.ts +2 -2
  62. package/dist/stats.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/test/cli-utils.test.js +102 -0
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "embark-cli",
3
- "version": "1.2.3",
3
+ "version": "1.3.0",
4
4
  "description": "CLI and MCP server proxy for EmbArk code search",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -3,6 +3,7 @@ const test = require('node:test');
3
3
 
4
4
  const {
5
5
  parseSearchArgs,
6
+ parseInstallArgs,
6
7
  formatGrepLine,
7
8
  collapseWhitespace,
8
9
  } = require('../dist/cli-utils.js');
@@ -59,3 +60,104 @@ test('collapseWhitespace normalizes newlines', () => {
59
60
  const collapsed = collapseWhitespace('a\n\nb\tc');
60
61
  assert.equal(collapsed, 'a b c');
61
62
  });
63
+
64
+ // parseInstallArgs tests
65
+
66
+ test('parseInstallArgs returns defaults with no args', () => {
67
+ const parsed = parseInstallArgs([]);
68
+ assert.equal(parsed.agent, null);
69
+ assert.equal(parsed.scope, 'global');
70
+ assert.equal(parsed.skillsOnly, false);
71
+ assert.equal(parsed.hooksOnly, false);
72
+ assert.equal(parsed.showHelp, false);
73
+ assert.equal(parsed.error, null);
74
+ });
75
+
76
+ test('parseInstallArgs handles --agent flag', () => {
77
+ const parsed = parseInstallArgs(['--agent', 'claude']);
78
+ assert.equal(parsed.agent, 'claude');
79
+ assert.equal(parsed.error, null);
80
+ });
81
+
82
+ test('parseInstallArgs handles --agent= syntax', () => {
83
+ const parsed = parseInstallArgs(['--agent=codex']);
84
+ assert.equal(parsed.agent, 'codex');
85
+ assert.equal(parsed.error, null);
86
+ });
87
+
88
+ test('parseInstallArgs rejects invalid agent', () => {
89
+ const parsed = parseInstallArgs(['--agent', 'invalid']);
90
+ assert.equal(parsed.agent, null);
91
+ assert.ok(parsed.error.includes('Invalid agent'));
92
+ });
93
+
94
+ test('parseInstallArgs handles --scope flag', () => {
95
+ const parsed = parseInstallArgs(['--scope', 'project']);
96
+ assert.equal(parsed.scope, 'project');
97
+ assert.equal(parsed.error, null);
98
+ });
99
+
100
+ test('parseInstallArgs handles --scope= syntax', () => {
101
+ const parsed = parseInstallArgs(['--scope=global']);
102
+ assert.equal(parsed.scope, 'global');
103
+ assert.equal(parsed.error, null);
104
+ });
105
+
106
+ test('parseInstallArgs rejects invalid scope', () => {
107
+ const parsed = parseInstallArgs(['--scope', 'invalid']);
108
+ assert.equal(parsed.scope, 'global');
109
+ assert.ok(parsed.error.includes('Invalid scope'));
110
+ });
111
+
112
+ test('parseInstallArgs handles --skills-only flag', () => {
113
+ const parsed = parseInstallArgs(['--skills-only']);
114
+ assert.equal(parsed.skillsOnly, true);
115
+ assert.equal(parsed.hooksOnly, false);
116
+ assert.equal(parsed.error, null);
117
+ });
118
+
119
+ test('parseInstallArgs handles --hooks-only flag', () => {
120
+ const parsed = parseInstallArgs(['--hooks-only']);
121
+ assert.equal(parsed.skillsOnly, false);
122
+ assert.equal(parsed.hooksOnly, true);
123
+ assert.equal(parsed.error, null);
124
+ });
125
+
126
+ test('parseInstallArgs rejects both --skills-only and --hooks-only', () => {
127
+ const parsed = parseInstallArgs(['--skills-only', '--hooks-only']);
128
+ assert.ok(parsed.error.includes('Cannot use both'));
129
+ });
130
+
131
+ test('parseInstallArgs handles --help flag', () => {
132
+ const parsed = parseInstallArgs(['--help']);
133
+ assert.equal(parsed.showHelp, true);
134
+ assert.equal(parsed.error, null);
135
+ });
136
+
137
+ test('parseInstallArgs handles -h flag', () => {
138
+ const parsed = parseInstallArgs(['-h']);
139
+ assert.equal(parsed.showHelp, true);
140
+ assert.equal(parsed.error, null);
141
+ });
142
+
143
+ test('parseInstallArgs handles combined flags', () => {
144
+ const parsed = parseInstallArgs([
145
+ '--agent', 'claude',
146
+ '--scope', 'project',
147
+ '--skills-only',
148
+ ]);
149
+ assert.equal(parsed.agent, 'claude');
150
+ assert.equal(parsed.scope, 'project');
151
+ assert.equal(parsed.skillsOnly, true);
152
+ assert.equal(parsed.error, null);
153
+ });
154
+
155
+ test('parseInstallArgs rejects unknown options', () => {
156
+ const parsed = parseInstallArgs(['--unknown']);
157
+ assert.ok(parsed.error.includes('Unknown option'));
158
+ });
159
+
160
+ test('parseInstallArgs rejects positional arguments', () => {
161
+ const parsed = parseInstallArgs(['something']);
162
+ assert.ok(parsed.error.includes('Unexpected positional argument'));
163
+ });