devvami 1.4.1 → 1.5.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 (96) hide show
  1. package/README.md +7 -0
  2. package/oclif.manifest.json +41 -1
  3. package/package.json +2 -1
  4. package/src/commands/auth/login.js +20 -16
  5. package/src/commands/changelog.js +12 -12
  6. package/src/commands/costs/get.js +14 -24
  7. package/src/commands/costs/trend.js +13 -24
  8. package/src/commands/create/repo.js +72 -54
  9. package/src/commands/docs/list.js +29 -25
  10. package/src/commands/docs/projects.js +58 -24
  11. package/src/commands/docs/read.js +56 -39
  12. package/src/commands/docs/search.js +37 -25
  13. package/src/commands/doctor.js +37 -35
  14. package/src/commands/dotfiles/add.js +51 -39
  15. package/src/commands/dotfiles/setup.js +62 -33
  16. package/src/commands/dotfiles/status.js +18 -18
  17. package/src/commands/dotfiles/sync.js +62 -46
  18. package/src/commands/init.js +143 -132
  19. package/src/commands/logs/index.js +10 -16
  20. package/src/commands/open.js +12 -12
  21. package/src/commands/pipeline/logs.js +8 -11
  22. package/src/commands/pipeline/rerun.js +21 -16
  23. package/src/commands/pipeline/status.js +28 -24
  24. package/src/commands/pr/create.js +40 -27
  25. package/src/commands/pr/detail.js +9 -7
  26. package/src/commands/pr/review.js +18 -19
  27. package/src/commands/pr/status.js +27 -21
  28. package/src/commands/prompts/browse.js +15 -15
  29. package/src/commands/prompts/download.js +15 -16
  30. package/src/commands/prompts/install-speckit.js +11 -12
  31. package/src/commands/prompts/list.js +12 -12
  32. package/src/commands/prompts/run.js +16 -19
  33. package/src/commands/repo/list.js +57 -41
  34. package/src/commands/search.js +20 -18
  35. package/src/commands/security/setup.js +38 -34
  36. package/src/commands/sync-config-ai/index.js +143 -0
  37. package/src/commands/tasks/assigned.js +43 -33
  38. package/src/commands/tasks/list.js +43 -33
  39. package/src/commands/tasks/today.js +32 -30
  40. package/src/commands/upgrade.js +18 -17
  41. package/src/commands/vuln/detail.js +8 -8
  42. package/src/commands/vuln/scan.js +95 -21
  43. package/src/commands/vuln/search.js +23 -18
  44. package/src/commands/welcome.js +2 -2
  45. package/src/commands/whoami.js +19 -23
  46. package/src/formatters/ai-config.js +127 -0
  47. package/src/formatters/charts.js +6 -23
  48. package/src/formatters/cost.js +1 -7
  49. package/src/formatters/dotfiles.js +48 -19
  50. package/src/formatters/markdown.js +11 -6
  51. package/src/formatters/openapi.js +7 -9
  52. package/src/formatters/prompts.js +69 -78
  53. package/src/formatters/security.js +2 -2
  54. package/src/formatters/status.js +1 -1
  55. package/src/formatters/table.js +1 -3
  56. package/src/formatters/vuln.js +33 -20
  57. package/src/help.js +162 -164
  58. package/src/hooks/init.js +1 -3
  59. package/src/hooks/postrun.js +5 -7
  60. package/src/index.js +1 -1
  61. package/src/services/ai-config-store.js +318 -0
  62. package/src/services/ai-env-deployer.js +444 -0
  63. package/src/services/ai-env-scanner.js +242 -0
  64. package/src/services/audit-detector.js +2 -2
  65. package/src/services/audit-runner.js +40 -31
  66. package/src/services/auth.js +9 -9
  67. package/src/services/awesome-copilot.js +7 -4
  68. package/src/services/aws-costs.js +22 -22
  69. package/src/services/clickup.js +26 -26
  70. package/src/services/cloudwatch-logs.js +5 -9
  71. package/src/services/config.js +13 -13
  72. package/src/services/docs.js +19 -20
  73. package/src/services/dotfiles.js +149 -51
  74. package/src/services/github.js +22 -24
  75. package/src/services/nvd.js +21 -31
  76. package/src/services/platform.js +2 -2
  77. package/src/services/prompts.js +23 -35
  78. package/src/services/security.js +135 -61
  79. package/src/services/shell.js +4 -4
  80. package/src/services/skills-sh.js +3 -9
  81. package/src/services/speckit.js +4 -7
  82. package/src/services/version-check.js +10 -10
  83. package/src/types.js +85 -0
  84. package/src/utils/aws-vault.js +18 -41
  85. package/src/utils/banner.js +5 -7
  86. package/src/utils/errors.js +42 -46
  87. package/src/utils/frontmatter.js +4 -4
  88. package/src/utils/gradient.js +18 -16
  89. package/src/utils/open-browser.js +3 -3
  90. package/src/utils/tui/form.js +1006 -0
  91. package/src/utils/tui/modal.js +15 -14
  92. package/src/utils/tui/navigable-table.js +25 -17
  93. package/src/utils/tui/tab-tui.js +800 -0
  94. package/src/utils/typewriter.js +3 -3
  95. package/src/utils/welcome.js +18 -21
  96. package/src/validators/repo-name.js +2 -2
@@ -1,5 +1,5 @@
1
1
  import readline from 'node:readline'
2
- import { isAnimationEnabled, BRAND_GRADIENT, gradientText } from './gradient.js'
2
+ import {isAnimationEnabled, BRAND_GRADIENT, gradientText} from './gradient.js'
3
3
 
4
4
  /**
5
5
  * Stampa testo con effetto typewriter (lettera per lettera).
@@ -12,7 +12,7 @@ import { isAnimationEnabled, BRAND_GRADIENT, gradientText } from './gradient.js'
12
12
  * @returns {Promise<void>}
13
13
  */
14
14
  export async function typewriter(text, opts = {}) {
15
- const { interval = 30, gradient } = opts
15
+ const {interval = 30, gradient} = opts
16
16
 
17
17
  if (!isAnimationEnabled) {
18
18
  const out = gradient ? gradientText(text, gradient) : text
@@ -44,5 +44,5 @@ export async function typewriter(text, opts = {}) {
44
44
  * @returns {Promise<void>}
45
45
  */
46
46
  export async function typewriterLine(text, gradient = BRAND_GRADIENT) {
47
- return typewriter(text, { gradient, interval: 25 })
47
+ return typewriter(text, {gradient, interval: 25})
48
48
  }
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk'
2
- import { printBanner } from './banner.js'
3
- import { isColorEnabled } from './gradient.js'
4
- import { typewriterLine } from './typewriter.js'
2
+ import {printBanner} from './banner.js'
3
+ import {isColorEnabled} from './gradient.js'
4
+ import {typewriterLine} from './typewriter.js'
5
5
 
6
6
  // ─── Constants ────────────────────────────────────────────────────────────────
7
7
 
@@ -14,21 +14,18 @@ const nl = () => process.stdout.write('\n')
14
14
 
15
15
  const p = isColorEnabled
16
16
  ? {
17
- sep: (t) => chalk.hex('#4A9EFF').dim(t),
18
- cyan: (t) => chalk.hex('#00D4FF').bold(t),
19
- green: (t) => chalk.hex('#00FF88').bold(t),
20
- pink: (t) => chalk.hex('#FF3399').bold(t),
21
- gold: (t) => chalk.hex('#FFD700').bold(t),
17
+ sep: (t) => chalk.hex('#4A9EFF').dim(t),
18
+ cyan: (t) => chalk.hex('#00D4FF').bold(t),
19
+ green: (t) => chalk.hex('#00FF88').bold(t),
20
+ pink: (t) => chalk.hex('#FF3399').bold(t),
21
+ gold: (t) => chalk.hex('#FFD700').bold(t),
22
22
  orange: (t) => chalk.hex('#FF6B2B').bold(t),
23
- blue: (t) => chalk.hex('#4A9EFF')(t),
24
- white: (t) => chalk.white(t),
25
- dim: (t) => chalk.dim(t),
23
+ blue: (t) => chalk.hex('#4A9EFF')(t),
24
+ white: (t) => chalk.white(t),
25
+ dim: (t) => chalk.dim(t),
26
26
  }
27
27
  : Object.fromEntries(
28
- ['sep', 'cyan', 'green', 'pink', 'gold', 'orange', 'blue', 'white', 'dim'].map((k) => [
29
- k,
30
- (t) => t,
31
- ]),
28
+ ['sep', 'cyan', 'green', 'pink', 'gold', 'orange', 'blue', 'white', 'dim'].map((k) => [k, (t) => t]),
32
29
  )
33
30
 
34
31
  // ─── Helpers ─────────────────────────────────────────────────────────────────
@@ -151,13 +148,13 @@ export async function printWelcomeScreen(version = '') {
151
148
 
152
149
  /** @type {Array<[string, string]>} */
153
150
  const commands = [
154
- ['dvmi init', 'configure your workspace'],
155
- ['dvmi auth login', 'connect GitHub & ClickUp'],
156
- ['dvmi pr status', 'open pull requests'],
151
+ ['dvmi init', 'configure your workspace'],
152
+ ['dvmi auth login', 'connect GitHub & ClickUp'],
153
+ ['dvmi pr status', 'open pull requests'],
157
154
  ['dvmi pipeline status', 'CI/CD health check'],
158
- ['dvmi tasks today', 'focus mode: what to ship today'],
159
- ['dvmi costs get', 'AWS bill reality check'],
160
- ['dvmi doctor', 'diagnose config issues'],
155
+ ['dvmi tasks today', 'focus mode: what to ship today'],
156
+ ['dvmi costs get', 'AWS bill reality check'],
157
+ ['dvmi doctor', 'diagnose config issues'],
161
158
  ]
162
159
  for (const [cmd, comment] of commands) {
163
160
  out(' ' + p.blue('$ ' + cmd.padEnd(24)) + p.dim('# ' + comment))
@@ -15,7 +15,7 @@ const MAX_LENGTH = 100
15
15
  */
16
16
  export function validateRepoName(name) {
17
17
  if (!name || name.length === 0) {
18
- return { valid: false, error: 'Repository name cannot be empty' }
18
+ return {valid: false, error: 'Repository name cannot be empty'}
19
19
  }
20
20
 
21
21
  if (name.length > MAX_LENGTH) {
@@ -38,5 +38,5 @@ export function validateRepoName(name) {
38
38
  }
39
39
  }
40
40
 
41
- return { valid: true }
41
+ return {valid: true}
42
42
  }