@ngocsangairvds/vsaf 6.0.1 → 6.2.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 (65) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/run.d.ts +3 -0
  3. package/packages/cli/dist/commands/run.d.ts.map +1 -1
  4. package/packages/cli/dist/commands/run.js +10 -0
  5. package/packages/cli/dist/commands/run.js.map +1 -1
  6. package/packages/cli/dist/server/routes/runs.d.ts +3 -1
  7. package/packages/cli/dist/server/routes/runs.d.ts.map +1 -1
  8. package/packages/cli/dist/server/routes/runs.js +33 -9
  9. package/packages/cli/dist/server/routes/runs.js.map +1 -1
  10. package/packages/cli/dist/server/routes/workflows.js +1 -1
  11. package/packages/cli/dist/server/routes/workflows.js.map +1 -1
  12. package/packages/cli/dist/server/services/execution-manager.d.ts.map +1 -1
  13. package/packages/cli/dist/server/services/execution-manager.js +5 -0
  14. package/packages/cli/dist/server/services/execution-manager.js.map +1 -1
  15. package/packages/core/dist/config/ai-config.d.ts +3 -0
  16. package/packages/core/dist/config/ai-config.d.ts.map +1 -1
  17. package/packages/core/dist/config/ai-config.js +9 -0
  18. package/packages/core/dist/config/ai-config.js.map +1 -1
  19. package/packages/core/dist/index.d.ts +1 -1
  20. package/packages/core/dist/index.d.ts.map +1 -1
  21. package/packages/core/dist/index.js +3 -2
  22. package/packages/core/dist/index.js.map +1 -1
  23. package/packages/core/dist/runtime/executor.d.ts.map +1 -1
  24. package/packages/core/dist/runtime/executor.js +1 -0
  25. package/packages/core/dist/runtime/executor.js.map +1 -1
  26. package/packages/web/dist/web/browser/{chunk-FE2VGLSN.js → chunk-7L4OEPXU.js} +1 -1
  27. package/packages/web/dist/web/browser/{chunk-FBCNCNPM.js → chunk-BDLVJ3JS.js} +1 -1
  28. package/packages/web/dist/web/browser/{chunk-MCW5ACIZ.js → chunk-CQQRQYJU.js} +1 -1
  29. package/packages/web/dist/web/browser/{chunk-6H3AYIT3.js → chunk-E3BSTPAZ.js} +1 -1
  30. package/packages/web/dist/web/browser/{chunk-L7B3BT5E.js → chunk-IBUECISR.js} +1 -1
  31. package/packages/web/dist/web/browser/{chunk-7ELOO4IC.js → chunk-OYL4KDHJ.js} +1 -1
  32. package/packages/web/dist/web/browser/{chunk-GR7SKUVU.js → chunk-Q6S2YOXT.js} +1 -1
  33. package/packages/web/dist/web/browser/chunk-RM7DW5FD.js +5 -0
  34. package/packages/web/dist/web/browser/chunk-SM2S63GA.js +1 -0
  35. package/packages/web/dist/web/browser/{chunk-N3FOQ3O5.js → chunk-ZZWA24BS.js} +1 -1
  36. package/packages/web/dist/web/browser/index.html +2 -2
  37. package/packages/web/dist/web/browser/{main-3UCJ3N4F.js → main-MOJ6YEDN.js} +1 -1
  38. package/packages/web/dist/web/browser/styles-KOJ4NEWT.css +1 -0
  39. package/skills/sdlc/onboard-code/cross-domain/SKILL.md +10 -0
  40. package/skills/sdlc/onboard-code/cross-domain/step.md +11 -0
  41. package/skills/sdlc/onboard-code/detect-structure/SKILL.md +10 -0
  42. package/skills/sdlc/onboard-code/detect-structure/step.md +7 -0
  43. package/skills/sdlc/onboard-code/env-docker/SKILL.md +10 -0
  44. package/skills/sdlc/onboard-code/env-docker/step.md +7 -0
  45. package/skills/sdlc/onboard-code/summary/SKILL.md +10 -0
  46. package/skills/sdlc/onboard-code/summary/step.md +4 -0
  47. package/skills/sdlc/onboard-code/verify-index/SKILL.md +10 -0
  48. package/skills/sdlc/onboard-code/verify-index/step.md +9 -0
  49. package/skills/sdlc/onboard-docs/extract-terms/SKILL.md +10 -0
  50. package/skills/sdlc/onboard-docs/extract-terms/step.md +20 -0
  51. package/skills/sdlc/onboard-docs/graphify-build/SKILL.md +10 -0
  52. package/skills/sdlc/onboard-docs/graphify-build/step.md +11 -0
  53. package/skills/sdlc/onboard-docs/scan-import/SKILL.md +10 -0
  54. package/skills/sdlc/onboard-docs/scan-import/step.md +19 -0
  55. package/skills/sdlc/onboard-docs/verify-fix/SKILL.md +10 -0
  56. package/skills/sdlc/onboard-docs/verify-fix/step.md +10 -0
  57. package/skills/sdlc/pack.yaml +9 -2
  58. package/workflows/sdlc/onboard-code.yaml +5 -43
  59. package/workflows/sdlc/onboard-docs.yaml +4 -64
  60. package/packages/web/dist/web/browser/chunk-4R37VVI4.js +0 -5
  61. package/packages/web/dist/web/browser/chunk-UDCOYDXU.js +0 -1
  62. package/packages/web/dist/web/browser/styles-5MTP4CCO.css +0 -1
  63. package/skills/sdlc/onboard-code/SKILL.md +0 -210
  64. package/skills/sdlc/onboard-docs/SKILL.md +0 -194
  65. /package/skills/sdlc/onboard-docs/{convert.py → scan-import/convert.py} +0 -0
@@ -1 +0,0 @@
1
- @layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--color-red-300: oklch(80.8% .114 19.571);--color-red-400: oklch(70.4% .191 22.216);--color-red-500: oklch(63.7% .237 25.331);--color-amber-400: oklch(82.8% .189 84.429);--color-amber-500: oklch(76.9% .188 70.08);--color-green-400: oklch(79.2% .209 151.711);--color-green-500: oklch(72.3% .219 149.579);--color-blue-400: oklch(70.7% .165 254.624);--color-blue-500: oklch(62.3% .214 259.815);--color-blue-600: oklch(54.6% .245 262.881);--color-indigo-100: oklch(93% .034 272.788);--color-indigo-500: oklch(58.5% .233 277.117);--color-slate-100: oklch(96.8% .007 247.896);--color-slate-200: oklch(92.9% .013 255.508);--color-slate-300: oklch(86.9% .022 252.894);--color-slate-400: oklch(70.4% .04 256.788);--color-slate-500: oklch(55.4% .046 257.417);--color-slate-600: oklch(44.6% .043 257.281);--color-slate-700: oklch(37.2% .044 257.287);--color-slate-800: oklch(27.9% .041 260.031);--color-slate-900: oklch(20.8% .042 265.755);--color-slate-950: oklch(12.9% .042 264.695);--color-black: #000;--color-white: #fff;--spacing: .25rem;--container-md: 28rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--font-weight-semibold: 600;--tracking-wide: .025em;--radius-lg: .5rem;--radius-xl: .75rem;--ease-in-out: cubic-bezier(.4, 0, .2, 1);--animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-font-family: Inter, ui-sans-serif, system-ui, sans-serif;--default-mono-font-family: "JetBrains Mono", ui-monospace, monospace}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.top-2{top:calc(var(--spacing) * 2)}.bottom-2{bottom:calc(var(--spacing) * 2)}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.m-3{margin:calc(var(--spacing) * 3)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.table{display:table}.h-\[calc\(100vh-6rem\)\]{height:calc(100vh - 6rem)}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-10{width:calc(var(--spacing) * 10)}.w-auto{width:auto}.w-full{width:100%}.max-w-\[78\%\]{max-width:78%}.max-w-\[90\%\]{max-width:90%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-\[1\.6\]{flex:1.6}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-primary{border-color:var(--primary)}.border-red-500\/30{border-color:color-mix(in srgb,oklch(63.7% .237 25.331) 30%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-red-500\/50{border-color:color-mix(in srgb,oklch(63.7% .237 25.331) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500) 50%,transparent)}}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-800{border-color:var(--color-slate-800)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/40{background-color:color-mix(in srgb,#000 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/60{background-color:color-mix(in srgb,#000 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-blue-500\/10{background-color:color-mix(in srgb,oklch(62.3% .214 259.815) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-green-500\/10{background-color:color-mix(in srgb,oklch(72.3% .219 149.579) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-indigo-500\/15{background-color:color-mix(in srgb,oklch(58.5% .233 277.117) 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.bg-red-500\/10{background-color:color-mix(in srgb,oklch(63.7% .237 25.331) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/40{background-color:color-mix(in srgb,oklch(20.8% .042 265.755) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-950{background-color:var(--color-slate-950)}.bg-slate-950\/40{background-color:color-mix(in srgb,oklch(12.9% .042 264.695) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-950\/40{background-color:color-mix(in oklab,var(--color-slate-950) 40%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,ui-monospace,monospace}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-blue-400{color:var(--color-blue-400)}.text-green-400{color:var(--color-green-400)}.text-indigo-100{color:var(--color-indigo-100)}.text-primary{color:var(--primary)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-950{color:var(--color-slate-950)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ease-in-out{--tw-ease: var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hover\:bg-amber-400:hover{background-color:var(--color-amber-400)}}@media(hover:hover){.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}}@media(hover:hover){.hover\:bg-red-500\/10:hover{background-color:color-mix(in srgb,oklch(63.7% .237 25.331) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}}@media(hover:hover){.hover\:text-slate-100:hover{color:var(--color-slate-100)}}@media(hover:hover){.hover\:text-slate-200:hover{color:var(--color-slate-200)}}@media(hover:hover){.hover\:text-slate-300:hover{color:var(--color-slate-300)}}.focus\:border-amber-500:focus{border-color:var(--color-amber-500)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style: none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:40%}}:root{--background: oklch(.14 .005 260);--surface: oklch(.18 .008 260);--surface-elevated: oklch(.22 .01 260);--border: oklch(.28 .01 260);--border-bright: oklch(.35 .015 260);--text-primary: oklch(.93 .005 260);--text-secondary: oklch(.65 .01 260);--text-tertiary: oklch(.45 .01 260);--primary: oklch(.65 .18 250);--primary-foreground: oklch(.98 .005 260);--success: oklch(.65 .17 155);--warning: oklch(.75 .15 75);--error: oklch(.6 .2 25)}html,body{min-height:100%;background:var(--background);color:var(--text-primary);font-family:Inter,ui-sans-serif,system-ui,sans-serif}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--background)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--border-bright)}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-border-style: solid;--tw-font-weight: initial;--tw-tracking: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-ease: initial}}}
@@ -1,210 +0,0 @@
1
- ---
2
- name: sdlc-onboard-code
3
- description: Code onboarding — GitNexus index + Claude verify index + env check + Docker + cross-domain verify
4
- version: 1.0.0
5
- author: "@ngocsangairvds/vsaf"
6
- ---
7
-
8
- # Onboard Code — GitNexus Index + Verify + Environment Setup
9
-
10
- You are a Senior DevOps Engineer + Code Architect. Mission: ensure GitNexus index captures ACCURATELY the entire code structure, verify cross-domain with docs graph, AND prepare the development environment.
11
-
12
- ## Progress Protocol
13
-
14
- Each step prints progress:
15
- ```
16
- [ONBOARD-CODE] [1/6] description... (icon)
17
- ```
18
- Icon: `⏳` running, `✅` done, `❌` error.
19
-
20
- ## Index Protection
21
-
22
- > ⛔ DO NOT modify `graphify-out/` or `.gitnexus/` — only GitNexus tools are allowed to write to `.gitnexus/`.
23
-
24
- ## Artifact Write Boundary
25
-
26
- - Create generated knowledge, documentation, SDLC artifacts, reports, and agent-readable markdown only at the project root beside `.vsaf` or inside the root `.vsaf/` directory.
27
- - Do NOT create `docs/`, `.vsaf/`, `CONTEXT.md`, `AGENTS.md`, knowledge files, reports, or generated artifacts inside service/subproject folders.
28
- - For service-specific notes, write under root `.vsaf/docs/` using the service name in the path or filename.
29
- - Write inside a service/subproject folder only when the user explicitly authorizes that path, or when the task is a source-code/test change for that service.
30
-
31
- ## Clear Responsibility Assignment
32
-
33
- | Tool | Scope | Notes |
34
- |------|-------|-------|
35
- | **GitNexus** | Code indexing (modules, routes, APIs, dependencies) | SINGLE SOURCE OF TRUTH for code |
36
- | **Graphify** | Docs indexing (specs, README, wiki) | DO NOT use for code |
37
- | **graph.json** | Doc-only graph — used for cross-domain verify | Read only, DO NOT write |
38
-
39
- ## Input
40
-
41
- - Project path: `$ARGUMENTS` (or current directory)
42
-
43
- ## Steps
44
-
45
- ### Phase 1: Detect Project Structure
46
-
47
- ```
48
- [ONBOARD-CODE] [1/6] Detect project structure... ⏳
49
- ```
50
-
51
- 1. Scan project structure:
52
- ```
53
- Is there .git at root?
54
- ├── YES → Single git repo
55
- └── NO → Scan 1-2 levels deep for .git/
56
- ├── Found N folders with .git → Multi-repo / Microservice
57
- │ List: [{path, remote, branch}]
58
- └── Not found → Non-git project
59
- ```
60
- 2. Record results in `.vsaf/docs/onboarding/env-setup.md` §Project Structure
61
-
62
- ```
63
- [ONBOARD-CODE] [1/6] Detect project structure... ✅
64
- ```
65
-
66
- ### Phase 2: GitNexus Index
67
-
68
- ```
69
- [ONBOARD-CODE] [2/6] GitNexus index... ⏳
70
- ```
71
-
72
- 3. Run GitNexus analyze at **project root** (NOT per sub-repo):
73
- ```
74
- Is there .git at project root?
75
- ├── YES → npx gitnexus analyze .
76
- └── NO → npx gitnexus analyze . --skip-git
77
- ```
78
- - ⚠️ Use `npx gitnexus` (resolves local binary) — do NOT use `npx -y gitnexus@latest` (native module crash on Node 24+)
79
- - This creates a SINGLE `.gitnexus/` at project root covering ALL code (including sub-repos)
80
- - For multi-repo: one unified index enables cross-service analysis naturally
81
- - Run GitNexus `group_sync` to index
82
- 4. Map structure: `route_map` + `tool_map` + `context` (3-5 key entry points per repo)
83
-
84
- ```
85
- [ONBOARD-CODE] [2/6] GitNexus index... ✅
86
- ```
87
-
88
- ### Phase 3: Verify GitNexus Index
89
-
90
- ```
91
- [ONBOARD-CODE] [3/6] Verify GitNexus index... ⏳
92
- ```
93
-
94
- **IMPORTANT:** Claude MUST review GitNexus index — DO NOT trust blindly. Verify using MCP tools:
95
-
96
- 5. `list_repos` — confirm project root has been indexed (single unified index)
97
- 6. `route_map` — check that API routes from ALL repos have been fully mapped
98
- 7. `context` — query 3-5 key entry points per repo, verify results make sense:
99
- - Are main entry points indexed for each repo?
100
- - Are dependencies between modules correct?
101
- - If multi-repo: are cross-service calls captured? (HTTP, gRPC, event-driven)
102
- 8. If missing:
103
- - Re-run `group_sync` with different config
104
- - Or record note in env-setup.md: "{module/route} not indexed — needs manual review"
105
-
106
- ```
107
- [ONBOARD-CODE] [3/6] Verify GitNexus index... ✅
108
- ```
109
-
110
- ### Phase 4: Environment Check + Docker Setup
111
-
112
- ```
113
- [ONBOARD-CODE] [4/6] Environment check + Docker setup... ⏳
114
- ```
115
-
116
- 9. Detect tech stack: read `package.json`, `pom.xml`, `build.gradle`, `requirements.txt`, `Dockerfile`, `docker-compose.yml`
117
- 10. Check current env: `java -version`, `node -v`, `docker -v`, `python3 --version`, etc.
118
- 11. Compare required vs current → suggest installations
119
- 12. **Docker env suggestion:**
120
- - If project DOES NOT have `Dockerfile` or `docker-compose.yml`:
121
- - Suggest creating `docker-compose.yml` with appropriate services (DB, cache, message broker)
122
- - Suggest creating `Dockerfile` for the app
123
- - If project ALREADY HAS Docker files: verify config is reasonable
124
- 13. Record everything in `.vsaf/docs/onboarding/env-setup.md`
125
-
126
- ```
127
- [ONBOARD-CODE] [4/6] Environment check + Docker setup... ✅
128
- ```
129
-
130
- ### Phase 5: Cross-Domain Verify
131
-
132
- ```
133
- [ONBOARD-CODE] [5/6] Cross-domain verify (GitNexus + graph.json)... ⏳
134
- ```
135
-
136
- 14. Read `graphify-out/graph.json` (docs graph from onboard-docs)
137
- 15. Use GitNexus tools (`query`, `context`) to get code structure
138
- 16. Cross-reference:
139
- - Business concept (from graph.json) → is there a corresponding code module? (query GitNexus)
140
- - YES → record mapping: `{concept} ↔ {module/class}`
141
- - NO → record note: "{concept} not yet implemented"
142
- - Code module (from GitNexus) → is there a corresponding business concept? (check graph.json)
143
- - YES → record mapping
144
- - NO → technical module (infra, utils) — OK, record note
145
- 17. Update `CONTEXT.md` with technical terms from code — IDEMPOTENTLY (never overwrite the whole file, never
146
- blind-append; re-runs must not bloat it): PRESERVE the `## Shared Language` section written by onboard-docs;
147
- own `## Cross-Domain Verification` + `## Technical Terms` — if a section exists REPLACE its body in place,
148
- else append it; one row per mapping/term (dedupe, update rather than duplicate):
149
-
150
- ```markdown
151
- ## Technical Terms
152
-
153
- | Term | Definition | Maps to Business Concept |
154
- |------|-----------|-------------------------|
155
- | {class/module} | {functionality} | {business concept or "infrastructure"} |
156
- ```
157
-
158
- ```
159
- [ONBOARD-CODE] [5/6] Cross-domain verify (GitNexus + graph.json)... ✅
160
- ```
161
-
162
- ### Phase 6: Summary Report
163
-
164
- ```
165
- [ONBOARD-CODE] [6/6] Create summary report... ⏳
166
- ```
167
-
168
- Print ONBOARD-CODE REPORT:
169
-
170
- ```
171
- === Onboard Code Report ===
172
-
173
- | Item | Status |
174
- |------|--------|
175
- | Project structure | {Single repo / Multi-repo (N repos)} |
176
- | GitNexus index | ✅ {N} repos indexed |
177
- | Index verification | ✅ Verified / ⚠️ {issues} |
178
- | Tech stack | {Java/Angular/Node/...} |
179
- | Environment | ✅ Ready / ⚠️ Missing: {list} |
180
- | Docker | ✅ Exists / 💡 Suggested |
181
- | Cross-domain mapping | ✅ {N} concepts mapped / ⚠️ {M} gaps |
182
- | CONTEXT.md | ✅ Updated |
183
- ```
184
-
185
- ```
186
- [ONBOARD-CODE] [6/6] Create summary report... ✅
187
- ```
188
-
189
- ## Output
190
-
191
- - `.vsaf/docs/onboarding/env-setup.md` — project structure + tech stack + env check + Docker
192
- - `CONTEXT.md` — updated with technical terms
193
- - Single GitNexus index at project root (`.gitnexus/`) covering all code
194
-
195
- ## Artifact Auto-Save
196
-
197
- After completion, print message:
198
-
199
- > Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
200
-
201
- ## Rules
202
-
203
- - GitNexus is the SINGLE SOURCE OF TRUTH for code — DO NOT use graphify for code
204
- - Graphify is only for docs — graph.json is READ-ONLY (no writing) in this phase
205
- - Multi-repo/Microservice: MUST verify cross-service edges (HTTP, gRPC, event-driven, message broker) via GitNexus
206
- - Database isolation: flag if cross-db access is detected
207
- - env-setup.md is the ONLY md file to be created (needed for Docker setup)
208
- - Do not create project-overview.md or codebase-map.md
209
- - ⛔ DO NOT modify `graphify-out/` or `.gitnexus/`
210
- - Claude MUST verify GitNexus index — do not assume index is correct without checking
@@ -1,194 +0,0 @@
1
- ---
2
- name: sdlc-onboard-docs
3
- description: Document onboarding — Graphify build graph + Claude verify + supplement gaps
4
- version: 1.0.1
5
- author: "@ngocsangairvds/vsaf"
6
- ---
7
-
8
- # Onboard Docs — Build & Verify Document Knowledge Graph
9
-
10
- You are a Knowledge Engineer. Mission: ensure graph.json captures ACCURATELY all knowledge from project documents.
11
-
12
- ## Progress Protocol
13
-
14
- Each step prints progress:
15
- ```
16
- [ONBOARD-DOCS] [1/4] description... (icon)
17
- ```
18
- Icon: `⏳` running, `✅` done, `❌` error.
19
-
20
- ## Index Protection
21
-
22
- > ⛔ DO NOT modify `graphify-out/` or `.gitnexus/` DIRECTLY — only graphify is allowed to write to `graphify-out/`.
23
- > **Exception:** Phase 3 supplements nodes/edges directly into `graph.json` after graphify has built it — this is the only permitted direct modification.
24
-
25
- ## Artifact Write Boundary
26
-
27
- - Create generated knowledge, documentation, SDLC artifacts, reports, and agent-readable markdown only at the project root beside `.vsaf` or inside the root `.vsaf/` directory.
28
- - Do NOT create `docs/`, `.vsaf/`, `CONTEXT.md`, `AGENTS.md`, knowledge files, reports, or generated artifacts inside service/subproject folders.
29
- - For service-specific notes, write under root `.vsaf/docs/` using the service name in the path or filename.
30
- - Write inside a service/subproject folder only when the user explicitly authorizes that path, or when the task is a source-code/test change for that service.
31
-
32
- ## Input
33
-
34
- - Project path: `$ARGUMENTS` (or current directory)
35
- - Read all docs in project: README, docs/, wiki/, specs/, *.md, *.txt
36
-
37
- ## Steps
38
-
39
- ### Phase 1: Scan & Import
40
-
41
- ```
42
- [ONBOARD-DOCS] [1/4] Scan & import documents... ⏳
43
- ```
44
-
45
- 1. Scan all documents in project (README, docs/, wiki, specs)
46
- 2. List all docs found
47
- 3. Resolve markitdown Python — run:
48
- ```bash
49
- VENVS=$(pipx environment --value PIPX_LOCAL_VENVS 2>/dev/null)
50
- MARKITDOWN_PYTHON="${VENVS}/markitdown/bin/python"
51
- # Windows: "${VENVS}\markitdown\Scripts\python.exe"
52
- # Fallback: ~/.local/pipx/venvs/markitdown/bin/python
53
- ```
54
- If markitdown Python not found, skip step 5 entirely and route ALL complex files through tier fallbacks:
55
- - **All Tier 1 files** → add to graphify-direct-read list (graphify reads natively)
56
- - **All Tier 2 HTML files** → Claude Read fallback (step 6)
57
- - **All Tier 2 PPTX/EPUB/ZIP files** → skipped (no fallback available)
58
- Then jump to step 6 routing.
59
-
60
- 4. Classify each complex file into a tier:
61
- - **Tier 1 (graphify-native):** PDF, DOCX, XLSX, PNG, JPG, GIF, WEBP — graphify can read these directly if markitdown fails
62
- - **Tier 2 (graphify-blind):** HTML, PPTX, EPUB, ZIP — graphify cannot read these; need markitdown or Claude fallback
63
- - Text files (`.md`, `.txt`) are NOT complex — read directly, skip conversion
64
-
65
- 5. For each complex file, attempt markitdown conversion (skip if markitdown not found — see step 3):
66
- - Resolve markitdown Python (step 3 above)
67
- - Convert using the wrapper script (bundled in this skill directory):
68
- ```bash
69
- "${MARKITDOWN_PYTHON}" "<this-skill-dir>/convert.py" \
70
- --input "{file}" \
71
- --output ".vsaf/docs/onboarding/doc-imports/{name}.md"
72
- ```
73
- - `<this-skill-dir>` = the directory containing this SKILL.md
74
- - The script auto-detects OCR availability from `~/.vsaf/markitdown.env`
75
-
76
- 6. After each conversion, verify and route:
77
-
78
- **If convert.py exit code = 0:**
79
- Read the output `.md` file and verify content quality. Check ALL of:
80
- - Contains meaningful content from the document? (not just auto-generated headers like `## Page 1`)
81
- - Not an LLM refusal? (e.g., "I'm sorry, but I can't help with that")
82
- - Not hallucinated? (e.g., fabricated tool calls, irrelevant JSON/XML, text unrelated to source file)
83
- - Has substance? (more than a few words after stripping structural markers)
84
-
85
- If ALL checks PASS → use the `.md` output. Log: `[ONBOARD-DOCS] {file} → converted ✅`
86
-
87
- If ANY check FAILS → treat as conversion failure (continue to fallback below).
88
-
89
- **If convert.py exit code ≠ 0, OR verification failed:**
90
-
91
- - **Tier 1 file** → Log: `[ONBOARD-DOCS] {file}: markitdown failed → graphify will read directly`
92
- Add the ORIGINAL file path to a "graphify-direct-read" list. Do NOT retry conversion.
93
- After all conversions, persist the list to `.vsaf/docs/onboarding/graphify-direct-read.txt` (one path per line).
94
- - **Tier 2 HTML file** → Read the HTML file with the Read tool. Extract meaningful content (headings, paragraphs, tables, lists, links). Write clean markdown to `.vsaf/docs/onboarding/doc-imports/{name}.md`. Log: `[ONBOARD-DOCS] {file} → Claude Read fallback ✅`
95
- - **Tier 2 PPTX/EPUB/ZIP file** → Log: `[ONBOARD-DOCS] ⚠️ {file}: conversion failed, no fallback — skipped`
96
-
97
- Print conversion summary:
98
- ```
99
- [ONBOARD-DOCS] Conversion summary:
100
- markitdown OK: N files
101
- graphify direct: N files (Tier 1 fallback)
102
- Claude Read: N files (Tier 2 HTML fallback)
103
- Skipped: N files (no fallback available)
104
- ```
105
-
106
- ```
107
- [ONBOARD-DOCS] [1/4] Scan & import documents... ✅
108
- ```
109
-
110
- ### Phase 2: Graphify Build
111
-
112
- ```
113
- [ONBOARD-DOCS] [2/4] Graphify build for docs... ⏳
114
- ```
115
-
116
- 7. Create a staging directory at `.vsaf/docs/onboarding/graphify-staging/` and populate it with ALL inputs for graphify:
117
- - Copy or symlink original text documents (`.md`, `.txt`, README)
118
- - Copy or symlink successfully converted `.md` files from `.vsaf/docs/onboarding/doc-imports/`
119
- - Copy or symlink files from `.vsaf/docs/onboarding/graphify-direct-read.txt` (original binary files — graphify reads these natively: PDF, DOCX, XLSX, images)
120
-
121
- This directory is the single input to graphify — it ensures graphify only processes docs, never source code.
122
-
123
- 8. Run `/graphify .vsaf/docs/onboarding/graphify-staging/`
124
- 9. Output: `graphify-out/graph.json`
125
-
126
- **IMPORTANT:** Graphify is ONLY for docs (documents, specs, README). DO NOT run graphify on source code — code indexing is handled by GitNexus in `/sdlc-onboard-code`.
127
-
128
- ```
129
- [ONBOARD-DOCS] [2/4] Graphify build for docs... ✅
130
- ```
131
-
132
- ### Phase 3: Claude Verify & Fix
133
-
134
- ```
135
- [ONBOARD-DOCS] [3/4] Verify & fix graph... ⏳
136
- ```
137
-
138
- 10. Re-read **each original doc** — extract: concepts, relationships, business rules, constraints
139
- 11. Read `graph.json` — find corresponding nodes/edges
140
- 12. Compare:
141
- - Concept in doc but no node in graph → **MISSING**
142
- - Relationship in doc but no edge in graph → **MISSING**
143
- - Business rule/constraint not captured → **MISSING**
144
- - All present → OK
145
- 13. If missing: supplement nodes/edges directly into `graph.json` (this is the permitted exception to the Index Protection rule)
146
- 14. Report: "{doc}: +N nodes, +M edges supplemented"
147
-
148
- ```
149
- [ONBOARD-DOCS] [3/4] Verify & fix graph... ✅
150
- ```
151
-
152
- ### Phase 4: Extract Domain Terms
153
-
154
- ```
155
- [ONBOARD-DOCS] [4/4] Extract domain terms → CONTEXT.md... ⏳
156
- ```
157
-
158
- 15. From the completed graph, extract domain terms → `CONTEXT.md` — update IDEMPOTENTLY (never overwrite the
159
- whole file, never blind-append; re-runs must not bloat it): ensure one top `# Project Context: {name}`
160
- heading, then own the `## Shared Language` section — if it exists REPLACE its body in place, else append it;
161
- leave other sections (`## Technical Terms`, `## Cross-Domain Verification`) untouched; one row per Term (dedupe).
162
- 16. Format Shared Language table:
163
-
164
- ```markdown
165
- ## Shared Language
166
-
167
- | Term | Definition | Example |
168
- |------|-----------|---------|
169
- | {term} | {1-line definition} | {concrete example} |
170
- ```
171
-
172
- ```
173
- [ONBOARD-DOCS] [4/4] Extract domain terms → CONTEXT.md... ✅
174
- ```
175
-
176
- ## Output
177
-
178
- - `graphify-out/graph.json` — verified + supplemented
179
- - `.vsaf/docs/onboarding/doc-imports/{name}.md` — converted/fallback imports (if any)
180
- - `CONTEXT.md` — Ubiquitous Language
181
-
182
- ## Artifact Auto-Save
183
-
184
- After completion, print message:
185
-
186
- > Artifacts saved. If the session is interrupted, open a new session and run the next phase — data is safe.
187
-
188
- ## Rules
189
-
190
- - Graph is the SINGLE SOURCE OF TRUTH — do not create redundant overview/summary md files
191
- - Every missing concept/relationship MUST be supplemented, not skipped
192
- - CONTEXT.md contains only domain terms, not technical terms (technical terms belong in the code branch)
193
- - Graphify runs ONLY on docs — DO NOT run on source code
194
- - ⛔ DO NOT modify `graphify-out/` or `.gitnexus/` directly outside graphify workflow (Phase 3 supplementation is the only exception)