@radkode/neo 1.8.3 → 1.9.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 (40) hide show
  1. package/README.md +18 -0
  2. package/bin/cli.js +5 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +19 -3
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/git/commit/index.d.ts.map +1 -1
  7. package/dist/commands/git/commit/index.js +13 -6
  8. package/dist/commands/git/commit/index.js.map +1 -1
  9. package/dist/commands/git/pull/index.d.ts.map +1 -1
  10. package/dist/commands/git/pull/index.js +40 -35
  11. package/dist/commands/git/pull/index.js.map +1 -1
  12. package/dist/commands/verify/index.d.ts +6 -3
  13. package/dist/commands/verify/index.d.ts.map +1 -1
  14. package/dist/commands/verify/index.js +75 -18
  15. package/dist/commands/verify/index.js.map +1 -1
  16. package/dist/commands/work/finish/index.d.ts.map +1 -1
  17. package/dist/commands/work/finish/index.js +90 -74
  18. package/dist/commands/work/finish/index.js.map +1 -1
  19. package/dist/commands/work/index.js +1 -1
  20. package/dist/commands/work/ship/index.d.ts.map +1 -1
  21. package/dist/commands/work/ship/index.js +7 -1
  22. package/dist/commands/work/ship/index.js.map +1 -1
  23. package/dist/commands/work/start/index.d.ts.map +1 -1
  24. package/dist/commands/work/start/index.js +31 -6
  25. package/dist/commands/work/start/index.js.map +1 -1
  26. package/dist/types/index.d.ts +0 -1
  27. package/dist/types/index.d.ts.map +1 -1
  28. package/dist/types/schemas.d.ts +1 -1
  29. package/dist/types/schemas.d.ts.map +1 -1
  30. package/dist/types/schemas.js +1 -1
  31. package/dist/types/schemas.js.map +1 -1
  32. package/dist/utils/git-errors.d.ts +8 -5
  33. package/dist/utils/git-errors.d.ts.map +1 -1
  34. package/dist/utils/git-errors.js +156 -48
  35. package/dist/utils/git-errors.js.map +1 -1
  36. package/dist/utils/output.d.ts.map +1 -1
  37. package/dist/utils/output.js +20 -1
  38. package/dist/utils/output.js.map +1 -1
  39. package/package.json +3 -3
  40. package/templates/skills/neo/SKILL.md +2 -1
@@ -1,5 +1,6 @@
1
1
  import { getRuntimeContext } from './runtime-context.js';
2
2
  import { ui } from './ui.js';
3
+ import { GitError } from './git-errors.js';
3
4
  export function emitJson(data, options = {}) {
4
5
  const ctx = getRuntimeContext();
5
6
  if (ctx.format === 'json') {
@@ -23,13 +24,31 @@ export function emitError(error, options = {}) {
23
24
  options.text();
24
25
  return;
25
26
  }
26
- ui.error(error.message);
27
+ ui.error(textErrorMessage(error));
27
28
  const suggestions = error.suggestions;
28
29
  if (suggestions && suggestions.length > 0) {
29
30
  ui.warn('Suggestions:');
30
31
  ui.list(suggestions);
31
32
  }
32
33
  }
34
+ function textErrorMessage(error) {
35
+ if (!(error instanceof GitError)) {
36
+ return error.message;
37
+ }
38
+ const details = [];
39
+ const command = error.context?.['command'];
40
+ if (typeof command === 'string')
41
+ details.push(`Command: ${command}`);
42
+ const stderr = error.context?.['stderr'];
43
+ const fallback = error.context?.['error'];
44
+ if (typeof stderr === 'string') {
45
+ details.push(stderr);
46
+ }
47
+ else if (typeof fallback === 'string' && fallback !== error.message) {
48
+ details.push(fallback);
49
+ }
50
+ return details.length > 0 ? `${error.message}\n${details.join('\n')}` : error.message;
51
+ }
33
52
  function serializeError(error) {
34
53
  const appError = error;
35
54
  const serialized = {
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAa7B,MAAM,UAAU,QAAQ,CACtB,IAAO,EACP,UAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAgBD,MAAM,UAAU,SAAS,CAAC,KAAuB,EAAE,UAAuB,EAAE;IAC1E,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,OAAO,GAA+B;YAC1C,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;SAC7B,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,WAAW,GAAI,KAAkB,CAAC,WAAW,CAAC;IACpD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAuB;IAC7C,MAAM,QAAQ,GAAG,KAAiB,CAAC;IACnC,MAAM,UAAU,GAAoB;QAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,SAAS;QAChC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IACF,IAAI,QAAQ,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,QAAQ,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;IAChD,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO;QAAE,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC5D,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAY3C,MAAM,UAAU,QAAQ,CACtB,IAAO,EACP,UAAuB,EAAE;IAEzB,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAgBD,MAAM,UAAU,SAAS,CAAC,KAAuB,EAAE,UAAuB,EAAE;IAC1E,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,OAAO,GAA+B;YAC1C,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;SAC7B,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,MAAM,WAAW,GAAI,KAAkB,CAAC,WAAW,CAAC;IACpD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACxB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,IAAI,CAAC,CAAC,KAAK,YAAY,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;AACxF,CAAC;AAED,SAAS,cAAc,CAAC,KAAuB;IAC7C,MAAM,QAAQ,GAAG,KAAiB,CAAC;IACnC,MAAM,UAAU,GAAoB;QAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,SAAS;QAChC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IACF,IAAI,QAAQ,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,QAAQ,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvE,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;IAChD,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO;QAAE,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC5D,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@radkode/neo",
3
- "version": "1.8.3",
3
+ "version": "1.9.2",
4
4
  "description": "Modern CLI toolkit with intelligent git workflows and configuration management",
5
5
  "keywords": [
6
6
  "cli",
@@ -40,7 +40,7 @@
40
40
  "dev": "tsx src/cli.ts",
41
41
  "format": "prettier --write .",
42
42
  "format:check": "prettier --check .",
43
- "link-local": "pnpm run build && pnpm link --global",
43
+ "link-local": "pnpm run build && pnpm add --global .",
44
44
  "lint": "eslint src test",
45
45
  "prepublishOnly": "pnpm run build && pnpm run test",
46
46
  "release": "pnpm run build && pnpm run test && changeset publish",
@@ -49,7 +49,7 @@
49
49
  "test:coverage": "vitest run --coverage",
50
50
  "test:watch": "vitest",
51
51
  "typecheck": "tsc -p tsconfig.test.json",
52
- "unlink-local": "pnpm unlink --global @radkode/neo",
52
+ "unlink-local": "pnpm remove --global @radkode/neo",
53
53
  "version-packages": "changeset version && pnpm install --lockfile-only"
54
54
  },
55
55
  "dependencies": {
@@ -60,7 +60,8 @@ Exit codes: `0` success, `1` failure, `2` non-interactive prompt required (the J
60
60
 
61
61
  ## Anti-patterns
62
62
 
63
- - Don't `git push` to bypass neo's main-branch confirmation. If you need to push to main, use explicit flags (`--force`, etc.) neo will tell you what's missing.
63
+ - Don't `git push` to bypass neo's main-branch confirmation. If you need to push to main, use `neo git push --force-main`. Not `--force`: that is not a neo flag, so it passes straight through to git as a real force-push.
64
64
  - Don't open PRs with `gh pr create` when `neo work ship` is the right call. Ship handles verify + changeset + push + PR in one step.
65
65
  - Don't skip changesets. `neo work ship` enforces them; if a change doesn't affect a published package, create an empty changeset (`---\n---`).
66
66
  - Don't re-derive the command tree from memory. `neo schema --json` is authoritative and version-correct.
67
+ - Don't quietly fall back to raw `git`/`gh` when neo is installed but misbehaving. The bullets above cover neo being absent; this one covers it being wrong. A rejected valid input, a guardrail that misfires, a missing command or flag, a stale example: reaching for the fallback is the finding. Say it out loud, file it (in DailyDeck if you have it: `create-task`, `intake: "filed"`, `repo: "radkode/neo"`; a GitHub issue on radkode/neo otherwise), and then work around it.