@agenticflow/cli 0.0.1-beta.13

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 (105) hide show
  1. package/README.md +125 -0
  2. package/TECHNICAL_DEBT.md +121 -0
  3. package/dist/builder/bundler.d.ts +17 -0
  4. package/dist/builder/bundler.d.ts.map +1 -0
  5. package/dist/builder/bundler.js +170 -0
  6. package/dist/builder/bundler.js.map +1 -0
  7. package/dist/builder/index.d.ts +6 -0
  8. package/dist/builder/index.d.ts.map +1 -0
  9. package/dist/builder/index.js +6 -0
  10. package/dist/builder/index.js.map +1 -0
  11. package/dist/builder/packager.d.ts +41 -0
  12. package/dist/builder/packager.d.ts.map +1 -0
  13. package/dist/builder/packager.js +145 -0
  14. package/dist/builder/packager.js.map +1 -0
  15. package/dist/builder/security.d.ts +26 -0
  16. package/dist/builder/security.d.ts.map +1 -0
  17. package/dist/builder/security.js +204 -0
  18. package/dist/builder/security.js.map +1 -0
  19. package/dist/builder/stripper.d.ts +19 -0
  20. package/dist/builder/stripper.d.ts.map +1 -0
  21. package/dist/builder/stripper.js +100 -0
  22. package/dist/builder/stripper.js.map +1 -0
  23. package/dist/builder/validator.d.ts +33 -0
  24. package/dist/builder/validator.d.ts.map +1 -0
  25. package/dist/builder/validator.js +150 -0
  26. package/dist/builder/validator.js.map +1 -0
  27. package/dist/cli/build.d.ts +3 -0
  28. package/dist/cli/build.d.ts.map +1 -0
  29. package/dist/cli/build.js +167 -0
  30. package/dist/cli/build.js.map +1 -0
  31. package/dist/cli/categories.d.ts +40 -0
  32. package/dist/cli/categories.d.ts.map +1 -0
  33. package/dist/cli/categories.js +101 -0
  34. package/dist/cli/categories.js.map +1 -0
  35. package/dist/cli/dev.d.ts +3 -0
  36. package/dist/cli/dev.d.ts.map +1 -0
  37. package/dist/cli/dev.js +226 -0
  38. package/dist/cli/dev.js.map +1 -0
  39. package/dist/cli/handler-types.d.ts +34 -0
  40. package/dist/cli/handler-types.d.ts.map +1 -0
  41. package/dist/cli/handler-types.js +67 -0
  42. package/dist/cli/handler-types.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +24 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/cli/init.d.ts +3 -0
  48. package/dist/cli/init.d.ts.map +1 -0
  49. package/dist/cli/init.js +264 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/cli/login.d.ts +3 -0
  52. package/dist/cli/login.d.ts.map +1 -0
  53. package/dist/cli/login.js +10 -0
  54. package/dist/cli/login.js.map +1 -0
  55. package/dist/cli/publish.d.ts +5 -0
  56. package/dist/cli/publish.d.ts.map +1 -0
  57. package/dist/cli/publish.js +120 -0
  58. package/dist/cli/publish.js.map +1 -0
  59. package/dist/cli/template-processor.d.ts +35 -0
  60. package/dist/cli/template-processor.d.ts.map +1 -0
  61. package/dist/cli/template-processor.js +82 -0
  62. package/dist/cli/template-processor.js.map +1 -0
  63. package/dist/cli/test.d.ts +3 -0
  64. package/dist/cli/test.d.ts.map +1 -0
  65. package/dist/cli/test.js +12 -0
  66. package/dist/cli/test.js.map +1 -0
  67. package/dist/dev/decorators.d.ts +10 -0
  68. package/dist/dev/decorators.d.ts.map +1 -0
  69. package/dist/dev/decorators.js +26 -0
  70. package/dist/dev/decorators.js.map +1 -0
  71. package/dist/dev/executor.d.ts +22 -0
  72. package/dist/dev/executor.d.ts.map +1 -0
  73. package/dist/dev/executor.js +243 -0
  74. package/dist/dev/executor.js.map +1 -0
  75. package/dist/dev/extractor.d.ts +15 -0
  76. package/dist/dev/extractor.d.ts.map +1 -0
  77. package/dist/dev/extractor.js +224 -0
  78. package/dist/dev/extractor.js.map +1 -0
  79. package/dist/dev/index.d.ts +3 -0
  80. package/dist/dev/index.d.ts.map +1 -0
  81. package/dist/dev/index.js +4 -0
  82. package/dist/dev/index.js.map +1 -0
  83. package/dist/dev/server.d.ts +91 -0
  84. package/dist/dev/server.d.ts.map +1 -0
  85. package/dist/dev/server.js +507 -0
  86. package/dist/dev/server.js.map +1 -0
  87. package/dist/dev/ui-dist/assets/index-BkKxvzfq.js +246 -0
  88. package/dist/dev/ui-dist/assets/index-DTO1qt7B.css +1 -0
  89. package/dist/dev/ui-dist/index.html +14 -0
  90. package/dist/dev/ui-dist/monkey.svg +3 -0
  91. package/dist/dev/ui-dist/package.json +27 -0
  92. package/dist/templates/_shared/.env.template +16 -0
  93. package/dist/templates/_shared/.gitignore.template +46 -0
  94. package/dist/templates/_shared/LICENSE.template +21 -0
  95. package/dist/templates/_shared/src/utils.ts.template +29 -0
  96. package/dist/templates/_shared/tsconfig.json.template +23 -0
  97. package/dist/templates/stateful/manifest.json.template +63 -0
  98. package/dist/templates/stateful/package.json.template +23 -0
  99. package/dist/templates/stateful/src/index.ts.template +147 -0
  100. package/dist/templates/stateless/docs/README.md.template +102 -0
  101. package/dist/templates/stateless/manifest.json.template +63 -0
  102. package/dist/templates/stateless/package.json.template +23 -0
  103. package/dist/templates/stateless/src/index.ts.template +103 -0
  104. package/package.json +51 -0
  105. package/vitest.config.ts +15 -0
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;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}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.left-2\.5{left:.625rem}.left-4{left:1rem}.top-0{top:0}.col-span-2{grid-column:span 2 / span 2}.mx-auto{margin-left:auto;margin-right:auto}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-4{margin-left:1rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.flex{display:flex}.table{display:table}.grid{display:grid}.h-12{height:3rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-8{height:2rem}.h-full{height:100%}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-64{max-height:16rem}.min-h-screen{min-height:100vh}.w-0\.5{width:.125rem}.w-1\/2{width:50%}.w-12{width:3rem}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-full{width:100%}.max-w-3xl{max-width:48rem}.max-w-none{max-width:none}.flex-1{flex:1 1 0%}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-slate-100>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(241 245 249 / var(--tw-divide-opacity, 1))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(226 232 240 / var(--tw-divide-opacity, 1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-primary-500{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-slate-400{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-primary-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-primary-50{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity, 1))}.bg-primary-600{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-slate-900{--tw-gradient-from: #0f172a var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-500{--tw-gradient-from: #8b5cf6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.to-slate-800{--tw-gradient-to: #1e293b var(--tw-gradient-to-position)}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.tracking-tight{letter-spacing:-.025em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-primary-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.text-primary-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-violet-400{--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.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)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color:#213547;background-color:#f8fafc}body{margin:0;min-width:320px;min-height:100vh}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f1f5f9;border-radius:4px}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}.json-tree{font-family:Fira Code,Consolas,monospace;font-size:13px;line-height:1.4}.json-key{color:#0369a1}.json-string{color:#047857}.json-number{color:#b45309}.json-boolean{color:#7c3aed}.json-null{color:#6b7280}pre{background-color:#1e293b;color:#e2e8f0;padding:1rem;border-radius:.5rem;overflow-x:auto}code{font-family:Fira Code,Consolas,monospace;font-size:.875rem}.status-dot{width:8px;height:8px;border-radius:50%;display:inline-block}.status-connected{background-color:#22c55e;box-shadow:0 0 8px #22c55e}.status-disconnected{background-color:#ef4444}.status-loading{background-color:#f59e0b;animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-primary-700:hover{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-600:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-slate-800:hover{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-primary-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity, 1))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/monkey.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>afh dev</title>
8
+ <script type="module" crossorigin src="/assets/index-BkKxvzfq.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-DTO1qt7B.css">
10
+ </head>
11
+ <body>
12
+ <div id="root"></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
2
+ <text y=".9em" font-size="90">🐵</text>
3
+ </svg>
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "afh-dev-ui",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc && vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "lucide-react": "^0.300.0",
13
+ "react": "^18.2.0",
14
+ "react-dom": "^18.2.0",
15
+ "react-markdown": "^9.0.1"
16
+ },
17
+ "devDependencies": {
18
+ "@types/react": "^18.2.0",
19
+ "@types/react-dom": "^18.2.0",
20
+ "@vitejs/plugin-react": "^4.2.0",
21
+ "autoprefixer": "^10.4.16",
22
+ "postcss": "^8.4.32",
23
+ "tailwindcss": "^3.4.0",
24
+ "typescript": "^5.3.0",
25
+ "vite": "^5.0.0"
26
+ }
27
+ }
@@ -0,0 +1,16 @@
1
+ # Environment variables for development
2
+ # This file is gitignored - add your secrets here
3
+
4
+ # Example API keys (uncomment and fill in as needed):
5
+ # API_KEY=your-api-key-here
6
+ # STRIPE_SECRET_KEY=sk_test_...
7
+ # SENDGRID_API_KEY=SG....
8
+ # OPENAI_API_KEY=sk-...
9
+
10
+ # Database URLs:
11
+ # DATABASE_URL=postgresql://user:pass@localhost/db
12
+ # REDIS_URL=redis://localhost:6379
13
+
14
+ # Other configuration:
15
+ # DEBUG=true
16
+ # LOG_LEVEL=info
@@ -0,0 +1,46 @@
1
+ # Dependencies
2
+ node_modules/
3
+
4
+ # Build output
5
+ dist/
6
+ *.tsbuildinfo
7
+
8
+ # Environment
9
+ .env
10
+ .env.local
11
+ .env.*.local
12
+
13
+ # afh development data
14
+ .afh/
15
+
16
+ # Logs
17
+ *.log
18
+ npm-debug.log*
19
+ yarn-debug.log*
20
+ yarn-error.log*
21
+
22
+ # Runtime data
23
+ pids
24
+ *.pid
25
+ *.seed
26
+ *.pid.lock
27
+
28
+ # Coverage directory used by tools like istanbul
29
+ coverage/
30
+
31
+ # nyc test coverage
32
+ .nyc_output
33
+
34
+ # OS generated files
35
+ .DS_Store
36
+ Thumbs.db
37
+
38
+ # Editor directories and files
39
+ .vscode/
40
+ .idea/
41
+ *.swp
42
+ *.swo
43
+
44
+ # Temporary files
45
+ *.tmp
46
+ *.temp
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) {{currentYear}} {{authorName}}
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Development utilities for {{displayName}}
3
+ *
4
+ * This file contains development-only code that is stripped at build time.
5
+ * The @TestValue decorator and this entire file are removed by `afh build`.
6
+ */
7
+
8
+ /**
9
+ * @TestValue decorator - provides default values for handler inputs during development.
10
+ *
11
+ * Use this to set test values that will be used when running `afh dev`.
12
+ * These decorators are automatically stripped from production builds.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * @Input({ type: 'string', source: 'vault', required: true })
17
+ * @TestValue(process.env.API_KEY || 'test-key')
18
+ * apiKey!: string;
19
+ * ```
20
+ */
21
+ export function TestValue(value: any): PropertyDecorator {
22
+ return (target: any, propertyKey: string | symbol) => {
23
+ // Store test values on the constructor for runtime access during development
24
+ if (!target.constructor.__testValues) {
25
+ target.constructor.__testValues = {};
26
+ }
27
+ target.constructor.__testValues[propertyKey] = value;
28
+ };
29
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ES2022",
5
+ "moduleResolution": "bundler",
6
+ "lib": ["ES2022"],
7
+ "outDir": "dist",
8
+ "rootDir": "src",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "allowSyntheticDefaultImports": true,
12
+ "skipLibCheck": true,
13
+ "forceConsistentCasingInFileNames": true,
14
+ "experimentalDecorators": true,
15
+ "emitDecoratorMetadata": true,
16
+ "resolveJsonModule": true,
17
+ "declaration": true,
18
+ "declarationMap": true,
19
+ "sourceMap": true
20
+ },
21
+ "include": ["src/**/*"],
22
+ "exclude": ["node_modules", "dist", ".afh"]
23
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "$schema": "https://agenticflow.com/schemas/handler-manifest-v1.json",
3
+ "id": "{{handlerType}}",
4
+ "version": "1.0.0",
5
+ "name": "{{displayName}}",
6
+ "description": "{{description}}",
7
+ "longDescription": "# {{displayName}}\n\n{{description}}\n\n## Features\n\n- Easy to configure\n- Reliable processing\n- Well documented\n- Stateful execution with checkpoints\n- Pause and resume capabilities\n\n## Usage\n\nAdd detailed usage instructions here.",
8
+
9
+ "author": {
10
+ "name": "{{authorName}}",
11
+ "email": "{{authorEmail}}"
12
+ },
13
+
14
+ "handler": {
15
+ "type": "{{handlerType}}",
16
+ "category": "{{category}}",
17
+ "stateful": true,
18
+ "timeout": 30000,
19
+ "retryable": true
20
+ },
21
+
22
+ "inputs": [
23
+ {
24
+ "property": "exampleInput",
25
+ "type": "string",
26
+ "source": "config",
27
+ "required": true,
28
+ "description": "An example input parameter",
29
+ "placeholder": "Enter your value here"
30
+ }
31
+ ],
32
+
33
+ "outputs": [
34
+ {
35
+ "property": "result",
36
+ "type": "string",
37
+ "description": "The processing result"
38
+ },
39
+ {
40
+ "property": "status",
41
+ "type": "string",
42
+ "description": "Processing status"
43
+ }
44
+ ],
45
+
46
+ "visual": {
47
+ "icon": "assets/icon.png",
48
+ "color": "{{categoryColor}}",
49
+ "tags": ["{{handlerTypeFirstWord}}", "{{category}}", "stateful"]
50
+ },
51
+
52
+ "marketplace": {
53
+ "pricing": "free",
54
+ "license": "MIT",
55
+ "repository": "https://github.com/{{authorGitHub}}/{{handlerType}}",
56
+ "homepage": "https://docs.example.com/{{handlerType}}"
57
+ },
58
+
59
+ "requirements": {
60
+ "agenticflow": ">=0.0.1",
61
+ "node": ">=18.0.0"
62
+ }
63
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "{{handlerType}}",
3
+ "version": "1.0.0",
4
+ "description": "{{description}}",
5
+ "main": "src/index.ts",
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "afh dev",
9
+ "test": "afh test",
10
+ "build": "afh build",
11
+ "publish": "afh publish"
12
+ },
13
+ "keywords": ["{{handlerTypeFirstWord}}", "{{category}}", "agenticflow", "handler", "stateful"],
14
+ "author": "{{authorName}} <{{authorEmail}}>",
15
+ "license": "MIT",
16
+ "dependencies": {
17
+ "@flowmonkey/core": "^0.0.1"
18
+ },
19
+ "devDependencies": {
20
+ "typescript": "^5.0.0",
21
+ "@types/node": "^20.0.0"
22
+ }
23
+ }
@@ -0,0 +1,147 @@
1
+ import { Handler, Input, StatefulHandler, StepResult } from '@flowmonkey/core';
2
+ import { TestValue } from './utils'; // Local re-export, stripped at build time
3
+
4
+ /**
5
+ * Input interface for {{displayName}}
6
+ * Define all your input properties here
7
+ */
8
+ interface {{handlerClassName}}Input {
9
+ exampleInput: string;
10
+ // Add more inputs as needed
11
+ // apiKey?: string;
12
+ // amount?: number;
13
+ // options?: { [key: string]: any };
14
+ }
15
+
16
+ /**
17
+ * Output interface for {{displayName}}
18
+ * Define all your output properties here
19
+ */
20
+ interface {{handlerClassName}}Output {
21
+ result: string;
22
+ status: string;
23
+ // Add more outputs as needed
24
+ // processedAt?: string;
25
+ // metadata?: { [key: string]: any };
26
+ }
27
+
28
+ /**
29
+ * Checkpoint interface for {{displayName}}
30
+ * Define your checkpoint data structure here
31
+ */
32
+ interface {{handlerClassName}}Checkpoint {
33
+ step: string;
34
+ processedData?: string;
35
+ // Add more checkpoint properties as needed
36
+ }
37
+
38
+ /**
39
+ * {{displayName}}
40
+ *
41
+ * {{description}}
42
+ *
43
+ * This handler maintains state via checkpoints and can be paused/resumed.
44
+ */
45
+ @Handler({
46
+ type: '{{handlerType}}',
47
+ name: '{{displayName}}',
48
+ category: '{{categoryApi}}',
49
+ stateful: true,
50
+ })
51
+ export class {{handlerClassName}} extends StatefulHandler<{{handlerClassName}}Input, {{handlerClassName}}Output, unknown, {{handlerClassName}}Checkpoint> {
52
+
53
+ /**
54
+ * Example input with test value for development
55
+ * The @TestValue decorator provides a default value during development
56
+ * and is automatically stripped from production builds
57
+ */
58
+ @Input({
59
+ type: 'string',
60
+ source: 'config',
61
+ required: true,
62
+ description: 'An example input parameter'
63
+ })
64
+ @TestValue('example-test-value') // This will be stripped at build time
65
+ exampleInput!: string;
66
+
67
+ /**
68
+ * Example for API key from vault
69
+ * Uncomment and modify as needed
70
+ */
71
+ // @Input({
72
+ // type: 'string',
73
+ // source: 'vault',
74
+ // vaultPath: 'secrets.myservice.apiKey',
75
+ // required: true,
76
+ // description: 'API key for external service'
77
+ // })
78
+ // @TestValue(process.env.API_KEY || 'test-api-key')
79
+ // apiKey!: string;
80
+
81
+ /**
82
+ * Main execution method
83
+ * This is where your handler logic goes
84
+ */
85
+ async execute(): Promise<StepResult> {
86
+ try {
87
+ // Restore checkpoint if one exists
88
+ const checkpoint = await this.getCheckpoint();
89
+ const currentStep = checkpoint?.step ?? 'processing';
90
+
91
+ // Your handler logic here
92
+ console.log(`Processing input: ${this.exampleInput}`);
93
+ console.log(`Current step: ${currentStep}`);
94
+
95
+ // Example multi-step processing
96
+ switch (currentStep) {
97
+ case 'processing': {
98
+ // Step 1: Process the input
99
+ const processedData = `Processed: ${this.exampleInput}`;
100
+
101
+ // Report progress
102
+ await this.reportProgress(50, 'Processing complete, finalizing...');
103
+
104
+ // Save checkpoint before continuing
105
+ await this.checkpoint({
106
+ step: 'finalizing',
107
+ processedData
108
+ });
109
+
110
+ // Return success to continue to next tick
111
+ return this.success({ result: 'processing', status: 'in_progress' });
112
+ }
113
+
114
+ case 'finalizing': {
115
+ // Step 2: Finalize the result
116
+ const result = `Final: ${checkpoint?.processedData}`;
117
+
118
+ // Report completion
119
+ await this.reportProgress(100, 'Complete');
120
+
121
+ // Return success with final output
122
+ return this.success({
123
+ result: result,
124
+ status: 'completed'
125
+ });
126
+ }
127
+
128
+ default:
129
+ throw new Error(`Unknown step: ${currentStep}`);
130
+ }
131
+
132
+ } catch (error) {
133
+ // Return failure with error information
134
+ // failure(code, message, details?)
135
+ return this.failure(
136
+ 'EXECUTION_ERROR',
137
+ error instanceof Error ? error.message : 'Unknown error occurred',
138
+ {
139
+ input: this.exampleInput
140
+ }
141
+ );
142
+ }
143
+ }
144
+ }
145
+
146
+ // Export an instance for the AgenticFlow runtime
147
+ export default new {{handlerClassName}}();
@@ -0,0 +1,102 @@
1
+ # {{displayName}}
2
+
3
+ {{description}}
4
+
5
+ ## Overview
6
+
7
+ This stateless handler {{description}}
8
+
9
+ ## Development
10
+
11
+ ### Prerequisites
12
+
13
+ - Node.js 18+
14
+ - npm or yarn
15
+
16
+ ### Getting Started
17
+
18
+ 1. Install dependencies:
19
+ ```bash
20
+ npm install
21
+ ```
22
+
23
+ 2. Set up environment variables:
24
+ ```bash
25
+ cp .env .env.local
26
+ # Edit .env.local with your API keys
27
+ ```
28
+
29
+ 3. Start development server:
30
+ ```bash
31
+ afh dev
32
+ ```
33
+
34
+ 4. Open http://localhost:3000 to access the development UI
35
+
36
+ ### Configuration
37
+
38
+ The handler accepts the following inputs:
39
+
40
+ - **exampleInput** (string, required): An example input parameter
41
+
42
+ Add your specific inputs in `manifest.json` and update the TypeScript interfaces in `src/index.ts`.
43
+
44
+ ### Testing
45
+
46
+ Run tests with:
47
+ ```bash
48
+ afh test
49
+ ```
50
+
51
+ ### Building
52
+
53
+ Create a production build:
54
+ ```bash
55
+ afh build
56
+ ```
57
+
58
+ This will create a `.afh` package file ready for deployment.
59
+
60
+ ### Publishing
61
+
62
+ Publish to the AgenticFlow marketplace:
63
+ ```bash
64
+ afh login
65
+ afh publish
66
+ ```
67
+
68
+ ## Project Structure
69
+
70
+ - `src/index.ts` - Main handler implementation
71
+ - `manifest.json` - Handler metadata and configuration
72
+ - `assets/` - Icons and visual resources
73
+ - `docs/` - Documentation
74
+ - `examples/` - Test configurations
75
+ - `.env` - Environment variables (gitignored)
76
+
77
+ ## API Reference
78
+
79
+ ### Inputs
80
+
81
+ | Property | Type | Source | Required | Description |
82
+ |----------|------|--------|----------|-------------|
83
+ | exampleInput | string | config | ✅ | An example input parameter |
84
+
85
+ ### Outputs
86
+
87
+ | Property | Type | Description |
88
+ |----------|------|-------------|
89
+ | result | string | The processing result |
90
+ | status | string | Processing status |
91
+
92
+ ## Contributing
93
+
94
+ 1. Fork the repository
95
+ 2. Create a feature branch
96
+ 3. Make your changes
97
+ 4. Add tests
98
+ 5. Submit a pull request
99
+
100
+ ## License
101
+
102
+ MIT - see LICENSE file for details
@@ -0,0 +1,63 @@
1
+ {
2
+ "$schema": "https://agenticflow.com/schemas/handler-manifest-v1.json",
3
+ "id": "{{handlerType}}",
4
+ "version": "1.0.0",
5
+ "name": "{{displayName}}",
6
+ "description": "{{description}}",
7
+ "longDescription": "# {{displayName}}\n\n{{description}}\n\n## Features\n\n- Easy to configure\n- Reliable processing\n- Well documented\n\n## Usage\n\nAdd detailed usage instructions here.",
8
+
9
+ "author": {
10
+ "name": "{{authorName}}",
11
+ "email": "{{authorEmail}}"
12
+ },
13
+
14
+ "handler": {
15
+ "type": "{{handlerType}}",
16
+ "category": "{{category}}",
17
+ "stateful": {{isStateful}},
18
+ "timeout": 30000,
19
+ "retryable": true
20
+ },
21
+
22
+ "inputs": [
23
+ {
24
+ "property": "exampleInput",
25
+ "type": "string",
26
+ "source": "config",
27
+ "required": true,
28
+ "description": "An example input parameter",
29
+ "placeholder": "Enter your value here"
30
+ }
31
+ ],
32
+
33
+ "outputs": [
34
+ {
35
+ "property": "result",
36
+ "type": "string",
37
+ "description": "The processing result"
38
+ },
39
+ {
40
+ "property": "status",
41
+ "type": "string",
42
+ "description": "Processing status"
43
+ }
44
+ ],
45
+
46
+ "visual": {
47
+ "icon": "assets/icon.png",
48
+ "color": "{{categoryColor}}",
49
+ "tags": ["{{handlerTypeFirstWord}}", "{{category}}"]
50
+ },
51
+
52
+ "marketplace": {
53
+ "pricing": "free",
54
+ "license": "MIT",
55
+ "repository": "https://github.com/{{authorGitHub}}/{{handlerType}}",
56
+ "homepage": "https://docs.example.com/{{handlerType}}"
57
+ },
58
+
59
+ "requirements": {
60
+ "agenticflow": ">=0.0.1",
61
+ "node": ">=18.0.0"
62
+ }
63
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "{{handlerType}}",
3
+ "version": "1.0.0",
4
+ "description": "{{description}}",
5
+ "main": "src/index.ts",
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "afh dev",
9
+ "test": "afh test",
10
+ "build": "afh build",
11
+ "publish": "afh publish"
12
+ },
13
+ "keywords": ["{{handlerTypeFirstWord}}", "{{category}}", "agenticflow", "handler"],
14
+ "author": "{{authorName}} <{{authorEmail}}>",
15
+ "license": "MIT",
16
+ "dependencies": {
17
+ "@flowmonkey/core": "^0.0.1"
18
+ },
19
+ "devDependencies": {
20
+ "typescript": "^5.0.0",
21
+ "@types/node": "^20.0.0"
22
+ }
23
+ }