{"owner":"bombshell-dev","repo":"clack","hasSkills":true,"totalSkillsCount":8,"totalTokensCount":15805,"categories":["anthropic-skill","plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["packages/prompts/CHANGELOG.md","packages/prompts/tsconfig.json","packages/core/package.json","packages/prompts/package.json","packages/core/README.md","packages/prompts/README.md","packages/core/CHANGELOG.md","packages/core/tsconfig.json"],"skills":{"packages/prompts/CHANGELOG.md":"# @clack/prompts\n\n## 1.8.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n- Updated dependencies [[`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395)]:\n  - @clack/core@1.5.1\n\n## 1.8.0\n\n### Minor Changes\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n### Patch Changes\n\n- [#588](https://github.com/bombshell-dev/clack/pull/588) [`6506135`](https://github.com/bombshell-dev/clack/commit/65061353e65e468035d8d8c7de9359926774626d) Thanks [@danielroe](https://github.com/danielroe)! - Style the guide bar rendered by `box({ withGuide: true })` in grey so it matches the gutter drawn by `log`, `note` and the spinner\n\n- [#599](https://github.com/bombshell-dev/clack/pull/599) [`0547d6f`](https://github.com/bombshell-dev/clack/commit/0547d6f4c16c4580b06c592e698b9ceb621f2547) Thanks [@43081j](https://github.com/43081j)! - Fixes a withGuide rendering issue leaving extra spaces in text prompts.\n\n- Updated dependencies [[`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b), [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc), [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b), [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8), [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a)]:\n  - @clack/core@1.5.0\n\n## 1.7.0\n\n### Minor Changes\n\n- [#574](https://github.com/bombshell-dev/clack/pull/574) [`8f1c380`](https://github.com/bombshell-dev/clack/commit/8f1c380683cfb5fb7a094610342046ae1603e28e) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `showInstructions` option to `select`, `multiselect`, and `groupMultiselect`. Keyboard hints remain shown by default; pass `showInstructions: false` to hide them.\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n- Updated dependencies [[`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06)]:\n  - @clack/core@1.4.3\n\n## 1.6.0\n\n### Minor Changes\n\n- [#568](https://github.com/bombshell-dev/clack/pull/568) [`f87933f`](https://github.com/bombshell-dev/clack/commit/f87933fb7b3f4c401b9e51a152b95cb8e7200fe5) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Updates default formatter of `note()` to note dim lines anymore\n\n  If you want the old behavior, provide a `format()` function:\n\n  ```diff\n  import { note } from '@clack/prompts';\n  +import { styleText } from 'node:util';\n\n  note(\n    'You can edit the file src/index.jsx',\n    'Next steps.'\n  +  { format: (text) => styleText('dim', text) }\n  );\n  ```\n\n- [#567](https://github.com/bombshell-dev/clack/pull/567) [`cc6aab5`](https://github.com/bombshell-dev/clack/commit/cc6aab50186cff8a02dc98e9cfd3897c29a33b15) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add keyboard instruction footers to `select`, `multiselect`, and `groupMultiselect` in the active state, matching autocomplete. No option — always shown.\n\n### Patch Changes\n\n- Updated dependencies [[`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1), [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb)]:\n  - @clack/core@1.4.2\n\n## 1.5.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n- [#546](https://github.com/bombshell-dev/clack/pull/546) [`56e9d67`](https://github.com/bombshell-dev/clack/commit/56e9d6707715bc858d9c2dbc444230b02813e809) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `date`, `limit-options`, and `messages`\n\n- Updated dependencies [[`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb)]:\n  - @clack/core@1.4.1\n\n## 1.5.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#542](https://github.com/bombshell-dev/clack/pull/542) [`adb6af9`](https://github.com/bombshell-dev/clack/commit/adb6af9f5fb39408934323a7415beb46b63ecd9a) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `box`, `group`, and `group-multi-select`\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n- [#540](https://github.com/bombshell-dev/clack/pull/540) [`3170ed9`](https://github.com/bombshell-dev/clack/commit/3170ed94dc2a6ed7973228d46c664fb7461969ad) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `autocomplete`, `confirm`, and `path` prompts\n\n- Updated dependencies [[`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6), [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364)]:\n  - @clack/core@1.4.0\n\n## 1.4.0\n\n### Minor Changes\n\n- 284677e: Support scrolling and `maxItems` option for `groupMultiselect`, and removes indent when `withGuide` is set to `false`\n\n### Patch Changes\n\n- aab46a2: docs: add jsdoc for `text`, `password`, and `multiline` prompts\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n- Updated dependencies [54be8d7]\n  - @clack/core@1.3.1\n\n## 1.3.0\n\n### Minor Changes\n\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n### Patch Changes\n\n- 5b897a7: Fix mixed type-only and runtime exports from @clack/core.\n- Updated dependencies [78fd3ae]\n- Updated dependencies [ea5702e]\n- Updated dependencies [814ab9a]\n  - @clack/core@1.3.0\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- 134a1a1: Fix the `path` prompt so `directory: true` correctly enforces directory-only selection while still allowing directory navigation, and add regression tests for both directory and default file selection behavior.\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 336495a: Apply guide to wrapped multi-line messages in confirm prompt.\n- 9fe8de6: Respect `withGuide: false` in autocomplete and multiselect prompts.\n- 29a50cb: Fix `path` directory mode so pressing Enter with an existing directory `initialValue` submits that current directory instead of the first child option, and add regression coverage for immediate submit and child-directory navigation.\n- Updated dependencies [9786226]\n- Updated dependencies [bdf89a5]\n- Updated dependencies [417b451]\n- Updated dependencies [090902c]\n  - @clack/core@1.2.0\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n### Patch Changes\n\n- c3666e2: destruct `limitOption` param for better code readability, tweak types definitions\n- ba3df8e: Fixes withGuide support in intro, outro, and cancel messages.\n- Updated dependencies [e3333fb]\n  - @clack/core@1.1.0\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 86e36d8: Adds `withGuide` support to select prompt.\n- c697439: Fixes line wrapping behavior in autocomplete.\n- 0ded19c: Simplifies `withGuide` option checks.\n- 0e4ddc9: Fixes `withGuide` support in password and path prompts.\n- 76550d6: Adds `withGuide` support to selectKey prompt.\n- f9b9953: Adds `withGuide` support to password prompt.\n- 0e93ccb: Adds `vertical` arrangement option to `confirm` prompt.\n- 4e9ae13: Adds `withGuide` support to confirm prompt.\n- 0256238: Adds `withGuide` support to spinner prompt.\n- Updated dependencies [6404dc1]\n- Updated dependencies [2533180]\n  - @clack/core@1.0.1\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 415410b: This adds a custom filter function to autocompleteMultiselect. It could be used, for example, to support fuzzy searching logic.\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 8409f2c: feat: add styleFrame option for spinner\n- 2837845: Adds suggestion and path prompts\n- 99c3530: Adds `format` option to the note prompt to allow formatting of individual lines\n- 0aaee4c: Added new `taskLog` prompt for log output which is cleared on success\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 44df9af: Adds a new `groupSpacing` option to grouped multi-select prompts. If set to an integer greater than 0, it will add that number of new lines between each group.\n- 55645c2: Support wrapping autocomplete and select prompts.\n- 9e5bc6c: Add support for signals in prompts, allowing them to be aborted.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- 38019c7: Updates the API for stopping spinners and progress bars to be clearer\n\n  Previously, both the spinner and progress bar components used a single `stop` method that accepted a code to indicate success, cancellation, or error. This update separates these into distinct methods: `stop()`, `cancel()`, and `error()`:\n\n  ```diff\n  const spinner = prompts.spinner();\n  spinner.start();\n\n  // Cancelling a spinner\n  - spinner.stop(undefined, 1);\n  + spinner.cancel();\n\n  // Stopping with an error\n  - spinner.stop(undefined, 2);\n  + spinner.error();\n  ```\n\n  As before, you can pass a message to each method to customize the output displayed:\n\n  ```js\n  spinner.cancel(\"Operation cancelled by user\");\n  progressBar.error(\"An error occurred during processing\");\n  ```\n\n- c45b9fb: Adds support for detecting spinner cancellation via CTRL+C. This allows for graceful handling of user interruptions during long-running operations.\n- f10071e: Using the `group` method, task logs can now have groups which themselves can have scrolling windows of logs.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 76fd17f: Added new `box` prompt for rendering boxed text, similar a note.\n- 9a09318: Adds new `progress` prompt to display a progess-bar\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n- 9bd8072: Add a `required` option to autocomplete multiselect.\n- 19558b9: Added support for custom frames in spinner prompt\n\n### Patch Changes\n\n- 46dc0a4: Fixes multiselect only shows hints on the first item in the options list. Now correctly shows hints for all selected options with hint property.\n- aea4573: Clamp scrolling windows to 5 rows.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 55eb280: Fix placeholder rendering when using autocomplete.\n- 4d1d83b: Fixes rendering of multi-line messages and options in select prompt.\n- 6176ced: Add withGuide support to note prompt\n- 7b009df: Fix spinner clearing too many lines upwards when non-wrapping.\n- 43aed55: Change styling of disabled multi-select options to have strikethrough.\n- 17342d2: Exposes a new `SpinnerResult` type to describe the return type of `spinner`\n- 282b39e: Wrap spinner output to allow for multi-line/wrapped messages.\n- 2feaebb: Fix duplicated logs when scrolling through options with multiline messages by calculating `rowPadding` dynamically based on actual rendered lines instead of using a hardcoded value.\n- 69681ea: Strip destructive ANSI codes from task log messages.\n- b0fa7d8: Add support for wrapped messages in multi line prompts\n- 9999adf: fix note component overflow bug\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- 2839c66: fix(note): hard wrap text to column limit\n- 7a556ad: Updates all prompts to accept a custom `output` and `input` stream\n- 17d3650: Use a default import for picocolors to avoid run time errors in some environments.\n- 7cc8a55: Messages passed to the `stop` method of a spinner no longer have dots stripped.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- f952592: Fixes missing guide when rendering empty log lines.\n- 372b526: Add `clear` method to spinner for stopping and clearing.\n- d25f6d0: fix(note, box): handle CJK correctly\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 7530af0: Fixes wrapping of cancelled and success messages of select prompt\n- 4c89dd7: chore: use more accurate type to replace any in group select\n- 0b852e1: Handle `stop` calls on spinners which have not yet been started.\n- 42adff8: fix: add missing guide line in autocomplete-multiselect\n- 8e2e30a: fix: fix autocomplete bar color when validate\n- 2048eb1: Fix spinner's dots behavior with custom frames\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 9b92161: Show symbol when withGuide is true for log messages\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 09e596c: refactor(progress): remove unnecessary return statement in start function\n- 2310b43: Allow custom writables as output stream.\n- ae84dd0: Update key binding text to show tab/space when navigating, and tab otherwise.\n- Updated dependency on `@clack/core` to `1.0.0`\n\n## 0.10.0\n\n### Minor Changes\n\n- 613179d: Adds a new `indicator` option to `spinner`, which supports the original `\"dots\"` loading animation or a new `\"timer\"` loading animation.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  const spin = p.spinner({ indicator: \"timer\" });\n  spin.start(\"Loading\");\n  await sleep(3000);\n  spin.stop(\"Loaded\");\n  ```\n\n- a38b2bc: Adds `stream` API which provides the same methods as `log`, but for iterable (even async) message streams. This is particularly useful for AI responses which are dynamically generated by LLMs.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  await p.stream.step(\n    (async function* () {\n      yield* generateLLMResponse(question);\n    })()\n  );\n  ```\n\n## 0.9.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- 98925e3: Exports the `Option` type and improves JSDocannotations\n- 1904e57: Replace custom utility for stripping ANSI control sequences with Node's built-in [`stripVTControlCharacters`](https://nodejs.org/docs/latest/api/util.html#utilstripvtcontrolcharactersstr) utility.\n- Updated dependencies [8093f3c]\n- Updated dependencies [e5ba09a]\n- Updated dependencies [8cba8e3]\n  - @clack/core@0.4.1\n\n## 0.9.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/prompts\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n  One example use case is automatically cancelling a prompt after a timeout.\n\n  ```ts\n  const shouldContinue = await confirm({\n    message: \"This message will self destruct in 5 seconds\",\n    signal: AbortSignal.timeout(5000),\n  });\n  ```\n\n  Another use case is racing a long running task with a manual prompt.\n\n  ```ts\n  const abortController = new AbortController();\n\n  const projectType = await Promise.race([\n    detectProjectType({\n      signal: abortController.signal,\n    }),\n    select({\n      message: \"Pick a project type.\",\n      options: [\n        { value: \"ts\", label: \"TypeScript\" },\n        { value: \"js\", label: \"JavaScript\" },\n        { value: \"coffee\", label: \"CoffeeScript\", hint: \"oh no\" },\n      ],\n      signal: abortController.signal,\n    }),\n  ]);\n\n  abortController.abort();\n  ```\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- f9f139d: Adapts `spinner` output for static CI environments\n- Updated dependencies [a83d2f8]\n- Updated dependencies [801246b]\n- Updated dependencies [a83d2f8]\n- Updated dependencies [51e12bc]\n  - @clack/core@0.4.0\n\n## 0.8.2\n\n### Patch Changes\n\n- Updated dependencies [4845f4f]\n- Updated dependencies [d7b2fb9]\n  - @clack/core@0.3.5\n\n## 0.8.1\n\n### Patch Changes\n\n- 360afeb: feat: adaptative max items\n\n## 0.8.0\n\n### Minor Changes\n\n- 9acccde: Add tasks function for executing tasks in spinners\n\n### Patch Changes\n\n- b5c6b9b: Feat multiselect maxItems option\n- 50ed94a: fix: clear `spinner` hooks on `spinner.stop`\n- Updated dependencies [a04e418]\n- Updated dependencies [4f6fcf5]\n  - @clack/core@0.3.4\n\n## 0.7.0\n\n### Minor Changes\n\n- b27a701: add maxItems option to select prompt\n- 89371be: added a new method called `spinner.message(msg: string)`\n\n### Patch Changes\n\n- 52183c4: Fix `spinner` conflict with terminal on error between `spinner.start()` and `spinner.stop()`\n- ab51d29: Fixes cases where the note title length was miscalculated due to ansi characters\n- Updated dependencies [cd79076]\n  - @clack/core@0.3.3\n\n## 0.6.3\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n- Updated dependencies [c96eda5]\n  - @clack/core@0.3.2\n\n## 0.6.2\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n- Updated dependencies [58a1df1]\n  - @clack/core@0.3.1\n\n## 0.6.1\n\n### Patch Changes\n\n- ca08fb6: Support complex value types for `select`, `multiselect` and `groupMultiselect`.\n\n## 0.6.0\n\n### Minor Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n- 165a1b3: Add `log` APIs. Supports `log.info`, `log.success`, `log.warn`, and `log.error`. For low-level control, `log.message` is also exposed.\n\n### Patch Changes\n\n- Updated dependencies [8a4a12f]\n- Updated dependencies [8a4a12f]\n  - @clack/core@0.3.0\n\n## 0.5.1\n\n### Patch Changes\n\n- cc11917: Update default `password` mask\n- Updated dependencies [ec812b6]\n  - @clack/core@0.2.1\n\n## 0.5.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n### Patch Changes\n\n- Updated dependencies [d74dd05]\n- Updated dependencies [54c1bc3]\n  - @clack/core@0.2.0\n\n## 0.4.5\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n- Updated dependencies [1251132]\n- Updated dependencies [8994382]\n  - @clack/core@0.1.9\n\n## 0.4.4\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n- Updated dependencies [d96071c]\n  - @clack/core@0.1.8\n\n## 0.4.3\n\n### Patch Changes\n\n- 83d890e: Fix text cancel display bug\n\n## 0.4.2\n\n### Patch Changes\n\n- Update README\n\n## 0.4.1\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n- Updated dependencies [7fb5375]\n  - @clack/core@0.1.6\n\n## 0.4.0\n\n### Minor Changes\n\n- 61b88b6: Add `group` construct to group many prompts together\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n- Updated dependencies [de1314e]\n  - @clack/core@0.1.5\n\n## 0.3.0\n\n### Minor Changes\n\n- 493c592: Improve types for select/multiselect prompts. Numbers and booleans are now supported as the `value` option.\n- 15558e3: Improved Windows/non-unicode support\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- Updated dependencies [ca77da1]\n- Updated dependencies [8aed606]\n  - @clack/core@0.1.4\n\n## 0.2.2\n\n### Patch Changes\n\n- 94b24d9: Fix CJS `ansi-regex` interop\n\n## 0.2.1\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n- Updated dependencies [a99c458]\n  - @clack/core@0.1.3\n\n## 0.2.0\n\n### Minor Changes\n\n- Improved type safety\n- b1341d6: Updated styles, new note component\n\n### Patch Changes\n\n- Updated dependencies [7dcad8f]\n- Updated dependencies [2242f13]\n- Updated dependencies [b1341d6]\n  - @clack/core@0.1.2\n\n## 0.1.1\n\n### Patch Changes\n\n- fa09bf5: Use circle for radio, square for checkbox\n- Updated dependencies [4be7dbf]\n- Updated dependencies [b480679]\n  - @clack/core@0.1.1\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n### Patch Changes\n\n- Updated dependencies [7015ec9]\n  - @clack/core@0.1.0\n\n## 0.0.10\n\n### Patch Changes\n\n- e0b49e5: Update spinner so it actually spins\n\n## 0.0.9\n\n### Patch Changes\n\n- Update README\n\n## 0.0.8\n\n### Patch Changes\n\n- Updated dependencies [9d371c3]\n  - @clack/core@0.0.12\n\n## 0.0.7\n\n### Patch Changes\n\n- Update README\n\n## 0.0.6\n\n### Patch Changes\n\n- d20ef2a: Update keywords, URLs\n- Updated dependencies [441d5b7]\n- Updated dependencies [d20ef2a]\n- Updated dependencies [fe13c2f]\n  - @clack/core@0.0.11\n\n## 0.0.5\n\n### Patch Changes\n\n- Update README\n\n## 0.0.4\n\n### Patch Changes\n\n- 80404ab: Update README\n\n## 0.0.3\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n- Updated dependencies [a0cb382]\n  - @clack/core@0.0.10\n\n## 0.0.2\n\n### Patch Changes\n\n- Updated dependencies\n  - @clack/core@0.0.9\n\n## 0.0.1\n\n### Patch Changes\n\n- a4b5e13: Initial release\n- Updated dependencies [a4b5e13]\n  - @clack/core@0.0.8\n","packages/prompts/tsconfig.json":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n","packages/core/package.json":"{\n  \"name\": \"@clack/core\",\n  \"version\": \"1.5.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/core\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/core#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"arktype\": \"^2.2.0\",\n    \"vitest\": \"^3.2.4\"\n  }\n}\n","packages/prompts/package.json":"{\n  \"name\": \"@clack/prompts\",\n  \"version\": \"1.8.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/prompts\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/prompts#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"@clack/core\": \"workspace:*\",\n    \"fast-string-width\": \"^3.0.2\",\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"is-unicode-supported\": \"^1.3.0\",\n    \"memfs\": \"^4.17.2\",\n    \"vitest\": \"^3.2.4\",\n    \"vitest-ansi-serializer\": \"^0.1.2\"\n  }\n}\n","packages/core/README.md":"# `@clack/core`\n\nClack contains low-level primitives for implementing your own command-line applications.\n\nCurrently, `TextPrompt`, `SelectPrompt`, and `ConfirmPrompt` are exposed as well as the base `Prompt` class.\n\nEach `Prompt` accepts a `render` function.\n\n```js\nimport { TextPrompt, isCancel } from '@clack/core';\n\nconst p = new TextPrompt({\n  render() {\n    return `What's your name?\\n${this.userInputWithCursor}`;\n  },\n});\n\nconst name = await p.prompt();\nif (isCancel(name)) {\n  process.exit(0);\n}\n```\n","packages/prompts/README.md":"# `@clack/prompts`\n\nEffortlessly build beautiful command-line apps 🪄 [Try the demo](https://stackblitz.com/edit/clack-prompts?file=index.js)\n\n![clack-prompt](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-demo.gif)\n\n---\n\n`@clack/prompts` is an opinionated, pre-styled wrapper around [`@clack/core`](https://www.npmjs.com/package/@clack/core).\n\n- 🤏 80% smaller than other options\n- 💎 Beautiful, minimal UI\n- ✅ Simple API\n- 🧱 Comes with `text`, `password`, `confirm`, `date`, `select`, `autocomplete`, `selectKey`, `multiselect`, `path`, and `spinner` components\n\n## Basics\n\n### Setup\n\nThe `intro` and `outro` functions will print a message to begin or end a prompt session, respectively.\n\n```js\nimport { intro, outro } from '@clack/prompts';\n\nintro(`create-my-app`);\n// Do stuff\noutro(`You're all set!`);\n```\n\n### Cancellation\n\nThe `isCancel` function is a guard that detects when a user cancels a question with `CTRL + C`. You should handle this situation for each prompt, optionally providing a nice cancellation message with the `cancel` utility.\n\n```js\nimport { isCancel, cancel, text } from '@clack/prompts';\n\nconst value = await text({\n  message: 'What is the meaning of life?',\n});\n\nif (isCancel(value)) {\n  cancel('Operation cancelled.');\n  process.exit(0);\n}\n```\n\n## Components\n\n### Text\n\nThe text component accepts a single line of text.\n\n```js\nimport { text } from '@clack/prompts';\n\nconst meaning = await text({\n  message: 'What is the meaning of life?',\n  placeholder: 'Not sure',\n  initialValue: '42',\n  validate(value) {\n    if (value.length === 0) return `Value is required!`;\n  },\n});\n```\n\n### Password\n\nThe password prompt behaves like the [`text`](#text) prompt, but masks the input as the user types.\n\n```js\nimport { password } from '@clack/prompts';\n\nconst secret = await password({\n  message: 'Set a password.',\n  mask: '*',\n  validate(value) {\n    if (!value || value.length < 8) return 'Password must be at least 8 characters.';\n  },\n});\n```\n\n### Confirm\n\nThe `confirm` prompt accepts a yes or no choice, returning a boolean value corresponding to the user's selection.\n\n```js\nimport { confirm } from '@clack/prompts';\n\nconst shouldContinue = await confirm({\n  message: 'Do you want to continue?',\n});\n```\n\n### Date\n\nThe `date` prompt provides an interactive date picker, allowing users to navigate between year, month, and day segments and increment/decrement values using keyboard controls.\n\n```js\nimport { date } from '@clack/prompts';\n\nconst birthday = await date({\n  message: 'Pick your birthday',\n  minDate: new Date('1900-01-01'),\n  initialValue: new Date(),\n  maxDate: new Date(),\n});\n```\n\n### Select\n\nThe select component allows a user to choose one value from a list of options. The result is the `value` prop of a given option.\n\n```js\nimport { select } from '@clack/prompts';\n\nconst projectType = await select({\n  message: 'Pick a project type.',\n  options: [\n    { value: 'ts', label: 'TypeScript' },\n    { value: 'js', label: 'JavaScript', disabled: true },\n    { value: 'coffee', label: 'CoffeeScript', hint: 'oh no' },\n  ],\n});\n```\n\n### Autocomplete\n\nThe `autocomplete` prompt combines text input with a searchable list of options. It's perfect for when you have a large list of options and want to help users find what they're looking for quickly.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Pick a framework.',\n  placeholder: 'Type to search...',\n  options: [\n    { value: 'next', label: 'Next.js' },\n    { value: 'nuxt', label: 'Nuxt' },\n    { value: 'sveltekit', label: 'SvelteKit' },\n    { value: 'remix', label: 'Remix' },\n  ],\n});\n```\n\n### Autocomplete Multi-Select\n\nThe `autocompleteMultiselect` prompt combines the search functionality of [autocomplete](#autocomplete) with the ability to select multiple options.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Search for a framework',\n  options: [\n    { value: 'next', label: 'Next.js', hint: 'React framework' },\n    { value: 'astro', label: 'Astro', hint: 'Content-focused' },\n    { value: 'svelte', label: 'SvelteKit', hint: 'Compile-time framework' },\n    { value: 'remix', label: 'Remix', hint: 'Full stack framework' },\n    { value: 'nuxt', label: 'Nuxt', hint: 'Vue framework' },\n  ],\n  placeholder: 'Type to search...',\n  maxItems: 5,\n});\n```\n\n### Select Key\n\nThe `selectKey` component lets a user choose an option by pressing its single-character string `value` key directly.\n\n```js\nimport { selectKey } from '@clack/prompts';\n\nconst action = await selectKey({\n  message: 'Pick an action.',\n  options: [\n    { value: 'd', label: 'Deploy' },\n    { value: 't', label: 'Run tests' },\n    { value: 'q', label: 'Quit' },\n  ],\n});\n```\n\n### Multi-Select\n\nThe `multiselect` component allows a user to choose many values from a list of options. The result is an array with all selected `value` props.\n\n```js\nimport { multiselect } from '@clack/prompts';\n\nconst additionalTools = await multiselect({\n  message: 'Select additional tools.',\n  options: [\n    { value: 'eslint', label: 'ESLint', hint: 'recommended' },\n    { value: 'prettier', label: 'Prettier', disabled: true },\n    { value: 'gh-action', label: 'GitHub Action' },\n  ],\n  required: false,\n});\n```\n\nIt is also possible to select multiple items arranged into hierarchy by using `groupMultiselect`:\n\n```js\nimport { groupMultiselect } from '@clack/prompts';\n\nconst basket = await groupMultiselect({\n  message: 'Select your favorite fruits and vegetables:',\n  options: {\n    fruits: [\n      { value: 'apple', label: 'apple' },\n      { value: 'banana', label: 'banana' },\n      { value: 'cherry', label: 'cherry' },\n    ],\n    vegetables: [\n      { value: 'carrot', label: 'carrot' },\n      { value: 'spinach', label: 'spinach' },\n      { value: 'potato', label: 'potato' },\n    ]\n  }\n});\n```\n\n### Multi-Line Text\n\nThe multi-line prompt accepts multiple lines of text input. By default, pressing `Enter` twice submits the input.\n\n```js\nimport { multiline } from '@clack/prompts';\n\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  placeholder: 'Start typing...',\n  validate(value) {\n    if (value.length === 0) return `value is required`;\n  },\n});\n```\n\nSet `showSubmit` to display an explicit submit button instead of double `Enter` submission:\n\n```js\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  showSubmit: true,\n});\n```\n\n### Path\n\nThe `path` prompt extends [`autocomplete`](#autocomplete) to provide file and directory suggestions.\n\n```js\nimport { path } from '@clack/prompts';\n\nconst targetDir = await path({\n  message: 'Select an existing directory.',\n  directory: true,\n});\n```\n\n### Spinner\n\nThe spinner component surfaces a pending action, such as a long-running download or dependency installation.\n\n```js\nimport { spinner } from '@clack/prompts';\n\nconst s = spinner();\ns.start('Installing via npm');\n// Do installation here\ns.stop('Installed via npm');\n```\n\n### Progress\n\nThe progress component extends the spinner component to add a progress bar to visualize the progression of an action.\n\n```js\nimport { progress } from '@clack/prompts';\n\nconst p = progress({ max: 10 });\np.start('Downloading archive');\n// Do download here\np.advance(3, 'Downloading (30%)');\n// ...\np.advance(5, 'Downloading (80%)');\n// ...\np.stop('Archive downloaded');\n```\n\n## Utilities\n\n### Grouping\n\nGrouping prompts together is a great way to keep your code organized. This accepts a JSON object with a name that can be used to reference the group later. The second argument is an optional but has a `onCancel` callback that will be called if the user cancels one of the prompts in the group.\n\n```js\nimport * as p from '@clack/prompts';\n\nconst group = await p.group(\n  {\n    name: () => p.text({ message: 'What is your name?' }),\n    age: () => p.text({ message: 'What is your age?' }),\n    color: ({ results }) =>\n      p.multiselect({\n        message: `What is your favorite color ${results.name}?`,\n        options: [\n          { value: 'red', label: 'Red' },\n          { value: 'green', label: 'Green' },\n          { value: 'blue', label: 'Blue' },\n        ],\n      }),\n  },\n  {\n    // On Cancel callback that wraps the group\n    // So if the user cancels one of the prompts in the group this function will be called\n    onCancel: ({ results }) => {\n      p.cancel('Operation cancelled.');\n      process.exit(0);\n    },\n  }\n);\n\nconsole.log(group.name, group.age, group.color);\n```\n\n### Tasks\n\nExecute multiple tasks in spinners.\n\n```js\nimport { tasks } from '@clack/prompts';\n\nawait tasks([\n  {\n    title: 'Installing via npm',\n    task: async (message) => {\n      // Do installation here\n      return 'Installed via npm';\n    },\n  },\n]);\n```\n\n### Logs\n\n```js\nimport { log } from '@clack/prompts';\n\nlog.info('Info!');\nlog.success('Success!');\nlog.step('Step!');\nlog.warn('Warn!');\nlog.error('Error!');\nlog.message('Hello, World', { symbol: color.cyan('~') });\n```\n\n\n### Stream\n\nWhen interacting with dynamic LLMs or other streaming message providers, use the `stream` APIs to log messages from an iterable, even an async one.\n\n```js\nimport { stream } from '@clack/prompts';\n\nstream.info((function *() { yield 'Info!'; })());\nstream.success((function *() { yield 'Success!'; })());\nstream.step((function *() { yield 'Step!'; })());\nstream.warn((function *() { yield 'Warn!'; })());\nstream.error((function *() { yield 'Error!'; })());\nstream.message((function *() { yield 'Hello'; yield \", World\" })(), { symbol: color.cyan('~') });\n```\n\n![clack-log-prompts](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-logs.png)\n\n### Task Log\n\nWhen executing a sub-process or a similar sub-task, `taskLog` can be used to render the output continuously and clear it at the end if it was successful.\n\n```js\nimport { taskLog } from '@clack/prompts';\n\nconst log = taskLog({\n\ttitle: 'Running npm install'\n});\n\nfor await (const line of npmInstall()) {\n\tlog.message(line);\n}\n\nif (success) {\n\tlog.success('Done!');\n} else {\n\tlog.error('Failed!');\n}\n```\n","packages/core/CHANGELOG.md":"# @clack/core\n\n## 1.5.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n## 1.5.0\n\n### Minor Changes\n\n- [#595](https://github.com/bombshell-dev/clack/pull/595) [`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add an `accessible` option to the shared `PromptOptions` and a resolved `accessible` getter on the base `Prompt`, so any prompt can opt into accessible mode individually. Resolution order: per-prompt option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable.\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n- [#593](https://github.com/bombshell-dev/clack/pull/593) [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `isAccessible()` and an `accessible` setting as the foundation for accessible mode. Resolution order: per-call option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable (any non-empty value enables it, except `0` and `false`).\n\n## 1.4.3\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n## 1.4.2\n\n### Patch Changes\n\n- [#561](https://github.com/bombshell-dev/clack/pull/561) [`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1) Thanks [@avallete](https://github.com/avallete)! - Fix `password` prompt resolving to `undefined` on empty submit. It now normalizes an empty submission to `\"\"`, matching the `text` prompt behavior and the documented `Promise<string | symbol>` return type.\n\n- [#569](https://github.com/bombshell-dev/clack/pull/569) [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb) Thanks [@43081j](https://github.com/43081j)! - fix: only submit multi-line prompt when double-return happens at end of input.\n\n  Also fixes two minor things:\n\n  - Initial value is used as initial user input for multi-line prompts\n  - Cursor is placed at the end when there is initial input\n\n## 1.4.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n## 1.4.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n## 1.3.1\n\n### Patch Changes\n\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n\n## 1.3.0\n\n### Minor Changes\n\n- 78fd3ae: Remove unused `debug` option key.\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 417b451: Only apply autocomplete default filter if it has been explicitly set or if options is not a getter.\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 2533180: Updates the documentation to mention `userInputWithCursor` when using the `TextPrompt` primitive.\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 2837845: Adds suggestion and path prompts\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 55645c2: Support wrapping autocomplete and select prompts.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n\n### Patch Changes\n\n- 0718b07: fix: export `*Options` types for prompts.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- a4f5034: Fixes an edge case for placeholder values. Previously, when pressing `enter` on an empty prompt, placeholder values would be ignored. Now, placeholder values are treated as the prompt value.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- a36292b: Fix \"TTY initialization failed: uv_tty_init returned EBADF (bad file descriptor)\" error happening on Windows for non-tty terminals.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- 4ba2d78: Support short terminal windows when re-rendering by accounting for off-screen lines\n- 34f52fe: Validates initial values immediately when using text prompts with initialValue and validate props.\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 4f6b3c2: Set initial values of auto complete prompt to first option when multiple is false.\n- 8ead5d3: Avoid passing initial values to core when using auto complete prompt\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 2310b43: Allow custom writables as output stream.\n- d98e033: add invert selection for multiselect prompt\n\n## 0.4.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- e5ba09a: Fixes a cursor display bug in terminals that do not support the \"hidden\" escape sequence. See [Issue #127](https://github.com/bombshell-dev/clack/issues/127).\n- 8cba8e3: Fixes a rendering bug with cursor positions for `TextPrompt`\n\n## 0.4.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/core\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- 51e12bc: Improves types for events and interaction states.\n\n## 0.3.5\n\n### Patch Changes\n\n- 4845f4f: Fixes a bug which kept the terminal cursor hidden after a prompt is cancelled\n- d7b2fb9: Adds missing `LICENSE` file. Since the `package.json` file has always included `\"license\": \"MIT\"`, please consider this a licensing clarification rather than a licensing change.\n\n## 0.3.4\n\n### Patch Changes\n\n- a04e418: fix(@clack/core): keyboard input not working after await in spinner\n- 4f6fcf5: feat(@clack/core): allow tab completion for placeholders\n\n## 0.3.3\n\n### Patch Changes\n\n- cd79076: fix: restore raw mode on unblock\n\n## 0.3.2\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n\n## 0.3.1\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n\n## 0.3.0\n\n### Minor Changes\n\n- 8a4a12f: Add `GroupMultiSelect` prompt\n\n### Patch Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n\n## 0.2.1\n\n### Patch Changes\n\n- ec812b6: fix `readline` hang on Windows\n\n## 0.2.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n## 0.1.9\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n\n## 0.1.8\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n## 0.1.7\n\n### Patch Changes\n\n- 6d9e675: Add support for neovim cursor motion (`hjkl`)\n\n  Thanks [@esau-morais](https://github.com/esau-morais) for the assist!\n\n## 0.1.6\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n\n## 0.1.5\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n\n## 0.1.4\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- 8aed606: Fix `MaxListenersExceededWarning` by detaching `stdin` listeners on close\n\n## 0.1.3\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n\n## 0.1.2\n\n### Patch Changes\n\n- Allow isCancel to type guard any unknown value\n- 7dcad8f: Allow placeholder to be passed to TextPrompt\n- 2242f13: Fix multiselect returning undefined\n- b1341d6: Improved placeholder handling\n\n## 0.1.1\n\n### Patch Changes\n\n- 4be7dbf: Ensure raw mode is unset on submit\n- b480679: Preserve value if validation fails\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n## 0.0.12\n\n### Patch Changes\n\n- 9d371c3: Fix rendering bug when using y/n to confirm\n\n## 0.0.11\n\n### Patch Changes\n\n- 441d5b7: fix select return undefined\n- d20ef2a: Update keywords, URLs\n- fe13c2f: fix cursor missing after submit\n\n## 0.0.10\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n\n## 0.0.9\n\n### Patch Changes\n\n- Fix node@16 issue (cannot read \"createInterface\" of undefined)\n\n## 0.0.8\n\n### Patch Changes\n\n- a4b5e13: Bug fixes, exposes `block` utility\n\n## 0.0.7\n\n### Patch Changes\n\n- Fix cursor bug\n\n## 0.0.6\n\n### Patch Changes\n\n- Fix error with character check\n\n## 0.0.5\n\n### Patch Changes\n\n- 491f9e0: update readme\n\n## 0.0.4\n\n### Patch Changes\n\n- 7372d5c: Fix bug with line deletion\n\n## 0.0.3\n\n### Patch Changes\n\n- 5605d28: Do not bundle dependencies (take II)\n\n## 0.0.2\n\n### Patch Changes\n\n- 2ee67cb: don't bundle deps\n\n## 0.0.1\n\n### Patch Changes\n\n- 306598e: Initial publish, still WIP\n","packages/core/tsconfig.json":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n"},"files":{"packages/prompts/CHANGELOG.md":"# @clack/prompts\n\n## 1.8.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n- Updated dependencies [[`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395)]:\n  - @clack/core@1.5.1\n\n## 1.8.0\n\n### Minor Changes\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n### Patch Changes\n\n- [#588](https://github.com/bombshell-dev/clack/pull/588) [`6506135`](https://github.com/bombshell-dev/clack/commit/65061353e65e468035d8d8c7de9359926774626d) Thanks [@danielroe](https://github.com/danielroe)! - Style the guide bar rendered by `box({ withGuide: true })` in grey so it matches the gutter drawn by `log`, `note` and the spinner\n\n- [#599](https://github.com/bombshell-dev/clack/pull/599) [`0547d6f`](https://github.com/bombshell-dev/clack/commit/0547d6f4c16c4580b06c592e698b9ceb621f2547) Thanks [@43081j](https://github.com/43081j)! - Fixes a withGuide rendering issue leaving extra spaces in text prompts.\n\n- Updated dependencies [[`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b), [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc), [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b), [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8), [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a)]:\n  - @clack/core@1.5.0\n\n## 1.7.0\n\n### Minor Changes\n\n- [#574](https://github.com/bombshell-dev/clack/pull/574) [`8f1c380`](https://github.com/bombshell-dev/clack/commit/8f1c380683cfb5fb7a094610342046ae1603e28e) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `showInstructions` option to `select`, `multiselect`, and `groupMultiselect`. Keyboard hints remain shown by default; pass `showInstructions: false` to hide them.\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n- Updated dependencies [[`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06)]:\n  - @clack/core@1.4.3\n\n## 1.6.0\n\n### Minor Changes\n\n- [#568](https://github.com/bombshell-dev/clack/pull/568) [`f87933f`](https://github.com/bombshell-dev/clack/commit/f87933fb7b3f4c401b9e51a152b95cb8e7200fe5) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Updates default formatter of `note()` to note dim lines anymore\n\n  If you want the old behavior, provide a `format()` function:\n\n  ```diff\n  import { note } from '@clack/prompts';\n  +import { styleText } from 'node:util';\n\n  note(\n    'You can edit the file src/index.jsx',\n    'Next steps.'\n  +  { format: (text) => styleText('dim', text) }\n  );\n  ```\n\n- [#567](https://github.com/bombshell-dev/clack/pull/567) [`cc6aab5`](https://github.com/bombshell-dev/clack/commit/cc6aab50186cff8a02dc98e9cfd3897c29a33b15) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add keyboard instruction footers to `select`, `multiselect`, and `groupMultiselect` in the active state, matching autocomplete. No option — always shown.\n\n### Patch Changes\n\n- Updated dependencies [[`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1), [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb)]:\n  - @clack/core@1.4.2\n\n## 1.5.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n- [#546](https://github.com/bombshell-dev/clack/pull/546) [`56e9d67`](https://github.com/bombshell-dev/clack/commit/56e9d6707715bc858d9c2dbc444230b02813e809) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `date`, `limit-options`, and `messages`\n\n- Updated dependencies [[`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb)]:\n  - @clack/core@1.4.1\n\n## 1.5.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#542](https://github.com/bombshell-dev/clack/pull/542) [`adb6af9`](https://github.com/bombshell-dev/clack/commit/adb6af9f5fb39408934323a7415beb46b63ecd9a) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `box`, `group`, and `group-multi-select`\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n- [#540](https://github.com/bombshell-dev/clack/pull/540) [`3170ed9`](https://github.com/bombshell-dev/clack/commit/3170ed94dc2a6ed7973228d46c664fb7461969ad) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `autocomplete`, `confirm`, and `path` prompts\n\n- Updated dependencies [[`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6), [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364)]:\n  - @clack/core@1.4.0\n\n## 1.4.0\n\n### Minor Changes\n\n- 284677e: Support scrolling and `maxItems` option for `groupMultiselect`, and removes indent when `withGuide` is set to `false`\n\n### Patch Changes\n\n- aab46a2: docs: add jsdoc for `text`, `password`, and `multiline` prompts\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n- Updated dependencies [54be8d7]\n  - @clack/core@1.3.1\n\n## 1.3.0\n\n### Minor Changes\n\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n### Patch Changes\n\n- 5b897a7: Fix mixed type-only and runtime exports from @clack/core.\n- Updated dependencies [78fd3ae]\n- Updated dependencies [ea5702e]\n- Updated dependencies [814ab9a]\n  - @clack/core@1.3.0\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- 134a1a1: Fix the `path` prompt so `directory: true` correctly enforces directory-only selection while still allowing directory navigation, and add regression tests for both directory and default file selection behavior.\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 336495a: Apply guide to wrapped multi-line messages in confirm prompt.\n- 9fe8de6: Respect `withGuide: false` in autocomplete and multiselect prompts.\n- 29a50cb: Fix `path` directory mode so pressing Enter with an existing directory `initialValue` submits that current directory instead of the first child option, and add regression coverage for immediate submit and child-directory navigation.\n- Updated dependencies [9786226]\n- Updated dependencies [bdf89a5]\n- Updated dependencies [417b451]\n- Updated dependencies [090902c]\n  - @clack/core@1.2.0\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n### Patch Changes\n\n- c3666e2: destruct `limitOption` param for better code readability, tweak types definitions\n- ba3df8e: Fixes withGuide support in intro, outro, and cancel messages.\n- Updated dependencies [e3333fb]\n  - @clack/core@1.1.0\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 86e36d8: Adds `withGuide` support to select prompt.\n- c697439: Fixes line wrapping behavior in autocomplete.\n- 0ded19c: Simplifies `withGuide` option checks.\n- 0e4ddc9: Fixes `withGuide` support in password and path prompts.\n- 76550d6: Adds `withGuide` support to selectKey prompt.\n- f9b9953: Adds `withGuide` support to password prompt.\n- 0e93ccb: Adds `vertical` arrangement option to `confirm` prompt.\n- 4e9ae13: Adds `withGuide` support to confirm prompt.\n- 0256238: Adds `withGuide` support to spinner prompt.\n- Updated dependencies [6404dc1]\n- Updated dependencies [2533180]\n  - @clack/core@1.0.1\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 415410b: This adds a custom filter function to autocompleteMultiselect. It could be used, for example, to support fuzzy searching logic.\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 8409f2c: feat: add styleFrame option for spinner\n- 2837845: Adds suggestion and path prompts\n- 99c3530: Adds `format` option to the note prompt to allow formatting of individual lines\n- 0aaee4c: Added new `taskLog` prompt for log output which is cleared on success\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 44df9af: Adds a new `groupSpacing` option to grouped multi-select prompts. If set to an integer greater than 0, it will add that number of new lines between each group.\n- 55645c2: Support wrapping autocomplete and select prompts.\n- 9e5bc6c: Add support for signals in prompts, allowing them to be aborted.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- 38019c7: Updates the API for stopping spinners and progress bars to be clearer\n\n  Previously, both the spinner and progress bar components used a single `stop` method that accepted a code to indicate success, cancellation, or error. This update separates these into distinct methods: `stop()`, `cancel()`, and `error()`:\n\n  ```diff\n  const spinner = prompts.spinner();\n  spinner.start();\n\n  // Cancelling a spinner\n  - spinner.stop(undefined, 1);\n  + spinner.cancel();\n\n  // Stopping with an error\n  - spinner.stop(undefined, 2);\n  + spinner.error();\n  ```\n\n  As before, you can pass a message to each method to customize the output displayed:\n\n  ```js\n  spinner.cancel(\"Operation cancelled by user\");\n  progressBar.error(\"An error occurred during processing\");\n  ```\n\n- c45b9fb: Adds support for detecting spinner cancellation via CTRL+C. This allows for graceful handling of user interruptions during long-running operations.\n- f10071e: Using the `group` method, task logs can now have groups which themselves can have scrolling windows of logs.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 76fd17f: Added new `box` prompt for rendering boxed text, similar a note.\n- 9a09318: Adds new `progress` prompt to display a progess-bar\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n- 9bd8072: Add a `required` option to autocomplete multiselect.\n- 19558b9: Added support for custom frames in spinner prompt\n\n### Patch Changes\n\n- 46dc0a4: Fixes multiselect only shows hints on the first item in the options list. Now correctly shows hints for all selected options with hint property.\n- aea4573: Clamp scrolling windows to 5 rows.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 55eb280: Fix placeholder rendering when using autocomplete.\n- 4d1d83b: Fixes rendering of multi-line messages and options in select prompt.\n- 6176ced: Add withGuide support to note prompt\n- 7b009df: Fix spinner clearing too many lines upwards when non-wrapping.\n- 43aed55: Change styling of disabled multi-select options to have strikethrough.\n- 17342d2: Exposes a new `SpinnerResult` type to describe the return type of `spinner`\n- 282b39e: Wrap spinner output to allow for multi-line/wrapped messages.\n- 2feaebb: Fix duplicated logs when scrolling through options with multiline messages by calculating `rowPadding` dynamically based on actual rendered lines instead of using a hardcoded value.\n- 69681ea: Strip destructive ANSI codes from task log messages.\n- b0fa7d8: Add support for wrapped messages in multi line prompts\n- 9999adf: fix note component overflow bug\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- 2839c66: fix(note): hard wrap text to column limit\n- 7a556ad: Updates all prompts to accept a custom `output` and `input` stream\n- 17d3650: Use a default import for picocolors to avoid run time errors in some environments.\n- 7cc8a55: Messages passed to the `stop` method of a spinner no longer have dots stripped.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- f952592: Fixes missing guide when rendering empty log lines.\n- 372b526: Add `clear` method to spinner for stopping and clearing.\n- d25f6d0: fix(note, box): handle CJK correctly\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 7530af0: Fixes wrapping of cancelled and success messages of select prompt\n- 4c89dd7: chore: use more accurate type to replace any in group select\n- 0b852e1: Handle `stop` calls on spinners which have not yet been started.\n- 42adff8: fix: add missing guide line in autocomplete-multiselect\n- 8e2e30a: fix: fix autocomplete bar color when validate\n- 2048eb1: Fix spinner's dots behavior with custom frames\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 9b92161: Show symbol when withGuide is true for log messages\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 09e596c: refactor(progress): remove unnecessary return statement in start function\n- 2310b43: Allow custom writables as output stream.\n- ae84dd0: Update key binding text to show tab/space when navigating, and tab otherwise.\n- Updated dependency on `@clack/core` to `1.0.0`\n\n## 0.10.0\n\n### Minor Changes\n\n- 613179d: Adds a new `indicator` option to `spinner`, which supports the original `\"dots\"` loading animation or a new `\"timer\"` loading animation.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  const spin = p.spinner({ indicator: \"timer\" });\n  spin.start(\"Loading\");\n  await sleep(3000);\n  spin.stop(\"Loaded\");\n  ```\n\n- a38b2bc: Adds `stream` API which provides the same methods as `log`, but for iterable (even async) message streams. This is particularly useful for AI responses which are dynamically generated by LLMs.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  await p.stream.step(\n    (async function* () {\n      yield* generateLLMResponse(question);\n    })()\n  );\n  ```\n\n## 0.9.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- 98925e3: Exports the `Option` type and improves JSDocannotations\n- 1904e57: Replace custom utility for stripping ANSI control sequences with Node's built-in [`stripVTControlCharacters`](https://nodejs.org/docs/latest/api/util.html#utilstripvtcontrolcharactersstr) utility.\n- Updated dependencies [8093f3c]\n- Updated dependencies [e5ba09a]\n- Updated dependencies [8cba8e3]\n  - @clack/core@0.4.1\n\n## 0.9.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/prompts\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n  One example use case is automatically cancelling a prompt after a timeout.\n\n  ```ts\n  const shouldContinue = await confirm({\n    message: \"This message will self destruct in 5 seconds\",\n    signal: AbortSignal.timeout(5000),\n  });\n  ```\n\n  Another use case is racing a long running task with a manual prompt.\n\n  ```ts\n  const abortController = new AbortController();\n\n  const projectType = await Promise.race([\n    detectProjectType({\n      signal: abortController.signal,\n    }),\n    select({\n      message: \"Pick a project type.\",\n      options: [\n        { value: \"ts\", label: \"TypeScript\" },\n        { value: \"js\", label: \"JavaScript\" },\n        { value: \"coffee\", label: \"CoffeeScript\", hint: \"oh no\" },\n      ],\n      signal: abortController.signal,\n    }),\n  ]);\n\n  abortController.abort();\n  ```\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- f9f139d: Adapts `spinner` output for static CI environments\n- Updated dependencies [a83d2f8]\n- Updated dependencies [801246b]\n- Updated dependencies [a83d2f8]\n- Updated dependencies [51e12bc]\n  - @clack/core@0.4.0\n\n## 0.8.2\n\n### Patch Changes\n\n- Updated dependencies [4845f4f]\n- Updated dependencies [d7b2fb9]\n  - @clack/core@0.3.5\n\n## 0.8.1\n\n### Patch Changes\n\n- 360afeb: feat: adaptative max items\n\n## 0.8.0\n\n### Minor Changes\n\n- 9acccde: Add tasks function for executing tasks in spinners\n\n### Patch Changes\n\n- b5c6b9b: Feat multiselect maxItems option\n- 50ed94a: fix: clear `spinner` hooks on `spinner.stop`\n- Updated dependencies [a04e418]\n- Updated dependencies [4f6fcf5]\n  - @clack/core@0.3.4\n\n## 0.7.0\n\n### Minor Changes\n\n- b27a701: add maxItems option to select prompt\n- 89371be: added a new method called `spinner.message(msg: string)`\n\n### Patch Changes\n\n- 52183c4: Fix `spinner` conflict with terminal on error between `spinner.start()` and `spinner.stop()`\n- ab51d29: Fixes cases where the note title length was miscalculated due to ansi characters\n- Updated dependencies [cd79076]\n  - @clack/core@0.3.3\n\n## 0.6.3\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n- Updated dependencies [c96eda5]\n  - @clack/core@0.3.2\n\n## 0.6.2\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n- Updated dependencies [58a1df1]\n  - @clack/core@0.3.1\n\n## 0.6.1\n\n### Patch Changes\n\n- ca08fb6: Support complex value types for `select`, `multiselect` and `groupMultiselect`.\n\n## 0.6.0\n\n### Minor Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n- 165a1b3: Add `log` APIs. Supports `log.info`, `log.success`, `log.warn`, and `log.error`. For low-level control, `log.message` is also exposed.\n\n### Patch Changes\n\n- Updated dependencies [8a4a12f]\n- Updated dependencies [8a4a12f]\n  - @clack/core@0.3.0\n\n## 0.5.1\n\n### Patch Changes\n\n- cc11917: Update default `password` mask\n- Updated dependencies [ec812b6]\n  - @clack/core@0.2.1\n\n## 0.5.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n### Patch Changes\n\n- Updated dependencies [d74dd05]\n- Updated dependencies [54c1bc3]\n  - @clack/core@0.2.0\n\n## 0.4.5\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n- Updated dependencies [1251132]\n- Updated dependencies [8994382]\n  - @clack/core@0.1.9\n\n## 0.4.4\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n- Updated dependencies [d96071c]\n  - @clack/core@0.1.8\n\n## 0.4.3\n\n### Patch Changes\n\n- 83d890e: Fix text cancel display bug\n\n## 0.4.2\n\n### Patch Changes\n\n- Update README\n\n## 0.4.1\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n- Updated dependencies [7fb5375]\n  - @clack/core@0.1.6\n\n## 0.4.0\n\n### Minor Changes\n\n- 61b88b6: Add `group` construct to group many prompts together\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n- Updated dependencies [de1314e]\n  - @clack/core@0.1.5\n\n## 0.3.0\n\n### Minor Changes\n\n- 493c592: Improve types for select/multiselect prompts. Numbers and booleans are now supported as the `value` option.\n- 15558e3: Improved Windows/non-unicode support\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- Updated dependencies [ca77da1]\n- Updated dependencies [8aed606]\n  - @clack/core@0.1.4\n\n## 0.2.2\n\n### Patch Changes\n\n- 94b24d9: Fix CJS `ansi-regex` interop\n\n## 0.2.1\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n- Updated dependencies [a99c458]\n  - @clack/core@0.1.3\n\n## 0.2.0\n\n### Minor Changes\n\n- Improved type safety\n- b1341d6: Updated styles, new note component\n\n### Patch Changes\n\n- Updated dependencies [7dcad8f]\n- Updated dependencies [2242f13]\n- Updated dependencies [b1341d6]\n  - @clack/core@0.1.2\n\n## 0.1.1\n\n### Patch Changes\n\n- fa09bf5: Use circle for radio, square for checkbox\n- Updated dependencies [4be7dbf]\n- Updated dependencies [b480679]\n  - @clack/core@0.1.1\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n### Patch Changes\n\n- Updated dependencies [7015ec9]\n  - @clack/core@0.1.0\n\n## 0.0.10\n\n### Patch Changes\n\n- e0b49e5: Update spinner so it actually spins\n\n## 0.0.9\n\n### Patch Changes\n\n- Update README\n\n## 0.0.8\n\n### Patch Changes\n\n- Updated dependencies [9d371c3]\n  - @clack/core@0.0.12\n\n## 0.0.7\n\n### Patch Changes\n\n- Update README\n\n## 0.0.6\n\n### Patch Changes\n\n- d20ef2a: Update keywords, URLs\n- Updated dependencies [441d5b7]\n- Updated dependencies [d20ef2a]\n- Updated dependencies [fe13c2f]\n  - @clack/core@0.0.11\n\n## 0.0.5\n\n### Patch Changes\n\n- Update README\n\n## 0.0.4\n\n### Patch Changes\n\n- 80404ab: Update README\n\n## 0.0.3\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n- Updated dependencies [a0cb382]\n  - @clack/core@0.0.10\n\n## 0.0.2\n\n### Patch Changes\n\n- Updated dependencies\n  - @clack/core@0.0.9\n\n## 0.0.1\n\n### Patch Changes\n\n- a4b5e13: Initial release\n- Updated dependencies [a4b5e13]\n  - @clack/core@0.0.8\n","packages/prompts/tsconfig.json":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n","packages/core/package.json":"{\n  \"name\": \"@clack/core\",\n  \"version\": \"1.5.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/core\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/core#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"arktype\": \"^2.2.0\",\n    \"vitest\": \"^3.2.4\"\n  }\n}\n","packages/prompts/package.json":"{\n  \"name\": \"@clack/prompts\",\n  \"version\": \"1.8.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/prompts\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/prompts#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"@clack/core\": \"workspace:*\",\n    \"fast-string-width\": \"^3.0.2\",\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"is-unicode-supported\": \"^1.3.0\",\n    \"memfs\": \"^4.17.2\",\n    \"vitest\": \"^3.2.4\",\n    \"vitest-ansi-serializer\": \"^0.1.2\"\n  }\n}\n","packages/core/README.md":"# `@clack/core`\n\nClack contains low-level primitives for implementing your own command-line applications.\n\nCurrently, `TextPrompt`, `SelectPrompt`, and `ConfirmPrompt` are exposed as well as the base `Prompt` class.\n\nEach `Prompt` accepts a `render` function.\n\n```js\nimport { TextPrompt, isCancel } from '@clack/core';\n\nconst p = new TextPrompt({\n  render() {\n    return `What's your name?\\n${this.userInputWithCursor}`;\n  },\n});\n\nconst name = await p.prompt();\nif (isCancel(name)) {\n  process.exit(0);\n}\n```\n","packages/prompts/README.md":"# `@clack/prompts`\n\nEffortlessly build beautiful command-line apps 🪄 [Try the demo](https://stackblitz.com/edit/clack-prompts?file=index.js)\n\n![clack-prompt](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-demo.gif)\n\n---\n\n`@clack/prompts` is an opinionated, pre-styled wrapper around [`@clack/core`](https://www.npmjs.com/package/@clack/core).\n\n- 🤏 80% smaller than other options\n- 💎 Beautiful, minimal UI\n- ✅ Simple API\n- 🧱 Comes with `text`, `password`, `confirm`, `date`, `select`, `autocomplete`, `selectKey`, `multiselect`, `path`, and `spinner` components\n\n## Basics\n\n### Setup\n\nThe `intro` and `outro` functions will print a message to begin or end a prompt session, respectively.\n\n```js\nimport { intro, outro } from '@clack/prompts';\n\nintro(`create-my-app`);\n// Do stuff\noutro(`You're all set!`);\n```\n\n### Cancellation\n\nThe `isCancel` function is a guard that detects when a user cancels a question with `CTRL + C`. You should handle this situation for each prompt, optionally providing a nice cancellation message with the `cancel` utility.\n\n```js\nimport { isCancel, cancel, text } from '@clack/prompts';\n\nconst value = await text({\n  message: 'What is the meaning of life?',\n});\n\nif (isCancel(value)) {\n  cancel('Operation cancelled.');\n  process.exit(0);\n}\n```\n\n## Components\n\n### Text\n\nThe text component accepts a single line of text.\n\n```js\nimport { text } from '@clack/prompts';\n\nconst meaning = await text({\n  message: 'What is the meaning of life?',\n  placeholder: 'Not sure',\n  initialValue: '42',\n  validate(value) {\n    if (value.length === 0) return `Value is required!`;\n  },\n});\n```\n\n### Password\n\nThe password prompt behaves like the [`text`](#text) prompt, but masks the input as the user types.\n\n```js\nimport { password } from '@clack/prompts';\n\nconst secret = await password({\n  message: 'Set a password.',\n  mask: '*',\n  validate(value) {\n    if (!value || value.length < 8) return 'Password must be at least 8 characters.';\n  },\n});\n```\n\n### Confirm\n\nThe `confirm` prompt accepts a yes or no choice, returning a boolean value corresponding to the user's selection.\n\n```js\nimport { confirm } from '@clack/prompts';\n\nconst shouldContinue = await confirm({\n  message: 'Do you want to continue?',\n});\n```\n\n### Date\n\nThe `date` prompt provides an interactive date picker, allowing users to navigate between year, month, and day segments and increment/decrement values using keyboard controls.\n\n```js\nimport { date } from '@clack/prompts';\n\nconst birthday = await date({\n  message: 'Pick your birthday',\n  minDate: new Date('1900-01-01'),\n  initialValue: new Date(),\n  maxDate: new Date(),\n});\n```\n\n### Select\n\nThe select component allows a user to choose one value from a list of options. The result is the `value` prop of a given option.\n\n```js\nimport { select } from '@clack/prompts';\n\nconst projectType = await select({\n  message: 'Pick a project type.',\n  options: [\n    { value: 'ts', label: 'TypeScript' },\n    { value: 'js', label: 'JavaScript', disabled: true },\n    { value: 'coffee', label: 'CoffeeScript', hint: 'oh no' },\n  ],\n});\n```\n\n### Autocomplete\n\nThe `autocomplete` prompt combines text input with a searchable list of options. It's perfect for when you have a large list of options and want to help users find what they're looking for quickly.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Pick a framework.',\n  placeholder: 'Type to search...',\n  options: [\n    { value: 'next', label: 'Next.js' },\n    { value: 'nuxt', label: 'Nuxt' },\n    { value: 'sveltekit', label: 'SvelteKit' },\n    { value: 'remix', label: 'Remix' },\n  ],\n});\n```\n\n### Autocomplete Multi-Select\n\nThe `autocompleteMultiselect` prompt combines the search functionality of [autocomplete](#autocomplete) with the ability to select multiple options.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Search for a framework',\n  options: [\n    { value: 'next', label: 'Next.js', hint: 'React framework' },\n    { value: 'astro', label: 'Astro', hint: 'Content-focused' },\n    { value: 'svelte', label: 'SvelteKit', hint: 'Compile-time framework' },\n    { value: 'remix', label: 'Remix', hint: 'Full stack framework' },\n    { value: 'nuxt', label: 'Nuxt', hint: 'Vue framework' },\n  ],\n  placeholder: 'Type to search...',\n  maxItems: 5,\n});\n```\n\n### Select Key\n\nThe `selectKey` component lets a user choose an option by pressing its single-character string `value` key directly.\n\n```js\nimport { selectKey } from '@clack/prompts';\n\nconst action = await selectKey({\n  message: 'Pick an action.',\n  options: [\n    { value: 'd', label: 'Deploy' },\n    { value: 't', label: 'Run tests' },\n    { value: 'q', label: 'Quit' },\n  ],\n});\n```\n\n### Multi-Select\n\nThe `multiselect` component allows a user to choose many values from a list of options. The result is an array with all selected `value` props.\n\n```js\nimport { multiselect } from '@clack/prompts';\n\nconst additionalTools = await multiselect({\n  message: 'Select additional tools.',\n  options: [\n    { value: 'eslint', label: 'ESLint', hint: 'recommended' },\n    { value: 'prettier', label: 'Prettier', disabled: true },\n    { value: 'gh-action', label: 'GitHub Action' },\n  ],\n  required: false,\n});\n```\n\nIt is also possible to select multiple items arranged into hierarchy by using `groupMultiselect`:\n\n```js\nimport { groupMultiselect } from '@clack/prompts';\n\nconst basket = await groupMultiselect({\n  message: 'Select your favorite fruits and vegetables:',\n  options: {\n    fruits: [\n      { value: 'apple', label: 'apple' },\n      { value: 'banana', label: 'banana' },\n      { value: 'cherry', label: 'cherry' },\n    ],\n    vegetables: [\n      { value: 'carrot', label: 'carrot' },\n      { value: 'spinach', label: 'spinach' },\n      { value: 'potato', label: 'potato' },\n    ]\n  }\n});\n```\n\n### Multi-Line Text\n\nThe multi-line prompt accepts multiple lines of text input. By default, pressing `Enter` twice submits the input.\n\n```js\nimport { multiline } from '@clack/prompts';\n\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  placeholder: 'Start typing...',\n  validate(value) {\n    if (value.length === 0) return `value is required`;\n  },\n});\n```\n\nSet `showSubmit` to display an explicit submit button instead of double `Enter` submission:\n\n```js\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  showSubmit: true,\n});\n```\n\n### Path\n\nThe `path` prompt extends [`autocomplete`](#autocomplete) to provide file and directory suggestions.\n\n```js\nimport { path } from '@clack/prompts';\n\nconst targetDir = await path({\n  message: 'Select an existing directory.',\n  directory: true,\n});\n```\n\n### Spinner\n\nThe spinner component surfaces a pending action, such as a long-running download or dependency installation.\n\n```js\nimport { spinner } from '@clack/prompts';\n\nconst s = spinner();\ns.start('Installing via npm');\n// Do installation here\ns.stop('Installed via npm');\n```\n\n### Progress\n\nThe progress component extends the spinner component to add a progress bar to visualize the progression of an action.\n\n```js\nimport { progress } from '@clack/prompts';\n\nconst p = progress({ max: 10 });\np.start('Downloading archive');\n// Do download here\np.advance(3, 'Downloading (30%)');\n// ...\np.advance(5, 'Downloading (80%)');\n// ...\np.stop('Archive downloaded');\n```\n\n## Utilities\n\n### Grouping\n\nGrouping prompts together is a great way to keep your code organized. This accepts a JSON object with a name that can be used to reference the group later. The second argument is an optional but has a `onCancel` callback that will be called if the user cancels one of the prompts in the group.\n\n```js\nimport * as p from '@clack/prompts';\n\nconst group = await p.group(\n  {\n    name: () => p.text({ message: 'What is your name?' }),\n    age: () => p.text({ message: 'What is your age?' }),\n    color: ({ results }) =>\n      p.multiselect({\n        message: `What is your favorite color ${results.name}?`,\n        options: [\n          { value: 'red', label: 'Red' },\n          { value: 'green', label: 'Green' },\n          { value: 'blue', label: 'Blue' },\n        ],\n      }),\n  },\n  {\n    // On Cancel callback that wraps the group\n    // So if the user cancels one of the prompts in the group this function will be called\n    onCancel: ({ results }) => {\n      p.cancel('Operation cancelled.');\n      process.exit(0);\n    },\n  }\n);\n\nconsole.log(group.name, group.age, group.color);\n```\n\n### Tasks\n\nExecute multiple tasks in spinners.\n\n```js\nimport { tasks } from '@clack/prompts';\n\nawait tasks([\n  {\n    title: 'Installing via npm',\n    task: async (message) => {\n      // Do installation here\n      return 'Installed via npm';\n    },\n  },\n]);\n```\n\n### Logs\n\n```js\nimport { log } from '@clack/prompts';\n\nlog.info('Info!');\nlog.success('Success!');\nlog.step('Step!');\nlog.warn('Warn!');\nlog.error('Error!');\nlog.message('Hello, World', { symbol: color.cyan('~') });\n```\n\n\n### Stream\n\nWhen interacting with dynamic LLMs or other streaming message providers, use the `stream` APIs to log messages from an iterable, even an async one.\n\n```js\nimport { stream } from '@clack/prompts';\n\nstream.info((function *() { yield 'Info!'; })());\nstream.success((function *() { yield 'Success!'; })());\nstream.step((function *() { yield 'Step!'; })());\nstream.warn((function *() { yield 'Warn!'; })());\nstream.error((function *() { yield 'Error!'; })());\nstream.message((function *() { yield 'Hello'; yield \", World\" })(), { symbol: color.cyan('~') });\n```\n\n![clack-log-prompts](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-logs.png)\n\n### Task Log\n\nWhen executing a sub-process or a similar sub-task, `taskLog` can be used to render the output continuously and clear it at the end if it was successful.\n\n```js\nimport { taskLog } from '@clack/prompts';\n\nconst log = taskLog({\n\ttitle: 'Running npm install'\n});\n\nfor await (const line of npmInstall()) {\n\tlog.message(line);\n}\n\nif (success) {\n\tlog.success('Done!');\n} else {\n\tlog.error('Failed!');\n}\n```\n","packages/core/CHANGELOG.md":"# @clack/core\n\n## 1.5.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n## 1.5.0\n\n### Minor Changes\n\n- [#595](https://github.com/bombshell-dev/clack/pull/595) [`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add an `accessible` option to the shared `PromptOptions` and a resolved `accessible` getter on the base `Prompt`, so any prompt can opt into accessible mode individually. Resolution order: per-prompt option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable.\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n- [#593](https://github.com/bombshell-dev/clack/pull/593) [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `isAccessible()` and an `accessible` setting as the foundation for accessible mode. Resolution order: per-call option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable (any non-empty value enables it, except `0` and `false`).\n\n## 1.4.3\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n## 1.4.2\n\n### Patch Changes\n\n- [#561](https://github.com/bombshell-dev/clack/pull/561) [`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1) Thanks [@avallete](https://github.com/avallete)! - Fix `password` prompt resolving to `undefined` on empty submit. It now normalizes an empty submission to `\"\"`, matching the `text` prompt behavior and the documented `Promise<string | symbol>` return type.\n\n- [#569](https://github.com/bombshell-dev/clack/pull/569) [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb) Thanks [@43081j](https://github.com/43081j)! - fix: only submit multi-line prompt when double-return happens at end of input.\n\n  Also fixes two minor things:\n\n  - Initial value is used as initial user input for multi-line prompts\n  - Cursor is placed at the end when there is initial input\n\n## 1.4.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n## 1.4.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n## 1.3.1\n\n### Patch Changes\n\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n\n## 1.3.0\n\n### Minor Changes\n\n- 78fd3ae: Remove unused `debug` option key.\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 417b451: Only apply autocomplete default filter if it has been explicitly set or if options is not a getter.\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 2533180: Updates the documentation to mention `userInputWithCursor` when using the `TextPrompt` primitive.\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 2837845: Adds suggestion and path prompts\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 55645c2: Support wrapping autocomplete and select prompts.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n\n### Patch Changes\n\n- 0718b07: fix: export `*Options` types for prompts.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- a4f5034: Fixes an edge case for placeholder values. Previously, when pressing `enter` on an empty prompt, placeholder values would be ignored. Now, placeholder values are treated as the prompt value.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- a36292b: Fix \"TTY initialization failed: uv_tty_init returned EBADF (bad file descriptor)\" error happening on Windows for non-tty terminals.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- 4ba2d78: Support short terminal windows when re-rendering by accounting for off-screen lines\n- 34f52fe: Validates initial values immediately when using text prompts with initialValue and validate props.\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 4f6b3c2: Set initial values of auto complete prompt to first option when multiple is false.\n- 8ead5d3: Avoid passing initial values to core when using auto complete prompt\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 2310b43: Allow custom writables as output stream.\n- d98e033: add invert selection for multiselect prompt\n\n## 0.4.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- e5ba09a: Fixes a cursor display bug in terminals that do not support the \"hidden\" escape sequence. See [Issue #127](https://github.com/bombshell-dev/clack/issues/127).\n- 8cba8e3: Fixes a rendering bug with cursor positions for `TextPrompt`\n\n## 0.4.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/core\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- 51e12bc: Improves types for events and interaction states.\n\n## 0.3.5\n\n### Patch Changes\n\n- 4845f4f: Fixes a bug which kept the terminal cursor hidden after a prompt is cancelled\n- d7b2fb9: Adds missing `LICENSE` file. Since the `package.json` file has always included `\"license\": \"MIT\"`, please consider this a licensing clarification rather than a licensing change.\n\n## 0.3.4\n\n### Patch Changes\n\n- a04e418: fix(@clack/core): keyboard input not working after await in spinner\n- 4f6fcf5: feat(@clack/core): allow tab completion for placeholders\n\n## 0.3.3\n\n### Patch Changes\n\n- cd79076: fix: restore raw mode on unblock\n\n## 0.3.2\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n\n## 0.3.1\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n\n## 0.3.0\n\n### Minor Changes\n\n- 8a4a12f: Add `GroupMultiSelect` prompt\n\n### Patch Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n\n## 0.2.1\n\n### Patch Changes\n\n- ec812b6: fix `readline` hang on Windows\n\n## 0.2.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n## 0.1.9\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n\n## 0.1.8\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n## 0.1.7\n\n### Patch Changes\n\n- 6d9e675: Add support for neovim cursor motion (`hjkl`)\n\n  Thanks [@esau-morais](https://github.com/esau-morais) for the assist!\n\n## 0.1.6\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n\n## 0.1.5\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n\n## 0.1.4\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- 8aed606: Fix `MaxListenersExceededWarning` by detaching `stdin` listeners on close\n\n## 0.1.3\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n\n## 0.1.2\n\n### Patch Changes\n\n- Allow isCancel to type guard any unknown value\n- 7dcad8f: Allow placeholder to be passed to TextPrompt\n- 2242f13: Fix multiselect returning undefined\n- b1341d6: Improved placeholder handling\n\n## 0.1.1\n\n### Patch Changes\n\n- 4be7dbf: Ensure raw mode is unset on submit\n- b480679: Preserve value if validation fails\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n## 0.0.12\n\n### Patch Changes\n\n- 9d371c3: Fix rendering bug when using y/n to confirm\n\n## 0.0.11\n\n### Patch Changes\n\n- 441d5b7: fix select return undefined\n- d20ef2a: Update keywords, URLs\n- fe13c2f: fix cursor missing after submit\n\n## 0.0.10\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n\n## 0.0.9\n\n### Patch Changes\n\n- Fix node@16 issue (cannot read \"createInterface\" of undefined)\n\n## 0.0.8\n\n### Patch Changes\n\n- a4b5e13: Bug fixes, exposes `block` utility\n\n## 0.0.7\n\n### Patch Changes\n\n- Fix cursor bug\n\n## 0.0.6\n\n### Patch Changes\n\n- Fix error with character check\n\n## 0.0.5\n\n### Patch Changes\n\n- 491f9e0: update readme\n\n## 0.0.4\n\n### Patch Changes\n\n- 7372d5c: Fix bug with line deletion\n\n## 0.0.3\n\n### Patch Changes\n\n- 5605d28: Do not bundle dependencies (take II)\n\n## 0.0.2\n\n### Patch Changes\n\n- 2ee67cb: don't bundle deps\n\n## 0.0.1\n\n### Patch Changes\n\n- 306598e: Initial publish, still WIP\n","packages/core/tsconfig.json":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n"},"items":[{"name":"CHANGELOG.md","path":"packages/core/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/core/CHANGELOG.md","title":"Core Skill","category":"anthropic-skill","format":"markdown","content":"# @clack/core\n\n## 1.5.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n## 1.5.0\n\n### Minor Changes\n\n- [#595](https://github.com/bombshell-dev/clack/pull/595) [`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add an `accessible` option to the shared `PromptOptions` and a resolved `accessible` getter on the base `Prompt`, so any prompt can opt into accessible mode individually. Resolution order: per-prompt option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable.\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n- [#593](https://github.com/bombshell-dev/clack/pull/593) [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `isAccessible()` and an `accessible` setting as the foundation for accessible mode. Resolution order: per-call option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable (any non-empty value enables it, except `0` and `false`).\n\n## 1.4.3\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n## 1.4.2\n\n### Patch Changes\n\n- [#561](https://github.com/bombshell-dev/clack/pull/561) [`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1) Thanks [@avallete](https://github.com/avallete)! - Fix `password` prompt resolving to `undefined` on empty submit. It now normalizes an empty submission to `\"\"`, matching the `text` prompt behavior and the documented `Promise<string | symbol>` return type.\n\n- [#569](https://github.com/bombshell-dev/clack/pull/569) [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb) Thanks [@43081j](https://github.com/43081j)! - fix: only submit multi-line prompt when double-return happens at end of input.\n\n  Also fixes two minor things:\n\n  - Initial value is used as initial user input for multi-line prompts\n  - Cursor is placed at the end when there is initial input\n\n## 1.4.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n## 1.4.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n## 1.3.1\n\n### Patch Changes\n\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n\n## 1.3.0\n\n### Minor Changes\n\n- 78fd3ae: Remove unused `debug` option key.\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 417b451: Only apply autocomplete default filter if it has been explicitly set or if options is not a getter.\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 2533180: Updates the documentation to mention `userInputWithCursor` when using the `TextPrompt` primitive.\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 2837845: Adds suggestion and path prompts\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 55645c2: Support wrapping autocomplete and select prompts.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n\n### Patch Changes\n\n- 0718b07: fix: export `*Options` types for prompts.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- a4f5034: Fixes an edge case for placeholder values. Previously, when pressing `enter` on an empty prompt, placeholder values would be ignored. Now, placeholder values are treated as the prompt value.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- a36292b: Fix \"TTY initialization failed: uv_tty_init returned EBADF (bad file descriptor)\" error happening on Windows for non-tty terminals.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- 4ba2d78: Support short terminal windows when re-rendering by accounting for off-screen lines\n- 34f52fe: Validates initial values immediately when using text prompts with initialValue and validate props.\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 4f6b3c2: Set initial values of auto complete prompt to first option when multiple is false.\n- 8ead5d3: Avoid passing initial values to core when using auto complete prompt\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 2310b43: Allow custom writables as output stream.\n- d98e033: add invert selection for multiselect prompt\n\n## 0.4.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- e5ba09a: Fixes a cursor display bug in terminals that do not support the \"hidden\" escape sequence. See [Issue #127](https://github.com/bombshell-dev/clack/issues/127).\n- 8cba8e3: Fixes a rendering bug with cursor positions for `TextPrompt`\n\n## 0.4.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/core\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- 51e12bc: Improves types for events and interaction states.\n\n## 0.3.5\n\n### Patch Changes\n\n- 4845f4f: Fixes a bug which kept the terminal cursor hidden after a prompt is cancelled\n- d7b2fb9: Adds missing `LICENSE` file. Since the `package.json` file has always included `\"license\": \"MIT\"`, please consider this a licensing clarification rather than a licensing change.\n\n## 0.3.4\n\n### Patch Changes\n\n- a04e418: fix(@clack/core): keyboard input not working after await in spinner\n- 4f6fcf5: feat(@clack/core): allow tab completion for placeholders\n\n## 0.3.3\n\n### Patch Changes\n\n- cd79076: fix: restore raw mode on unblock\n\n## 0.3.2\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n\n## 0.3.1\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n\n## 0.3.0\n\n### Minor Changes\n\n- 8a4a12f: Add `GroupMultiSelect` prompt\n\n### Patch Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n\n## 0.2.1\n\n### Patch Changes\n\n- ec812b6: fix `readline` hang on Windows\n\n## 0.2.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n## 0.1.9\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n\n## 0.1.8\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n## 0.1.7\n\n### Patch Changes\n\n- 6d9e675: Add support for neovim cursor motion (`hjkl`)\n\n  Thanks [@esau-morais](https://github.com/esau-morais) for the assist!\n\n## 0.1.6\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n\n## 0.1.5\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n\n## 0.1.4\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- 8aed606: Fix `MaxListenersExceededWarning` by detaching `stdin` listeners on close\n\n## 0.1.3\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n\n## 0.1.2\n\n### Patch Changes\n\n- Allow isCancel to type guard any unknown value\n- 7dcad8f: Allow placeholder to be passed to TextPrompt\n- 2242f13: Fix multiselect returning undefined\n- b1341d6: Improved placeholder handling\n\n## 0.1.1\n\n### Patch Changes\n\n- 4be7dbf: Ensure raw mode is unset on submit\n- b480679: Preserve value if validation fails\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n## 0.0.12\n\n### Patch Changes\n\n- 9d371c3: Fix rendering bug when using y/n to confirm\n\n## 0.0.11\n\n### Patch Changes\n\n- 441d5b7: fix select return undefined\n- d20ef2a: Update keywords, URLs\n- fe13c2f: fix cursor missing after submit\n\n## 0.0.10\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n\n## 0.0.9\n\n### Patch Changes\n\n- Fix node@16 issue (cannot read \"createInterface\" of undefined)\n\n## 0.0.8\n\n### Patch Changes\n\n- a4b5e13: Bug fixes, exposes `block` utility\n\n## 0.0.7\n\n### Patch Changes\n\n- Fix cursor bug\n\n## 0.0.6\n\n### Patch Changes\n\n- Fix error with character check\n\n## 0.0.5\n\n### Patch Changes\n\n- 491f9e0: update readme\n\n## 0.0.4\n\n### Patch Changes\n\n- 7372d5c: Fix bug with line deletion\n\n## 0.0.3\n\n### Patch Changes\n\n- 5605d28: Do not bundle dependencies (take II)\n\n## 0.0.2\n\n### Patch Changes\n\n- 2ee67cb: don't bundle deps\n\n## 0.0.1\n\n### Patch Changes\n\n- 306598e: Initial publish, still WIP\n","isInternal":false,"tokens":4321,"sizeBytes":15126},{"name":"package.json","path":"packages/core/package.json","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/core/package.json","title":"@clack/core","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@clack/core\",\n  \"version\": \"1.5.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/core\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/core#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"arktype\": \"^2.2.0\",\n    \"vitest\": \"^3.2.4\"\n  }\n}\n","frontmatter":{"name":"@clack/core","version":"1.5.1","type":"module","main":"./dist/index.mjs","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"types":"./dist/index.d.mts","repository":{"type":"git","url":"git+https://github.com/bombshell-dev/clack.git","directory":"packages/core"},"bugs":{"url":"https://github.com/bombshell-dev/clack/issues"},"homepage":"https://github.com/bombshell-dev/clack/tree/main/packages/core#readme","files":["dist"],"keywords":["ask","clack","cli","command-line","command","input","interact","interface","menu","prompt","prompts","stdin","ui"],"author":{"name":"Nate Moore","email":"nate@natemoo.re","url":"https://twitter.com/n_moore"},"license":"MIT","packageManager":"pnpm@10.33.0","engines":{"node":">= 20.12.0"},"scripts":{"build":"unbuild","prepack":"pnpm build","test":"vitest run"},"dependencies":{"fast-wrap-ansi":"^0.2.0","sisteransi":"^2.0.0"},"devDependencies":{"arktype":"^2.2.0","vitest":"^3.2.4"}},"isInternal":false,"tokens":450,"sizeBytes":1320},{"name":"tsconfig.json","path":"packages/core/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/core/tsconfig.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n","frontmatter":{"extends":"../../tsconfig.json","include":["src","test"]},"isInternal":false,"tokens":21,"sizeBytes":69},{"name":"CHANGELOG.md","path":"packages/prompts/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/prompts/CHANGELOG.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# @clack/prompts\n\n## 1.8.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n- Updated dependencies [[`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395)]:\n  - @clack/core@1.5.1\n\n## 1.8.0\n\n### Minor Changes\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n### Patch Changes\n\n- [#588](https://github.com/bombshell-dev/clack/pull/588) [`6506135`](https://github.com/bombshell-dev/clack/commit/65061353e65e468035d8d8c7de9359926774626d) Thanks [@danielroe](https://github.com/danielroe)! - Style the guide bar rendered by `box({ withGuide: true })` in grey so it matches the gutter drawn by `log`, `note` and the spinner\n\n- [#599](https://github.com/bombshell-dev/clack/pull/599) [`0547d6f`](https://github.com/bombshell-dev/clack/commit/0547d6f4c16c4580b06c592e698b9ceb621f2547) Thanks [@43081j](https://github.com/43081j)! - Fixes a withGuide rendering issue leaving extra spaces in text prompts.\n\n- Updated dependencies [[`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b), [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc), [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b), [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8), [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a)]:\n  - @clack/core@1.5.0\n\n## 1.7.0\n\n### Minor Changes\n\n- [#574](https://github.com/bombshell-dev/clack/pull/574) [`8f1c380`](https://github.com/bombshell-dev/clack/commit/8f1c380683cfb5fb7a094610342046ae1603e28e) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `showInstructions` option to `select`, `multiselect`, and `groupMultiselect`. Keyboard hints remain shown by default; pass `showInstructions: false` to hide them.\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n- Updated dependencies [[`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06)]:\n  - @clack/core@1.4.3\n\n## 1.6.0\n\n### Minor Changes\n\n- [#568](https://github.com/bombshell-dev/clack/pull/568) [`f87933f`](https://github.com/bombshell-dev/clack/commit/f87933fb7b3f4c401b9e51a152b95cb8e7200fe5) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Updates default formatter of `note()` to note dim lines anymore\n\n  If you want the old behavior, provide a `format()` function:\n\n  ```diff\n  import { note } from '@clack/prompts';\n  +import { styleText } from 'node:util';\n\n  note(\n    'You can edit the file src/index.jsx',\n    'Next steps.'\n  +  { format: (text) => styleText('dim', text) }\n  );\n  ```\n\n- [#567](https://github.com/bombshell-dev/clack/pull/567) [`cc6aab5`](https://github.com/bombshell-dev/clack/commit/cc6aab50186cff8a02dc98e9cfd3897c29a33b15) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add keyboard instruction footers to `select`, `multiselect`, and `groupMultiselect` in the active state, matching autocomplete. No option — always shown.\n\n### Patch Changes\n\n- Updated dependencies [[`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1), [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb)]:\n  - @clack/core@1.4.2\n\n## 1.5.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n- [#546](https://github.com/bombshell-dev/clack/pull/546) [`56e9d67`](https://github.com/bombshell-dev/clack/commit/56e9d6707715bc858d9c2dbc444230b02813e809) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `date`, `limit-options`, and `messages`\n\n- Updated dependencies [[`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb)]:\n  - @clack/core@1.4.1\n\n## 1.5.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#542](https://github.com/bombshell-dev/clack/pull/542) [`adb6af9`](https://github.com/bombshell-dev/clack/commit/adb6af9f5fb39408934323a7415beb46b63ecd9a) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `box`, `group`, and `group-multi-select`\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n- [#540](https://github.com/bombshell-dev/clack/pull/540) [`3170ed9`](https://github.com/bombshell-dev/clack/commit/3170ed94dc2a6ed7973228d46c664fb7461969ad) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `autocomplete`, `confirm`, and `path` prompts\n\n- Updated dependencies [[`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6), [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364)]:\n  - @clack/core@1.4.0\n\n## 1.4.0\n\n### Minor Changes\n\n- 284677e: Support scrolling and `maxItems` option for `groupMultiselect`, and removes indent when `withGuide` is set to `false`\n\n### Patch Changes\n\n- aab46a2: docs: add jsdoc for `text`, `password`, and `multiline` prompts\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n- Updated dependencies [54be8d7]\n  - @clack/core@1.3.1\n\n## 1.3.0\n\n### Minor Changes\n\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n### Patch Changes\n\n- 5b897a7: Fix mixed type-only and runtime exports from @clack/core.\n- Updated dependencies [78fd3ae]\n- Updated dependencies [ea5702e]\n- Updated dependencies [814ab9a]\n  - @clack/core@1.3.0\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- 134a1a1: Fix the `path` prompt so `directory: true` correctly enforces directory-only selection while still allowing directory navigation, and add regression tests for both directory and default file selection behavior.\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 336495a: Apply guide to wrapped multi-line messages in confirm prompt.\n- 9fe8de6: Respect `withGuide: false` in autocomplete and multiselect prompts.\n- 29a50cb: Fix `path` directory mode so pressing Enter with an existing directory `initialValue` submits that current directory instead of the first child option, and add regression coverage for immediate submit and child-directory navigation.\n- Updated dependencies [9786226]\n- Updated dependencies [bdf89a5]\n- Updated dependencies [417b451]\n- Updated dependencies [090902c]\n  - @clack/core@1.2.0\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n### Patch Changes\n\n- c3666e2: destruct `limitOption` param for better code readability, tweak types definitions\n- ba3df8e: Fixes withGuide support in intro, outro, and cancel messages.\n- Updated dependencies [e3333fb]\n  - @clack/core@1.1.0\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 86e36d8: Adds `withGuide` support to select prompt.\n- c697439: Fixes line wrapping behavior in autocomplete.\n- 0ded19c: Simplifies `withGuide` option checks.\n- 0e4ddc9: Fixes `withGuide` support in password and path prompts.\n- 76550d6: Adds `withGuide` support to selectKey prompt.\n- f9b9953: Adds `withGuide` support to password prompt.\n- 0e93ccb: Adds `vertical` arrangement option to `confirm` prompt.\n- 4e9ae13: Adds `withGuide` support to confirm prompt.\n- 0256238: Adds `withGuide` support to spinner prompt.\n- Updated dependencies [6404dc1]\n- Updated dependencies [2533180]\n  - @clack/core@1.0.1\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 415410b: This adds a custom filter function to autocompleteMultiselect. It could be used, for example, to support fuzzy searching logic.\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 8409f2c: feat: add styleFrame option for spinner\n- 2837845: Adds suggestion and path prompts\n- 99c3530: Adds `format` option to the note prompt to allow formatting of individual lines\n- 0aaee4c: Added new `taskLog` prompt for log output which is cleared on success\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 44df9af: Adds a new `groupSpacing` option to grouped multi-select prompts. If set to an integer greater than 0, it will add that number of new lines between each group.\n- 55645c2: Support wrapping autocomplete and select prompts.\n- 9e5bc6c: Add support for signals in prompts, allowing them to be aborted.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- 38019c7: Updates the API for stopping spinners and progress bars to be clearer\n\n  Previously, both the spinner and progress bar components used a single `stop` method that accepted a code to indicate success, cancellation, or error. This update separates these into distinct methods: `stop()`, `cancel()`, and `error()`:\n\n  ```diff\n  const spinner = prompts.spinner();\n  spinner.start();\n\n  // Cancelling a spinner\n  - spinner.stop(undefined, 1);\n  + spinner.cancel();\n\n  // Stopping with an error\n  - spinner.stop(undefined, 2);\n  + spinner.error();\n  ```\n\n  As before, you can pass a message to each method to customize the output displayed:\n\n  ```js\n  spinner.cancel(\"Operation cancelled by user\");\n  progressBar.error(\"An error occurred during processing\");\n  ```\n\n- c45b9fb: Adds support for detecting spinner cancellation via CTRL+C. This allows for graceful handling of user interruptions during long-running operations.\n- f10071e: Using the `group` method, task logs can now have groups which themselves can have scrolling windows of logs.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 76fd17f: Added new `box` prompt for rendering boxed text, similar a note.\n- 9a09318: Adds new `progress` prompt to display a progess-bar\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n- 9bd8072: Add a `required` option to autocomplete multiselect.\n- 19558b9: Added support for custom frames in spinner prompt\n\n### Patch Changes\n\n- 46dc0a4: Fixes multiselect only shows hints on the first item in the options list. Now correctly shows hints for all selected options with hint property.\n- aea4573: Clamp scrolling windows to 5 rows.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 55eb280: Fix placeholder rendering when using autocomplete.\n- 4d1d83b: Fixes rendering of multi-line messages and options in select prompt.\n- 6176ced: Add withGuide support to note prompt\n- 7b009df: Fix spinner clearing too many lines upwards when non-wrapping.\n- 43aed55: Change styling of disabled multi-select options to have strikethrough.\n- 17342d2: Exposes a new `SpinnerResult` type to describe the return type of `spinner`\n- 282b39e: Wrap spinner output to allow for multi-line/wrapped messages.\n- 2feaebb: Fix duplicated logs when scrolling through options with multiline messages by calculating `rowPadding` dynamically based on actual rendered lines instead of using a hardcoded value.\n- 69681ea: Strip destructive ANSI codes from task log messages.\n- b0fa7d8: Add support for wrapped messages in multi line prompts\n- 9999adf: fix note component overflow bug\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- 2839c66: fix(note): hard wrap text to column limit\n- 7a556ad: Updates all prompts to accept a custom `output` and `input` stream\n- 17d3650: Use a default import for picocolors to avoid run time errors in some environments.\n- 7cc8a55: Messages passed to the `stop` method of a spinner no longer have dots stripped.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- f952592: Fixes missing guide when rendering empty log lines.\n- 372b526: Add `clear` method to spinner for stopping and clearing.\n- d25f6d0: fix(note, box): handle CJK correctly\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 7530af0: Fixes wrapping of cancelled and success messages of select prompt\n- 4c89dd7: chore: use more accurate type to replace any in group select\n- 0b852e1: Handle `stop` calls on spinners which have not yet been started.\n- 42adff8: fix: add missing guide line in autocomplete-multiselect\n- 8e2e30a: fix: fix autocomplete bar color when validate\n- 2048eb1: Fix spinner's dots behavior with custom frames\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 9b92161: Show symbol when withGuide is true for log messages\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 09e596c: refactor(progress): remove unnecessary return statement in start function\n- 2310b43: Allow custom writables as output stream.\n- ae84dd0: Update key binding text to show tab/space when navigating, and tab otherwise.\n- Updated dependency on `@clack/core` to `1.0.0`\n\n## 0.10.0\n\n### Minor Changes\n\n- 613179d: Adds a new `indicator` option to `spinner`, which supports the original `\"dots\"` loading animation or a new `\"timer\"` loading animation.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  const spin = p.spinner({ indicator: \"timer\" });\n  spin.start(\"Loading\");\n  await sleep(3000);\n  spin.stop(\"Loaded\");\n  ```\n\n- a38b2bc: Adds `stream` API which provides the same methods as `log`, but for iterable (even async) message streams. This is particularly useful for AI responses which are dynamically generated by LLMs.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  await p.stream.step(\n    (async function* () {\n      yield* generateLLMResponse(question);\n    })()\n  );\n  ```\n\n## 0.9.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- 98925e3: Exports the `Option` type and improves JSDocannotations\n- 1904e57: Replace custom utility for stripping ANSI control sequences with Node's built-in [`stripVTControlCharacters`](https://nodejs.org/docs/latest/api/util.html#utilstripvtcontrolcharactersstr) utility.\n- Updated dependencies [8093f3c]\n- Updated dependencies [e5ba09a]\n- Updated dependencies [8cba8e3]\n  - @clack/core@0.4.1\n\n## 0.9.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/prompts\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n  One example use case is automatically cancelling a prompt after a timeout.\n\n  ```ts\n  const shouldContinue = await confirm({\n    message: \"This message will self destruct in 5 seconds\",\n    signal: AbortSignal.timeout(5000),\n  });\n  ```\n\n  Another use case is racing a long running task with a manual prompt.\n\n  ```ts\n  const abortController = new AbortController();\n\n  const projectType = await Promise.race([\n    detectProjectType({\n      signal: abortController.signal,\n    }),\n    select({\n      message: \"Pick a project type.\",\n      options: [\n        { value: \"ts\", label: \"TypeScript\" },\n        { value: \"js\", label: \"JavaScript\" },\n        { value: \"coffee\", label: \"CoffeeScript\", hint: \"oh no\" },\n      ],\n      signal: abortController.signal,\n    }),\n  ]);\n\n  abortController.abort();\n  ```\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- f9f139d: Adapts `spinner` output for static CI environments\n- Updated dependencies [a83d2f8]\n- Updated dependencies [801246b]\n- Updated dependencies [a83d2f8]\n- Updated dependencies [51e12bc]\n  - @clack/core@0.4.0\n\n## 0.8.2\n\n### Patch Changes\n\n- Updated dependencies [4845f4f]\n- Updated dependencies [d7b2fb9]\n  - @clack/core@0.3.5\n\n## 0.8.1\n\n### Patch Changes\n\n- 360afeb: feat: adaptative max items\n\n## 0.8.0\n\n### Minor Changes\n\n- 9acccde: Add tasks function for executing tasks in spinners\n\n### Patch Changes\n\n- b5c6b9b: Feat multiselect maxItems option\n- 50ed94a: fix: clear `spinner` hooks on `spinner.stop`\n- Updated dependencies [a04e418]\n- Updated dependencies [4f6fcf5]\n  - @clack/core@0.3.4\n\n## 0.7.0\n\n### Minor Changes\n\n- b27a701: add maxItems option to select prompt\n- 89371be: added a new method called `spinner.message(msg: string)`\n\n### Patch Changes\n\n- 52183c4: Fix `spinner` conflict with terminal on error between `spinner.start()` and `spinner.stop()`\n- ab51d29: Fixes cases where the note title length was miscalculated due to ansi characters\n- Updated dependencies [cd79076]\n  - @clack/core@0.3.3\n\n## 0.6.3\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n- Updated dependencies [c96eda5]\n  - @clack/core@0.3.2\n\n## 0.6.2\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n- Updated dependencies [58a1df1]\n  - @clack/core@0.3.1\n\n## 0.6.1\n\n### Patch Changes\n\n- ca08fb6: Support complex value types for `select`, `multiselect` and `groupMultiselect`.\n\n## 0.6.0\n\n### Minor Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n- 165a1b3: Add `log` APIs. Supports `log.info`, `log.success`, `log.warn`, and `log.error`. For low-level control, `log.message` is also exposed.\n\n### Patch Changes\n\n- Updated dependencies [8a4a12f]\n- Updated dependencies [8a4a12f]\n  - @clack/core@0.3.0\n\n## 0.5.1\n\n### Patch Changes\n\n- cc11917: Update default `password` mask\n- Updated dependencies [ec812b6]\n  - @clack/core@0.2.1\n\n## 0.5.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n### Patch Changes\n\n- Updated dependencies [d74dd05]\n- Updated dependencies [54c1bc3]\n  - @clack/core@0.2.0\n\n## 0.4.5\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n- Updated dependencies [1251132]\n- Updated dependencies [8994382]\n  - @clack/core@0.1.9\n\n## 0.4.4\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n- Updated dependencies [d96071c]\n  - @clack/core@0.1.8\n\n## 0.4.3\n\n### Patch Changes\n\n- 83d890e: Fix text cancel display bug\n\n## 0.4.2\n\n### Patch Changes\n\n- Update README\n\n## 0.4.1\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n- Updated dependencies [7fb5375]\n  - @clack/core@0.1.6\n\n## 0.4.0\n\n### Minor Changes\n\n- 61b88b6: Add `group` construct to group many prompts together\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n- Updated dependencies [de1314e]\n  - @clack/core@0.1.5\n\n## 0.3.0\n\n### Minor Changes\n\n- 493c592: Improve types for select/multiselect prompts. Numbers and booleans are now supported as the `value` option.\n- 15558e3: Improved Windows/non-unicode support\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- Updated dependencies [ca77da1]\n- Updated dependencies [8aed606]\n  - @clack/core@0.1.4\n\n## 0.2.2\n\n### Patch Changes\n\n- 94b24d9: Fix CJS `ansi-regex` interop\n\n## 0.2.1\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n- Updated dependencies [a99c458]\n  - @clack/core@0.1.3\n\n## 0.2.0\n\n### Minor Changes\n\n- Improved type safety\n- b1341d6: Updated styles, new note component\n\n### Patch Changes\n\n- Updated dependencies [7dcad8f]\n- Updated dependencies [2242f13]\n- Updated dependencies [b1341d6]\n  - @clack/core@0.1.2\n\n## 0.1.1\n\n### Patch Changes\n\n- fa09bf5: Use circle for radio, square for checkbox\n- Updated dependencies [4be7dbf]\n- Updated dependencies [b480679]\n  - @clack/core@0.1.1\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n### Patch Changes\n\n- Updated dependencies [7015ec9]\n  - @clack/core@0.1.0\n\n## 0.0.10\n\n### Patch Changes\n\n- e0b49e5: Update spinner so it actually spins\n\n## 0.0.9\n\n### Patch Changes\n\n- Update README\n\n## 0.0.8\n\n### Patch Changes\n\n- Updated dependencies [9d371c3]\n  - @clack/core@0.0.12\n\n## 0.0.7\n\n### Patch Changes\n\n- Update README\n\n## 0.0.6\n\n### Patch Changes\n\n- d20ef2a: Update keywords, URLs\n- Updated dependencies [441d5b7]\n- Updated dependencies [d20ef2a]\n- Updated dependencies [fe13c2f]\n  - @clack/core@0.0.11\n\n## 0.0.5\n\n### Patch Changes\n\n- Update README\n\n## 0.0.4\n\n### Patch Changes\n\n- 80404ab: Update README\n\n## 0.0.3\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n- Updated dependencies [a0cb382]\n  - @clack/core@0.0.10\n\n## 0.0.2\n\n### Patch Changes\n\n- Updated dependencies\n  - @clack/core@0.0.9\n\n## 0.0.1\n\n### Patch Changes\n\n- a4b5e13: Initial release\n- Updated dependencies [a4b5e13]\n  - @clack/core@0.0.8\n","isInternal":false,"tokens":7789,"sizeBytes":26286},{"name":"package.json","path":"packages/prompts/package.json","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/prompts/package.json","title":"@clack/prompts","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@clack/prompts\",\n  \"version\": \"1.8.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/prompts\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/prompts#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"@clack/core\": \"workspace:*\",\n    \"fast-string-width\": \"^3.0.2\",\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"is-unicode-supported\": \"^1.3.0\",\n    \"memfs\": \"^4.17.2\",\n    \"vitest\": \"^3.2.4\",\n    \"vitest-ansi-serializer\": \"^0.1.2\"\n  }\n}\n","frontmatter":{"name":"@clack/prompts","version":"1.8.1","type":"module","main":"./dist/index.mjs","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./package.json":"./package.json"},"types":"./dist/index.d.mts","repository":{"type":"git","url":"git+https://github.com/bombshell-dev/clack.git","directory":"packages/prompts"},"bugs":{"url":"https://github.com/bombshell-dev/clack/issues"},"homepage":"https://github.com/bombshell-dev/clack/tree/main/packages/prompts#readme","files":["dist"],"author":{"name":"Nate Moore","email":"nate@natemoo.re","url":"https://twitter.com/n_moore"},"license":"MIT","keywords":["ask","clack","cli","command-line","command","input","interact","interface","menu","prompt","prompts","stdin","ui"],"packageManager":"pnpm@10.33.0","engines":{"node":">= 20.12.0"},"scripts":{"build":"unbuild","prepack":"pnpm build","test":"vitest run"},"dependencies":{"@clack/core":"workspace:*","fast-string-width":"^3.0.2","fast-wrap-ansi":"^0.2.0","sisteransi":"^2.0.0"},"devDependencies":{"is-unicode-supported":"^1.3.0","memfs":"^4.17.2","vitest":"^3.2.4","vitest-ansi-serializer":"^0.1.2"}},"isInternal":false,"tokens":506,"sizeBytes":1475},{"name":"tsconfig.json","path":"packages/prompts/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/prompts/tsconfig.json","title":"Prompts Skill","category":"anthropic-skill","format":"json","content":"{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n","frontmatter":{"extends":"../../tsconfig.json","include":["src","test"]},"isInternal":false,"tokens":21,"sizeBytes":69},{"name":"README.md","path":"packages/core/README.md","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# `@clack/core`\n\nClack contains low-level primitives for implementing your own command-line applications.\n\nCurrently, `TextPrompt`, `SelectPrompt`, and `ConfirmPrompt` are exposed as well as the base `Prompt` class.\n\nEach `Prompt` accepts a `render` function.\n\n```js\nimport { TextPrompt, isCancel } from '@clack/core';\n\nconst p = new TextPrompt({\n  render() {\n    return `What's your name?\\n${this.userInputWithCursor}`;\n  },\n});\n\nconst name = await p.prompt();\nif (isCancel(name)) {\n  process.exit(0);\n}\n```\n","isInternal":false,"tokens":129,"sizeBytes":509},{"name":"README.md","path":"packages/prompts/README.md","rawUrl":"https://raw.githubusercontent.com/bombshell-dev/clack/HEAD/packages/prompts/README.md","title":"prompts Documentation","category":"plugin-manifest","format":"markdown","content":"# `@clack/prompts`\n\nEffortlessly build beautiful command-line apps 🪄 [Try the demo](https://stackblitz.com/edit/clack-prompts?file=index.js)\n\n![clack-prompt](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-demo.gif)\n\n---\n\n`@clack/prompts` is an opinionated, pre-styled wrapper around [`@clack/core`](https://www.npmjs.com/package/@clack/core).\n\n- 🤏 80% smaller than other options\n- 💎 Beautiful, minimal UI\n- ✅ Simple API\n- 🧱 Comes with `text`, `password`, `confirm`, `date`, `select`, `autocomplete`, `selectKey`, `multiselect`, `path`, and `spinner` components\n\n## Basics\n\n### Setup\n\nThe `intro` and `outro` functions will print a message to begin or end a prompt session, respectively.\n\n```js\nimport { intro, outro } from '@clack/prompts';\n\nintro(`create-my-app`);\n// Do stuff\noutro(`You're all set!`);\n```\n\n### Cancellation\n\nThe `isCancel` function is a guard that detects when a user cancels a question with `CTRL + C`. You should handle this situation for each prompt, optionally providing a nice cancellation message with the `cancel` utility.\n\n```js\nimport { isCancel, cancel, text } from '@clack/prompts';\n\nconst value = await text({\n  message: 'What is the meaning of life?',\n});\n\nif (isCancel(value)) {\n  cancel('Operation cancelled.');\n  process.exit(0);\n}\n```\n\n## Components\n\n### Text\n\nThe text component accepts a single line of text.\n\n```js\nimport { text } from '@clack/prompts';\n\nconst meaning = await text({\n  message: 'What is the meaning of life?',\n  placeholder: 'Not sure',\n  initialValue: '42',\n  validate(value) {\n    if (value.length === 0) return `Value is required!`;\n  },\n});\n```\n\n### Password\n\nThe password prompt behaves like the [`text`](#text) prompt, but masks the input as the user types.\n\n```js\nimport { password } from '@clack/prompts';\n\nconst secret = await password({\n  message: 'Set a password.',\n  mask: '*',\n  validate(value) {\n    if (!value || value.length < 8) return 'Password must be at least 8 characters.';\n  },\n});\n```\n\n### Confirm\n\nThe `confirm` prompt accepts a yes or no choice, returning a boolean value corresponding to the user's selection.\n\n```js\nimport { confirm } from '@clack/prompts';\n\nconst shouldContinue = await confirm({\n  message: 'Do you want to continue?',\n});\n```\n\n### Date\n\nThe `date` prompt provides an interactive date picker, allowing users to navigate between year, month, and day segments and increment/decrement values using keyboard controls.\n\n```js\nimport { date } from '@clack/prompts';\n\nconst birthday = await date({\n  message: 'Pick your birthday',\n  minDate: new Date('1900-01-01'),\n  initialValue: new Date(),\n  maxDate: new Date(),\n});\n```\n\n### Select\n\nThe select component allows a user to choose one value from a list of options. The result is the `value` prop of a given option.\n\n```js\nimport { select } from '@clack/prompts';\n\nconst projectType = await select({\n  message: 'Pick a project type.',\n  options: [\n    { value: 'ts', label: 'TypeScript' },\n    { value: 'js', label: 'JavaScript', disabled: true },\n    { value: 'coffee', label: 'CoffeeScript', hint: 'oh no' },\n  ],\n});\n```\n\n### Autocomplete\n\nThe `autocomplete` prompt combines text input with a searchable list of options. It's perfect for when you have a large list of options and want to help users find what they're looking for quickly.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Pick a framework.',\n  placeholder: 'Type to search...',\n  options: [\n    { value: 'next', label: 'Next.js' },\n    { value: 'nuxt', label: 'Nuxt' },\n    { value: 'sveltekit', label: 'SvelteKit' },\n    { value: 'remix', label: 'Remix' },\n  ],\n});\n```\n\n### Autocomplete Multi-Select\n\nThe `autocompleteMultiselect` prompt combines the search functionality of [autocomplete](#autocomplete) with the ability to select multiple options.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Search for a framework',\n  options: [\n    { value: 'next', label: 'Next.js', hint: 'React framework' },\n    { value: 'astro', label: 'Astro', hint: 'Content-focused' },\n    { value: 'svelte', label: 'SvelteKit', hint: 'Compile-time framework' },\n    { value: 'remix', label: 'Remix', hint: 'Full stack framework' },\n    { value: 'nuxt', label: 'Nuxt', hint: 'Vue framework' },\n  ],\n  placeholder: 'Type to search...',\n  maxItems: 5,\n});\n```\n\n### Select Key\n\nThe `selectKey` component lets a user choose an option by pressing its single-character string `value` key directly.\n\n```js\nimport { selectKey } from '@clack/prompts';\n\nconst action = await selectKey({\n  message: 'Pick an action.',\n  options: [\n    { value: 'd', label: 'Deploy' },\n    { value: 't', label: 'Run tests' },\n    { value: 'q', label: 'Quit' },\n  ],\n});\n```\n\n### Multi-Select\n\nThe `multiselect` component allows a user to choose many values from a list of options. The result is an array with all selected `value` props.\n\n```js\nimport { multiselect } from '@clack/prompts';\n\nconst additionalTools = await multiselect({\n  message: 'Select additional tools.',\n  options: [\n    { value: 'eslint', label: 'ESLint', hint: 'recommended' },\n    { value: 'prettier', label: 'Prettier', disabled: true },\n    { value: 'gh-action', label: 'GitHub Action' },\n  ],\n  required: false,\n});\n```\n\nIt is also possible to select multiple items arranged into hierarchy by using `groupMultiselect`:\n\n```js\nimport { groupMultiselect } from '@clack/prompts';\n\nconst basket = await groupMultiselect({\n  message: 'Select your favorite fruits and vegetables:',\n  options: {\n    fruits: [\n      { value: 'apple', label: 'apple' },\n      { value: 'banana', label: 'banana' },\n      { value: 'cherry', label: 'cherry' },\n    ],\n    vegetables: [\n      { value: 'carrot', label: 'carrot' },\n      { value: 'spinach', label: 'spinach' },\n      { value: 'potato', label: 'potato' },\n    ]\n  }\n});\n```\n\n### Multi-Line Text\n\nThe multi-line prompt accepts multiple lines of text input. By default, pressing `Enter` twice submits the input.\n\n```js\nimport { multiline } from '@clack/prompts';\n\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  placeholder: 'Start typing...',\n  validate(value) {\n    if (value.length === 0) return `value is required`;\n  },\n});\n```\n\nSet `showSubmit` to display an explicit submit button instead of double `Enter` submission:\n\n```js\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  showSubmit: true,\n});\n```\n\n### Path\n\nThe `path` prompt extends [`autocomplete`](#autocomplete) to provide file and directory suggestions.\n\n```js\nimport { path } from '@clack/prompts';\n\nconst targetDir = await path({\n  message: 'Select an existing directory.',\n  directory: true,\n});\n```\n\n### Spinner\n\nThe spinner component surfaces a pending action, such as a long-running download or dependency installation.\n\n```js\nimport { spinner } from '@clack/prompts';\n\nconst s = spinner();\ns.start('Installing via npm');\n// Do installation here\ns.stop('Installed via npm');\n```\n\n### Progress\n\nThe progress component extends the spinner component to add a progress bar to visualize the progression of an action.\n\n```js\nimport { progress } from '@clack/prompts';\n\nconst p = progress({ max: 10 });\np.start('Downloading archive');\n// Do download here\np.advance(3, 'Downloading (30%)');\n// ...\np.advance(5, 'Downloading (80%)');\n// ...\np.stop('Archive downloaded');\n```\n\n## Utilities\n\n### Grouping\n\nGrouping prompts together is a great way to keep your code organized. This accepts a JSON object with a name that can be used to reference the group later. The second argument is an optional but has a `onCancel` callback that will be called if the user cancels one of the prompts in the group.\n\n```js\nimport * as p from '@clack/prompts';\n\nconst group = await p.group(\n  {\n    name: () => p.text({ message: 'What is your name?' }),\n    age: () => p.text({ message: 'What is your age?' }),\n    color: ({ results }) =>\n      p.multiselect({\n        message: `What is your favorite color ${results.name}?`,\n        options: [\n          { value: 'red', label: 'Red' },\n          { value: 'green', label: 'Green' },\n          { value: 'blue', label: 'Blue' },\n        ],\n      }),\n  },\n  {\n    // On Cancel callback that wraps the group\n    // So if the user cancels one of the prompts in the group this function will be called\n    onCancel: ({ results }) => {\n      p.cancel('Operation cancelled.');\n      process.exit(0);\n    },\n  }\n);\n\nconsole.log(group.name, group.age, group.color);\n```\n\n### Tasks\n\nExecute multiple tasks in spinners.\n\n```js\nimport { tasks } from '@clack/prompts';\n\nawait tasks([\n  {\n    title: 'Installing via npm',\n    task: async (message) => {\n      // Do installation here\n      return 'Installed via npm';\n    },\n  },\n]);\n```\n\n### Logs\n\n```js\nimport { log } from '@clack/prompts';\n\nlog.info('Info!');\nlog.success('Success!');\nlog.step('Step!');\nlog.warn('Warn!');\nlog.error('Error!');\nlog.message('Hello, World', { symbol: color.cyan('~') });\n```\n\n\n### Stream\n\nWhen interacting with dynamic LLMs or other streaming message providers, use the `stream` APIs to log messages from an iterable, even an async one.\n\n```js\nimport { stream } from '@clack/prompts';\n\nstream.info((function *() { yield 'Info!'; })());\nstream.success((function *() { yield 'Success!'; })());\nstream.step((function *() { yield 'Step!'; })());\nstream.warn((function *() { yield 'Warn!'; })());\nstream.error((function *() { yield 'Error!'; })());\nstream.message((function *() { yield 'Hello'; yield \", World\" })(), { symbol: color.cyan('~') });\n```\n\n![clack-log-prompts](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-logs.png)\n\n### Task Log\n\nWhen executing a sub-process or a similar sub-task, `taskLog` can be used to render the output continuously and clear it at the end if it was successful.\n\n```js\nimport { taskLog } from '@clack/prompts';\n\nconst log = taskLog({\n\ttitle: 'Running npm install'\n});\n\nfor await (const line of npmInstall()) {\n\tlog.message(line);\n}\n\nif (success) {\n\tlog.success('Done!');\n} else {\n\tlog.error('Failed!');\n}\n```\n","isInternal":false,"tokens":2568,"sizeBytes":10098}],"systemPromptSnippet":"<yakaai_skills repo=\"bombshell-dev/clack\">\n<!-- File: packages/core/CHANGELOG.md (Tokens: ~4321 | Category: anthropic-skill) -->\n# @clack/core\n\n## 1.5.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n## 1.5.0\n\n### Minor Changes\n\n- [#595](https://github.com/bombshell-dev/clack/pull/595) [`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add an `accessible` option to the shared `PromptOptions` and a resolved `accessible` getter on the base `Prompt`, so any prompt can opt into accessible mode individually. Resolution order: per-prompt option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable.\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n- [#593](https://github.com/bombshell-dev/clack/pull/593) [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `isAccessible()` and an `accessible` setting as the foundation for accessible mode. Resolution order: per-call option > `updateSettings({ accessible })` > the `ACCESSIBLE` environment variable (any non-empty value enables it, except `0` and `false`).\n\n## 1.4.3\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n## 1.4.2\n\n### Patch Changes\n\n- [#561](https://github.com/bombshell-dev/clack/pull/561) [`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1) Thanks [@avallete](https://github.com/avallete)! - Fix `password` prompt resolving to `undefined` on empty submit. It now normalizes an empty submission to `\"\"`, matching the `text` prompt behavior and the documented `Promise<string | symbol>` return type.\n\n- [#569](https://github.com/bombshell-dev/clack/pull/569) [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb) Thanks [@43081j](https://github.com/43081j)! - fix: only submit multi-line prompt when double-return happens at end of input.\n\n  Also fixes two minor things:\n\n  - Initial value is used as initial user input for multi-line prompts\n  - Cursor is placed at the end when there is initial input\n\n## 1.4.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n## 1.4.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n## 1.3.1\n\n### Patch Changes\n\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n\n## 1.3.0\n\n### Minor Changes\n\n- 78fd3ae: Remove unused `debug` option key.\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 417b451: Only apply autocomplete default filter if it has been explicitly set or if options is not a getter.\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 2533180: Updates the documentation to mention `userInputWithCursor` when using the `TextPrompt` primitive.\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 2837845: Adds suggestion and path prompts\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 55645c2: Support wrapping autocomplete and select prompts.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n\n### Patch Changes\n\n- 0718b07: fix: export `*Options` types for prompts.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- a4f5034: Fixes an edge case for placeholder values. Previously, when pressing `enter` on an empty prompt, placeholder values would be ignored. Now, placeholder values are treated as the prompt value.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- a36292b: Fix \"TTY initialization failed: uv_tty_init returned EBADF (bad file descriptor)\" error happening on Windows for non-tty terminals.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- 4ba2d78: Support short terminal windows when re-rendering by accounting for off-screen lines\n- 34f52fe: Validates initial values immediately when using text prompts with initialValue and validate props.\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 4f6b3c2: Set initial values of auto complete prompt to first option when multiple is false.\n- 8ead5d3: Avoid passing initial values to core when using auto complete prompt\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 2310b43: Allow custom writables as output stream.\n- d98e033: add invert selection for multiselect prompt\n\n## 0.4.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- e5ba09a: Fixes a cursor display bug in terminals that do not support the \"hidden\" escape sequence. See [Issue #127](https://github.com/bombshell-dev/clack/issues/127).\n- 8cba8e3: Fixes a rendering bug with cursor positions for `TextPrompt`\n\n## 0.4.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/core\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- 51e12bc: Improves types for events and interaction states.\n\n## 0.3.5\n\n### Patch Changes\n\n- 4845f4f: Fixes a bug which kept the terminal cursor hidden after a prompt is cancelled\n- d7b2fb9: Adds missing `LICENSE` file. Since the `package.json` file has always included `\"license\": \"MIT\"`, please consider this a licensing clarification rather than a licensing change.\n\n## 0.3.4\n\n### Patch Changes\n\n- a04e418: fix(@clack/core): keyboard input not working after await in spinner\n- 4f6fcf5: feat(@clack/core): allow tab completion for placeholders\n\n## 0.3.3\n\n### Patch Changes\n\n- cd79076: fix: restore raw mode on unblock\n\n## 0.3.2\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n\n## 0.3.1\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n\n## 0.3.0\n\n### Minor Changes\n\n- 8a4a12f: Add `GroupMultiSelect` prompt\n\n### Patch Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n\n## 0.2.1\n\n### Patch Changes\n\n- ec812b6: fix `readline` hang on Windows\n\n## 0.2.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n## 0.1.9\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n\n## 0.1.8\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n## 0.1.7\n\n### Patch Changes\n\n- 6d9e675: Add support for neovim cursor motion (`hjkl`)\n\n  Thanks [@esau-morais](https://github.com/esau-morais) for the assist!\n\n## 0.1.6\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n\n## 0.1.5\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n\n## 0.1.4\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- 8aed606: Fix `MaxListenersExceededWarning` by detaching `stdin` listeners on close\n\n## 0.1.3\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n\n## 0.1.2\n\n### Patch Changes\n\n- Allow isCancel to type guard any unknown value\n- 7dcad8f: Allow placeholder to be passed to TextPrompt\n- 2242f13: Fix multiselect returning undefined\n- b1341d6: Improved placeholder handling\n\n## 0.1.1\n\n### Patch Changes\n\n- 4be7dbf: Ensure raw mode is unset on submit\n- b480679: Preserve value if validation fails\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n## 0.0.12\n\n### Patch Changes\n\n- 9d371c3: Fix rendering bug when using y/n to confirm\n\n## 0.0.11\n\n### Patch Changes\n\n- 441d5b7: fix select return undefined\n- d20ef2a: Update keywords, URLs\n- fe13c2f: fix cursor missing after submit\n\n## 0.0.10\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n\n## 0.0.9\n\n### Patch Changes\n\n- Fix node@16 issue (cannot read \"createInterface\" of undefined)\n\n## 0.0.8\n\n### Patch Changes\n\n- a4b5e13: Bug fixes, exposes `block` utility\n\n## 0.0.7\n\n### Patch Changes\n\n- Fix cursor bug\n\n## 0.0.6\n\n### Patch Changes\n\n- Fix error with character check\n\n## 0.0.5\n\n### Patch Changes\n\n- 491f9e0: update readme\n\n## 0.0.4\n\n### Patch Changes\n\n- 7372d5c: Fix bug with line deletion\n\n## 0.0.3\n\n### Patch Changes\n\n- 5605d28: Do not bundle dependencies (take II)\n\n## 0.0.2\n\n### Patch Changes\n\n- 2ee67cb: don't bundle deps\n\n## 0.0.1\n\n### Patch Changes\n\n- 306598e: Initial publish, still WIP\n\n<!-- File: packages/core/package.json (Tokens: ~450 | Category: anthropic-skill) -->\n{\n  \"name\": \"@clack/core\",\n  \"version\": \"1.5.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/core\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/core#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"arktype\": \"^2.2.0\",\n    \"vitest\": \"^3.2.4\"\n  }\n}\n\n<!-- File: packages/core/tsconfig.json (Tokens: ~21 | Category: anthropic-skill) -->\n{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n\n<!-- File: packages/prompts/CHANGELOG.md (Tokens: ~7789 | Category: anthropic-skill) -->\n# @clack/prompts\n\n## 1.8.1\n\n### Patch Changes\n\n- [`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395) Thanks [@gameroman](https://github.com/gameroman)! - Return type for prompts now correctly specifies `CANCEL_SYMBOL` instead of `symbol`\n\n- Updated dependencies [[`8bd9129`](https://github.com/bombshell-dev/clack/commit/8bd9129a4a1ca2bb6dcbc7f952e762db21e5d395)]:\n  - @clack/core@1.5.1\n\n## 1.8.0\n\n### Minor Changes\n\n- [#592](https://github.com/bombshell-dev/clack/pull/592) [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc) Thanks [@gameroman](https://github.com/gameroman)! - Export `CANCEL_SYMBOL` constant from `@clack/core` and `@clack/prompts`\n\n- [#594](https://github.com/bombshell-dev/clack/pull/594) [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add tab-completion to the `path` prompt: pressing Tab fills the input with the focused suggestion, so you can quickly descend into deep directories (type `/` and Tab again). Powered by a new opt-in `completeOnTab` option on `autocomplete`, which also shows a `Tab: complete` hint in the instructions footer. Default `autocomplete` behavior is unchanged.\n\n- [#583](https://github.com/bombshell-dev/clack/pull/583) [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8) Thanks [@43081j](https://github.com/43081j)! - Add async validation support to prompts, and validation state rendering to text prompts.\n\n### Patch Changes\n\n- [#588](https://github.com/bombshell-dev/clack/pull/588) [`6506135`](https://github.com/bombshell-dev/clack/commit/65061353e65e468035d8d8c7de9359926774626d) Thanks [@danielroe](https://github.com/danielroe)! - Style the guide bar rendered by `box({ withGuide: true })` in grey so it matches the gutter drawn by `log`, `note` and the spinner\n\n- [#599](https://github.com/bombshell-dev/clack/pull/599) [`0547d6f`](https://github.com/bombshell-dev/clack/commit/0547d6f4c16c4580b06c592e698b9ceb621f2547) Thanks [@43081j](https://github.com/43081j)! - Fixes a withGuide rendering issue leaving extra spaces in text prompts.\n\n- Updated dependencies [[`227583e`](https://github.com/bombshell-dev/clack/commit/227583efb6d3fb353477a2df7279a33f77e7837b), [`caa32e8`](https://github.com/bombshell-dev/clack/commit/caa32e853cb65afad778f56f6bad8699d4b195bc), [`37fca4e`](https://github.com/bombshell-dev/clack/commit/37fca4eb7277571b2b6f8c027dbc07e77632234b), [`ae636dd`](https://github.com/bombshell-dev/clack/commit/ae636ddcb4fbc992716f294f64371e4ff4997fb8), [`b20fa2b`](https://github.com/bombshell-dev/clack/commit/b20fa2b75446389b4caf6bb16ad660a966175f8a)]:\n  - @clack/core@1.5.0\n\n## 1.7.0\n\n### Minor Changes\n\n- [#574](https://github.com/bombshell-dev/clack/pull/574) [`8f1c380`](https://github.com/bombshell-dev/clack/commit/8f1c380683cfb5fb7a094610342046ae1603e28e) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add `showInstructions` option to `select`, `multiselect`, and `groupMultiselect`. Keyboard hints remain shown by default; pass `showInstructions: false` to hide them.\n\n### Patch Changes\n\n- [#582](https://github.com/bombshell-dev/clack/pull/582) [`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06) Thanks [@43081j](https://github.com/43081j)! - Handle empty arrays in various prompts and utilities.\n\n- Updated dependencies [[`4b24953`](https://github.com/bombshell-dev/clack/commit/4b249539e28eecc16c13b3a1bd0ba447e9f38d06)]:\n  - @clack/core@1.4.3\n\n## 1.6.0\n\n### Minor Changes\n\n- [#568](https://github.com/bombshell-dev/clack/pull/568) [`f87933f`](https://github.com/bombshell-dev/clack/commit/f87933fb7b3f4c401b9e51a152b95cb8e7200fe5) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Updates default formatter of `note()` to note dim lines anymore\n\n  If you want the old behavior, provide a `format()` function:\n\n  ```diff\n  import { note } from '@clack/prompts';\n  +import { styleText } from 'node:util';\n\n  note(\n    'You can edit the file src/index.jsx',\n    'Next steps.'\n  +  { format: (text) => styleText('dim', text) }\n  );\n  ```\n\n- [#567](https://github.com/bombshell-dev/clack/pull/567) [`cc6aab5`](https://github.com/bombshell-dev/clack/commit/cc6aab50186cff8a02dc98e9cfd3897c29a33b15) Thanks [@dreyfus92](https://github.com/dreyfus92)! - Add keyboard instruction footers to `select`, `multiselect`, and `groupMultiselect` in the active state, matching autocomplete. No option — always shown.\n\n### Patch Changes\n\n- Updated dependencies [[`2f2b52f`](https://github.com/bombshell-dev/clack/commit/2f2b52f77cbfa9af618c6d929249ab8395fc37a1), [`e1b6ee7`](https://github.com/bombshell-dev/clack/commit/e1b6ee71a76e17a3c33ba7ee6e5fb34e886233bb)]:\n  - @clack/core@1.4.2\n\n## 1.5.1\n\n### Patch Changes\n\n- [#548](https://github.com/bombshell-dev/clack/pull/548) [`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb) Thanks [@43081j](https://github.com/43081j)! - Remove sourcemaps and enable pretty-ish build output.\n\n- [#546](https://github.com/bombshell-dev/clack/pull/546) [`56e9d67`](https://github.com/bombshell-dev/clack/commit/56e9d6707715bc858d9c2dbc444230b02813e809) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `date`, `limit-options`, and `messages`\n\n- Updated dependencies [[`2356e97`](https://github.com/bombshell-dev/clack/commit/2356e97c1f46007ead55133c3a26910404ef1cfb)]:\n  - @clack/core@1.4.1\n\n## 1.5.0\n\n### Minor Changes\n\n- [#543](https://github.com/bombshell-dev/clack/pull/543) [`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6) Thanks [@florian-lefebvre](https://github.com/florian-lefebvre)! - Adds support for Standard Schema validation\n\n  Prompts accept an optional `validate()` function to validate user input. While a function provides more flexibility and customization over your validation, it can be a bit verbose. To help solve this, there are libraries that provide schema-based validation to make shorthand and type-strict validation substantially easier.\n\n  Libraries following the [Standard Schema specification](https://github.com/standard-schema/standard-schema) are now natively supported. For example, using [Arktype](https://arktype.io/):\n\n  ```diff\n  import { text } from '@clack/prompts';\n  import { type } from 'arktype';\n\n  const name = await text({\n  \tmessage: 'Enter your email',\n  +\tvalidate: type('string.email').describe('Invalid email'),\n  });\n  ```\n\n### Patch Changes\n\n- [#542](https://github.com/bombshell-dev/clack/pull/542) [`adb6af9`](https://github.com/bombshell-dev/clack/commit/adb6af9f5fb39408934323a7415beb46b63ecd9a) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `box`, `group`, and `group-multi-select`\n\n- [#534](https://github.com/bombshell-dev/clack/pull/534) [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364) Thanks [@MattStypa](https://github.com/MattStypa)! - Fixed spaces and uppercase characters in multiline prompt\n\n- [#540](https://github.com/bombshell-dev/clack/pull/540) [`3170ed9`](https://github.com/bombshell-dev/clack/commit/3170ed94dc2a6ed7973228d46c664fb7461969ad) Thanks [@ghostdevv](https://github.com/ghostdevv)! - docs: add jsdoc for `autocomplete`, `confirm`, and `path` prompts\n\n- Updated dependencies [[`83428ac`](https://github.com/bombshell-dev/clack/commit/83428ac6d8bc5eda87615cc7b1f14e0c8b16e1b6), [`3dcb31a`](https://github.com/bombshell-dev/clack/commit/3dcb31a7d63827d95a5a52ac630cbd48e3a68364)]:\n  - @clack/core@1.4.0\n\n## 1.4.0\n\n### Minor Changes\n\n- 284677e: Support scrolling and `maxItems` option for `groupMultiselect`, and removes indent when `withGuide` is set to `false`\n\n### Patch Changes\n\n- aab46a2: docs: add jsdoc for `text`, `password`, and `multiline` prompts\n- 54be8d7: Fix line wrapping and overflow computation in group multi-select and other list-like prompts.\n- Updated dependencies [54be8d7]\n  - @clack/core@1.3.1\n\n## 1.3.0\n\n### Minor Changes\n\n- ea5702e: fix: add engines field expressing node >=20.12 requirement\n- 814ab9a: Add new multiline prompt for multi-line text input.\n\n### Patch Changes\n\n- 5b897a7: Fix mixed type-only and runtime exports from @clack/core.\n- Updated dependencies [78fd3ae]\n- Updated dependencies [ea5702e]\n- Updated dependencies [814ab9a]\n  - @clack/core@1.3.0\n\n## 1.2.0\n\n### Minor Changes\n\n- 9786226: Externalize `fast-string-width` and `fast-wrap-ansi` to avoid double dependencies\n- 090902c: Adds `date` prompt with `format` support (YMD, MDY, DMY)\n\n### Patch Changes\n\n- 134a1a1: Fix the `path` prompt so `directory: true` correctly enforces directory-only selection while still allowing directory navigation, and add regression tests for both directory and default file selection behavior.\n- bdf89a5: Adds `placeholder` option to `autocomplete`. When the placeholder is set and the input is empty, pressing `tab` will set the value to `placeholder`.\n- 336495a: Apply guide to wrapped multi-line messages in confirm prompt.\n- 9fe8de6: Respect `withGuide: false` in autocomplete and multiselect prompts.\n- 29a50cb: Fix `path` directory mode so pressing Enter with an existing directory `initialValue` submits that current directory instead of the first child option, and add regression coverage for immediate submit and child-directory navigation.\n- Updated dependencies [9786226]\n- Updated dependencies [bdf89a5]\n- Updated dependencies [417b451]\n- Updated dependencies [090902c]\n  - @clack/core@1.2.0\n\n## 1.1.0\n\n### Minor Changes\n\n- e3333fb: Replaces `picocolors` with Node.js built-in `styleText`.\n\n### Patch Changes\n\n- c3666e2: destruct `limitOption` param for better code readability, tweak types definitions\n- ba3df8e: Fixes withGuide support in intro, outro, and cancel messages.\n- Updated dependencies [e3333fb]\n  - @clack/core@1.1.0\n\n## 1.0.1\n\n### Patch Changes\n\n- 6404dc1: Disallows selection of `disabled` options in autocomplete.\n- 86e36d8: Adds `withGuide` support to select prompt.\n- c697439: Fixes line wrapping behavior in autocomplete.\n- 0ded19c: Simplifies `withGuide` option checks.\n- 0e4ddc9: Fixes `withGuide` support in password and path prompts.\n- 76550d6: Adds `withGuide` support to selectKey prompt.\n- f9b9953: Adds `withGuide` support to password prompt.\n- 0e93ccb: Adds `vertical` arrangement option to `confirm` prompt.\n- 4e9ae13: Adds `withGuide` support to confirm prompt.\n- 0256238: Adds `withGuide` support to spinner prompt.\n- Updated dependencies [6404dc1]\n- Updated dependencies [2533180]\n  - @clack/core@1.0.1\n\n## 1.0.0\n\n### Major Changes\n\n- c713fd5: The package is now distributed as ESM-only. In `v0` releases, the package was dual-published as CJS and ESM.\n\n  For existing CJS projects using Node v20+, please see Node's guide on [Loading ECMAScript modules using `require()`](https://nodejs.org/docs/latest-v20.x/api/modules.html#loading-ecmascript-modules-using-require).\n\n### Minor Changes\n\n- 415410b: This adds a custom filter function to autocompleteMultiselect. It could be used, for example, to support fuzzy searching logic.\n- 7bc3301: Prompts now have a `userInput` stored separately from their `value`.\n- 8409f2c: feat: add styleFrame option for spinner\n- 2837845: Adds suggestion and path prompts\n- 99c3530: Adds `format` option to the note prompt to allow formatting of individual lines\n- 0aaee4c: Added new `taskLog` prompt for log output which is cleared on success\n- 729bbb6: Add support for customizable spinner cancel and error messages. Users can now customize these messages either per spinner instance or globally via the `updateSettings` function to support multilingual CLIs.\n\n  This update also improves the architecture by exposing the core settings to the prompts package, enabling more consistent default message handling across the codebase.\n\n  ```ts\n  // Per-instance customization\n  const spinner = prompts.spinner({\n    cancelMessage: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n    errorMessage: \"Se produjo un error\", // \"An error occurred\" in Spanish\n  });\n\n  // Global customization via updateSettings\n  prompts.updateSettings({\n    messages: {\n      cancel: \"Operación cancelada\", // \"Operation cancelled\" in Spanish\n      error: \"Se produjo un error\", // \"An error occurred\" in Spanish\n    },\n  });\n\n  // Settings can now be accessed directly\n  console.log(prompts.settings.messages.cancel); // \"Operación cancelada\"\n\n  // Direct options take priority over global settings\n  const spinner = prompts.spinner({\n    cancelMessage: \"Cancelled\", // This will be used instead of the global setting\n  });\n  ```\n\n- 44df9af: Adds a new `groupSpacing` option to grouped multi-select prompts. If set to an integer greater than 0, it will add that number of new lines between each group.\n- 55645c2: Support wrapping autocomplete and select prompts.\n- 9e5bc6c: Add support for signals in prompts, allowing them to be aborted.\n- f2c2b89: Adds `AutocompletePrompt` to core with comprehensive tests and implement both `autocomplete` and `autocomplete-multiselect` components in prompts package.\n- 38019c7: Updates the API for stopping spinners and progress bars to be clearer\n\n  Previously, both the spinner and progress bar components used a single `stop` method that accepted a code to indicate success, cancellation, or error. This update separates these into distinct methods: `stop()`, `cancel()`, and `error()`:\n\n  ```diff\n  const spinner = prompts.spinner();\n  spinner.start();\n\n  // Cancelling a spinner\n  - spinner.stop(undefined, 1);\n  + spinner.cancel();\n\n  // Stopping with an error\n  - spinner.stop(undefined, 2);\n  + spinner.error();\n  ```\n\n  As before, you can pass a message to each method to customize the output displayed:\n\n  ```js\n  spinner.cancel(\"Operation cancelled by user\");\n  progressBar.error(\"An error occurred during processing\");\n  ```\n\n- c45b9fb: Adds support for detecting spinner cancellation via CTRL+C. This allows for graceful handling of user interruptions during long-running operations.\n- f10071e: Using the `group` method, task logs can now have groups which themselves can have scrolling windows of logs.\n- df4eea1: Remove `suggestion` prompt and change `path` prompt to be an autocomplete prompt.\n- 76fd17f: Added new `box` prompt for rendering boxed text, similar a note.\n- 9a09318: Adds new `progress` prompt to display a progess-bar\n- 1604f97: Add `clearOnError` option to password prompt to automatically clear input when validation fails\n- 9bd8072: Add a `required` option to autocomplete multiselect.\n- 19558b9: Added support for custom frames in spinner prompt\n\n### Patch Changes\n\n- 46dc0a4: Fixes multiselect only shows hints on the first item in the options list. Now correctly shows hints for all selected options with hint property.\n- aea4573: Clamp scrolling windows to 5 rows.\n- bfe0dd3: Prevents placeholder from being used as input value in text prompts\n- 55eb280: Fix placeholder rendering when using autocomplete.\n- 4d1d83b: Fixes rendering of multi-line messages and options in select prompt.\n- 6176ced: Add withGuide support to note prompt\n- 7b009df: Fix spinner clearing too many lines upwards when non-wrapping.\n- 43aed55: Change styling of disabled multi-select options to have strikethrough.\n- 17342d2: Exposes a new `SpinnerResult` type to describe the return type of `spinner`\n- 282b39e: Wrap spinner output to allow for multi-line/wrapped messages.\n- 2feaebb: Fix duplicated logs when scrolling through options with multiline messages by calculating `rowPadding` dynamically based on actual rendered lines instead of using a hardcoded value.\n- 69681ea: Strip destructive ANSI codes from task log messages.\n- b0fa7d8: Add support for wrapped messages in multi line prompts\n- 9999adf: fix note component overflow bug\n- 6868c1c: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually.\n- 7df841d: Removed all trailing space in prompt output and fixed various padding rendering bugs.\n- 2839c66: fix(note): hard wrap text to column limit\n- 7a556ad: Updates all prompts to accept a custom `output` and `input` stream\n- 17d3650: Use a default import for picocolors to avoid run time errors in some environments.\n- 7cc8a55: Messages passed to the `stop` method of a spinner no longer have dots stripped.\n- b103ad3: Allow disabled options in multi-select and select prompts.\n- 71b5029: Add missing nullish checks around values.\n- 1a45f93: Switched from wrap-ansi to fast-wrap-ansi\n- f952592: Fixes missing guide when rendering empty log lines.\n- 372b526: Add `clear` method to spinner for stopping and clearing.\n- d25f6d0: fix(note, box): handle CJK correctly\n- 94fee2a: Changes `placeholder` to be a visual hint rather than a tabbable value.\n- 7530af0: Fixes wrapping of cancelled and success messages of select prompt\n- 4c89dd7: chore: use more accurate type to replace any in group select\n- 0b852e1: Handle `stop` calls on spinners which have not yet been started.\n- 42adff8: fix: add missing guide line in autocomplete-multiselect\n- 8e2e30a: fix: fix autocomplete bar color when validate\n- 2048eb1: Fix spinner's dots behavior with custom frames\n- acc4c3a: Add a new `withGuide` option to all prompts to disable the default clack border\n- 9b92161: Show symbol when withGuide is true for log messages\n- 68dbf9b: select-key: Fixed wrapping and added new `caseSensitive` option\n- 09e596c: refactor(progress): remove unnecessary return statement in start function\n- 2310b43: Allow custom writables as output stream.\n- ae84dd0: Update key binding text to show tab/space when navigating, and tab otherwise.\n- Updated dependency on `@clack/core` to `1.0.0`\n\n## 0.10.0\n\n### Minor Changes\n\n- 613179d: Adds a new `indicator` option to `spinner`, which supports the original `\"dots\"` loading animation or a new `\"timer\"` loading animation.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  const spin = p.spinner({ indicator: \"timer\" });\n  spin.start(\"Loading\");\n  await sleep(3000);\n  spin.stop(\"Loaded\");\n  ```\n\n- a38b2bc: Adds `stream` API which provides the same methods as `log`, but for iterable (even async) message streams. This is particularly useful for AI responses which are dynamically generated by LLMs.\n\n  ```ts\n  import * as p from \"@clack/prompts\";\n\n  await p.stream.step(\n    (async function* () {\n      yield* generateLLMResponse(question);\n    })()\n  );\n  ```\n\n## 0.9.1\n\n### Patch Changes\n\n- 8093f3c: Adds `Error` support to the `validate` function\n- 98925e3: Exports the `Option` type and improves JSDocannotations\n- 1904e57: Replace custom utility for stripping ANSI control sequences with Node's built-in [`stripVTControlCharacters`](https://nodejs.org/docs/latest/api/util.html#utilstripvtcontrolcharactersstr) utility.\n- Updated dependencies [8093f3c]\n- Updated dependencies [e5ba09a]\n- Updated dependencies [8cba8e3]\n  - @clack/core@0.4.1\n\n## 0.9.0\n\n### Minor Changes\n\n- a83d2f8: Adds a new `updateSettings()` function to support new global keybindings.\n\n  `updateSettings()` accepts an `aliases` object that maps custom keys to an action (`up | down | left | right | space | enter | cancel`).\n\n  ```ts\n  import { updateSettings } from \"@clack/prompts\";\n\n  // Support custom keybindings\n  updateSettings({\n    aliases: {\n      w: \"up\",\n      a: \"left\",\n      s: \"down\",\n      d: \"right\",\n    },\n  });\n  ```\n\n> [!WARNING]\n> In order to enforce consistent, user-friendly defaults across the ecosystem, `updateSettings` does not support disabling Clack's default keybindings.\n\n- 801246b: Adds a new `signal` option to support programmatic prompt cancellation with an [abort controller](https://kettanaito.com/blog/dont-sleep-on-abort-controller).\n\n  One example use case is automatically cancelling a prompt after a timeout.\n\n  ```ts\n  const shouldContinue = await confirm({\n    message: \"This message will self destruct in 5 seconds\",\n    signal: AbortSignal.timeout(5000),\n  });\n  ```\n\n  Another use case is racing a long running task with a manual prompt.\n\n  ```ts\n  const abortController = new AbortController();\n\n  const projectType = await Promise.race([\n    detectProjectType({\n      signal: abortController.signal,\n    }),\n    select({\n      message: \"Pick a project type.\",\n      options: [\n        { value: \"ts\", label: \"TypeScript\" },\n        { value: \"js\", label: \"JavaScript\" },\n        { value: \"coffee\", label: \"CoffeeScript\", hint: \"oh no\" },\n      ],\n      signal: abortController.signal,\n    }),\n  ]);\n\n  abortController.abort();\n  ```\n\n- a83d2f8: Updates default keybindings to support Vim motion shortcuts and map the `escape` key to cancel (`ctrl+c`).\n\n  | alias | action |\n  | ----- | ------ |\n  | `k`   | up     |\n  | `l`   | right  |\n  | `j`   | down   |\n  | `h`   | left   |\n  | `esc` | cancel |\n\n### Patch Changes\n\n- f9f139d: Adapts `spinner` output for static CI environments\n- Updated dependencies [a83d2f8]\n- Updated dependencies [801246b]\n- Updated dependencies [a83d2f8]\n- Updated dependencies [51e12bc]\n  - @clack/core@0.4.0\n\n## 0.8.2\n\n### Patch Changes\n\n- Updated dependencies [4845f4f]\n- Updated dependencies [d7b2fb9]\n  - @clack/core@0.3.5\n\n## 0.8.1\n\n### Patch Changes\n\n- 360afeb: feat: adaptative max items\n\n## 0.8.0\n\n### Minor Changes\n\n- 9acccde: Add tasks function for executing tasks in spinners\n\n### Patch Changes\n\n- b5c6b9b: Feat multiselect maxItems option\n- 50ed94a: fix: clear `spinner` hooks on `spinner.stop`\n- Updated dependencies [a04e418]\n- Updated dependencies [4f6fcf5]\n  - @clack/core@0.3.4\n\n## 0.7.0\n\n### Minor Changes\n\n- b27a701: add maxItems option to select prompt\n- 89371be: added a new method called `spinner.message(msg: string)`\n\n### Patch Changes\n\n- 52183c4: Fix `spinner` conflict with terminal on error between `spinner.start()` and `spinner.stop()`\n- ab51d29: Fixes cases where the note title length was miscalculated due to ansi characters\n- Updated dependencies [cd79076]\n  - @clack/core@0.3.3\n\n## 0.6.3\n\n### Patch Changes\n\n- c96eda5: Enable hard line-wrapping behavior for long words without spaces\n- Updated dependencies [c96eda5]\n  - @clack/core@0.3.2\n\n## 0.6.2\n\n### Patch Changes\n\n- 58a1df1: Fix line duplication bug by automatically wrapping prompts to `process.stdout.columns`\n- Updated dependencies [58a1df1]\n  - @clack/core@0.3.1\n\n## 0.6.1\n\n### Patch Changes\n\n- ca08fb6: Support complex value types for `select`, `multiselect` and `groupMultiselect`.\n\n## 0.6.0\n\n### Minor Changes\n\n- 8a4a12f: add `groupMultiselect` prompt\n- 165a1b3: Add `log` APIs. Supports `log.info`, `log.success`, `log.warn`, and `log.error`. For low-level control, `log.message` is also exposed.\n\n### Patch Changes\n\n- Updated dependencies [8a4a12f]\n- Updated dependencies [8a4a12f]\n  - @clack/core@0.3.0\n\n## 0.5.1\n\n### Patch Changes\n\n- cc11917: Update default `password` mask\n- Updated dependencies [ec812b6]\n  - @clack/core@0.2.1\n\n## 0.5.0\n\n### Minor Changes\n\n- d74dd05: Adds a `selectKey` prompt type\n- 54c1bc3: **Breaking Change** `multiselect` has renamed `initialValue` to `initialValues`\n\n### Patch Changes\n\n- Updated dependencies [d74dd05]\n- Updated dependencies [54c1bc3]\n  - @clack/core@0.2.0\n\n## 0.4.5\n\n### Patch Changes\n\n- 1251132: Multiselect: return `Value[]` instead of `Option[]`.\n- 8994382: Add a password prompt to `@clack/prompts`\n- Updated dependencies [1251132]\n- Updated dependencies [8994382]\n  - @clack/core@0.1.9\n\n## 0.4.4\n\n### Patch Changes\n\n- d96071c: Don't mutate `initialValue` in `multiselect`, fix parameter type for `validate()`.\n\n  Credits to @banjo for the bug report and initial PR!\n\n- Updated dependencies [d96071c]\n  - @clack/core@0.1.8\n\n## 0.4.3\n\n### Patch Changes\n\n- 83d890e: Fix text cancel display bug\n\n## 0.4.2\n\n### Patch Changes\n\n- Update README\n\n## 0.4.1\n\n### Patch Changes\n\n- 7fb5375: Adds a new `defaultValue` option to the text prompt, removes automatic usage of the placeholder value.\n- Updated dependencies [7fb5375]\n  - @clack/core@0.1.6\n\n## 0.4.0\n\n### Minor Changes\n\n- 61b88b6: Add `group` construct to group many prompts together\n\n### Patch Changes\n\n- de1314e: Support `required` option for multi-select\n- Updated dependencies [de1314e]\n  - @clack/core@0.1.5\n\n## 0.3.0\n\n### Minor Changes\n\n- 493c592: Improve types for select/multiselect prompts. Numbers and booleans are now supported as the `value` option.\n- 15558e3: Improved Windows/non-unicode support\n\n### Patch Changes\n\n- ca77da1: Fix multiselect initial value logic\n- Updated dependencies [ca77da1]\n- Updated dependencies [8aed606]\n  - @clack/core@0.1.4\n\n## 0.2.2\n\n### Patch Changes\n\n- 94b24d9: Fix CJS `ansi-regex` interop\n\n## 0.2.1\n\n### Patch Changes\n\n- a99c458: Support `initialValue` option for text prompt\n- Updated dependencies [a99c458]\n  - @clack/core@0.1.3\n\n## 0.2.0\n\n### Minor Changes\n\n- Improved type safety\n- b1341d6: Updated styles, new note component\n\n### Patch Changes\n\n- Updated dependencies [7dcad8f]\n- Updated dependencies [2242f13]\n- Updated dependencies [b1341d6]\n  - @clack/core@0.1.2\n\n## 0.1.1\n\n### Patch Changes\n\n- fa09bf5: Use circle for radio, square for checkbox\n- Updated dependencies [4be7dbf]\n- Updated dependencies [b480679]\n  - @clack/core@0.1.1\n\n## 0.1.0\n\n### Minor Changes\n\n- 7015ec9: Create new prompt: multi-select\n\n### Patch Changes\n\n- Updated dependencies [7015ec9]\n  - @clack/core@0.1.0\n\n## 0.0.10\n\n### Patch Changes\n\n- e0b49e5: Update spinner so it actually spins\n\n## 0.0.9\n\n### Patch Changes\n\n- Update README\n\n## 0.0.8\n\n### Patch Changes\n\n- Updated dependencies [9d371c3]\n  - @clack/core@0.0.12\n\n## 0.0.7\n\n### Patch Changes\n\n- Update README\n\n## 0.0.6\n\n### Patch Changes\n\n- d20ef2a: Update keywords, URLs\n- Updated dependencies [441d5b7]\n- Updated dependencies [d20ef2a]\n- Updated dependencies [fe13c2f]\n  - @clack/core@0.0.11\n\n## 0.0.5\n\n### Patch Changes\n\n- Update README\n\n## 0.0.4\n\n### Patch Changes\n\n- 80404ab: Update README\n\n## 0.0.3\n\n### Patch Changes\n\n- a0cb382: Add `main` entrypoint\n- Updated dependencies [a0cb382]\n  - @clack/core@0.0.10\n\n## 0.0.2\n\n### Patch Changes\n\n- Updated dependencies\n  - @clack/core@0.0.9\n\n## 0.0.1\n\n### Patch Changes\n\n- a4b5e13: Initial release\n- Updated dependencies [a4b5e13]\n  - @clack/core@0.0.8\n\n<!-- File: packages/prompts/package.json (Tokens: ~506 | Category: anthropic-skill) -->\n{\n  \"name\": \"@clack/prompts\",\n  \"version\": \"1.8.1\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.mjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.mts\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"types\": \"./dist/index.d.mts\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/bombshell-dev/clack.git\",\n    \"directory\": \"packages/prompts\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/bombshell-dev/clack/issues\"\n  },\n  \"homepage\": \"https://github.com/bombshell-dev/clack/tree/main/packages/prompts#readme\",\n  \"files\": [\n    \"dist\"\n  ],\n  \"author\": {\n    \"name\": \"Nate Moore\",\n    \"email\": \"nate@natemoo.re\",\n    \"url\": \"https://twitter.com/n_moore\"\n  },\n  \"license\": \"MIT\",\n  \"keywords\": [\n    \"ask\",\n    \"clack\",\n    \"cli\",\n    \"command-line\",\n    \"command\",\n    \"input\",\n    \"interact\",\n    \"interface\",\n    \"menu\",\n    \"prompt\",\n    \"prompts\",\n    \"stdin\",\n    \"ui\"\n  ],\n  \"packageManager\": \"pnpm@10.33.0\",\n  \"engines\": {\n    \"node\": \">= 20.12.0\"\n  },\n  \"scripts\": {\n    \"build\": \"unbuild\",\n    \"prepack\": \"pnpm build\",\n    \"test\": \"vitest run\"\n  },\n  \"dependencies\": {\n    \"@clack/core\": \"workspace:*\",\n    \"fast-string-width\": \"^3.0.2\",\n    \"fast-wrap-ansi\": \"^0.2.0\",\n    \"sisteransi\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"is-unicode-supported\": \"^1.3.0\",\n    \"memfs\": \"^4.17.2\",\n    \"vitest\": \"^3.2.4\",\n    \"vitest-ansi-serializer\": \"^0.1.2\"\n  }\n}\n\n<!-- File: packages/prompts/tsconfig.json (Tokens: ~21 | Category: anthropic-skill) -->\n{\n  \"extends\": \"../../tsconfig.json\",\n  \"include\": [\"src\", \"test\"]\n}\n\n<!-- File: packages/core/README.md (Tokens: ~129 | Category: plugin-manifest) -->\n# `@clack/core`\n\nClack contains low-level primitives for implementing your own command-line applications.\n\nCurrently, `TextPrompt`, `SelectPrompt`, and `ConfirmPrompt` are exposed as well as the base `Prompt` class.\n\nEach `Prompt` accepts a `render` function.\n\n```js\nimport { TextPrompt, isCancel } from '@clack/core';\n\nconst p = new TextPrompt({\n  render() {\n    return `What's your name?\\n${this.userInputWithCursor}`;\n  },\n});\n\nconst name = await p.prompt();\nif (isCancel(name)) {\n  process.exit(0);\n}\n```\n\n<!-- File: packages/prompts/README.md (Tokens: ~2568 | Category: plugin-manifest) -->\n# `@clack/prompts`\n\nEffortlessly build beautiful command-line apps 🪄 [Try the demo](https://stackblitz.com/edit/clack-prompts?file=index.js)\n\n![clack-prompt](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-demo.gif)\n\n---\n\n`@clack/prompts` is an opinionated, pre-styled wrapper around [`@clack/core`](https://www.npmjs.com/package/@clack/core).\n\n- 🤏 80% smaller than other options\n- 💎 Beautiful, minimal UI\n- ✅ Simple API\n- 🧱 Comes with `text`, `password`, `confirm`, `date`, `select`, `autocomplete`, `selectKey`, `multiselect`, `path`, and `spinner` components\n\n## Basics\n\n### Setup\n\nThe `intro` and `outro` functions will print a message to begin or end a prompt session, respectively.\n\n```js\nimport { intro, outro } from '@clack/prompts';\n\nintro(`create-my-app`);\n// Do stuff\noutro(`You're all set!`);\n```\n\n### Cancellation\n\nThe `isCancel` function is a guard that detects when a user cancels a question with `CTRL + C`. You should handle this situation for each prompt, optionally providing a nice cancellation message with the `cancel` utility.\n\n```js\nimport { isCancel, cancel, text } from '@clack/prompts';\n\nconst value = await text({\n  message: 'What is the meaning of life?',\n});\n\nif (isCancel(value)) {\n  cancel('Operation cancelled.');\n  process.exit(0);\n}\n```\n\n## Components\n\n### Text\n\nThe text component accepts a single line of text.\n\n```js\nimport { text } from '@clack/prompts';\n\nconst meaning = await text({\n  message: 'What is the meaning of life?',\n  placeholder: 'Not sure',\n  initialValue: '42',\n  validate(value) {\n    if (value.length === 0) return `Value is required!`;\n  },\n});\n```\n\n### Password\n\nThe password prompt behaves like the [`text`](#text) prompt, but masks the input as the user types.\n\n```js\nimport { password } from '@clack/prompts';\n\nconst secret = await password({\n  message: 'Set a password.',\n  mask: '*',\n  validate(value) {\n    if (!value || value.length < 8) return 'Password must be at least 8 characters.';\n  },\n});\n```\n\n### Confirm\n\nThe `confirm` prompt accepts a yes or no choice, returning a boolean value corresponding to the user's selection.\n\n```js\nimport { confirm } from '@clack/prompts';\n\nconst shouldContinue = await confirm({\n  message: 'Do you want to continue?',\n});\n```\n\n### Date\n\nThe `date` prompt provides an interactive date picker, allowing users to navigate between year, month, and day segments and increment/decrement values using keyboard controls.\n\n```js\nimport { date } from '@clack/prompts';\n\nconst birthday = await date({\n  message: 'Pick your birthday',\n  minDate: new Date('1900-01-01'),\n  initialValue: new Date(),\n  maxDate: new Date(),\n});\n```\n\n### Select\n\nThe select component allows a user to choose one value from a list of options. The result is the `value` prop of a given option.\n\n```js\nimport { select } from '@clack/prompts';\n\nconst projectType = await select({\n  message: 'Pick a project type.',\n  options: [\n    { value: 'ts', label: 'TypeScript' },\n    { value: 'js', label: 'JavaScript', disabled: true },\n    { value: 'coffee', label: 'CoffeeScript', hint: 'oh no' },\n  ],\n});\n```\n\n### Autocomplete\n\nThe `autocomplete` prompt combines text input with a searchable list of options. It's perfect for when you have a large list of options and want to help users find what they're looking for quickly.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Pick a framework.',\n  placeholder: 'Type to search...',\n  options: [\n    { value: 'next', label: 'Next.js' },\n    { value: 'nuxt', label: 'Nuxt' },\n    { value: 'sveltekit', label: 'SvelteKit' },\n    { value: 'remix', label: 'Remix' },\n  ],\n});\n```\n\n### Autocomplete Multi-Select\n\nThe `autocompleteMultiselect` prompt combines the search functionality of [autocomplete](#autocomplete) with the ability to select multiple options.\n\n```js\nimport { autocomplete } from '@clack/prompts';\n\nconst framework = await autocomplete({\n  message: 'Search for a framework',\n  options: [\n    { value: 'next', label: 'Next.js', hint: 'React framework' },\n    { value: 'astro', label: 'Astro', hint: 'Content-focused' },\n    { value: 'svelte', label: 'SvelteKit', hint: 'Compile-time framework' },\n    { value: 'remix', label: 'Remix', hint: 'Full stack framework' },\n    { value: 'nuxt', label: 'Nuxt', hint: 'Vue framework' },\n  ],\n  placeholder: 'Type to search...',\n  maxItems: 5,\n});\n```\n\n### Select Key\n\nThe `selectKey` component lets a user choose an option by pressing its single-character string `value` key directly.\n\n```js\nimport { selectKey } from '@clack/prompts';\n\nconst action = await selectKey({\n  message: 'Pick an action.',\n  options: [\n    { value: 'd', label: 'Deploy' },\n    { value: 't', label: 'Run tests' },\n    { value: 'q', label: 'Quit' },\n  ],\n});\n```\n\n### Multi-Select\n\nThe `multiselect` component allows a user to choose many values from a list of options. The result is an array with all selected `value` props.\n\n```js\nimport { multiselect } from '@clack/prompts';\n\nconst additionalTools = await multiselect({\n  message: 'Select additional tools.',\n  options: [\n    { value: 'eslint', label: 'ESLint', hint: 'recommended' },\n    { value: 'prettier', label: 'Prettier', disabled: true },\n    { value: 'gh-action', label: 'GitHub Action' },\n  ],\n  required: false,\n});\n```\n\nIt is also possible to select multiple items arranged into hierarchy by using `groupMultiselect`:\n\n```js\nimport { groupMultiselect } from '@clack/prompts';\n\nconst basket = await groupMultiselect({\n  message: 'Select your favorite fruits and vegetables:',\n  options: {\n    fruits: [\n      { value: 'apple', label: 'apple' },\n      { value: 'banana', label: 'banana' },\n      { value: 'cherry', label: 'cherry' },\n    ],\n    vegetables: [\n      { value: 'carrot', label: 'carrot' },\n      { value: 'spinach', label: 'spinach' },\n      { value: 'potato', label: 'potato' },\n    ]\n  }\n});\n```\n\n### Multi-Line Text\n\nThe multi-line prompt accepts multiple lines of text input. By default, pressing `Enter` twice submits the input.\n\n```js\nimport { multiline } from '@clack/prompts';\n\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  placeholder: 'Start typing...',\n  validate(value) {\n    if (value.length === 0) return `value is required`;\n  },\n});\n```\n\nSet `showSubmit` to display an explicit submit button instead of double `Enter` submission:\n\n```js\nconst bio = await multiline({\n  message: 'Tell us about yourself.',\n  showSubmit: true,\n});\n```\n\n### Path\n\nThe `path` prompt extends [`autocomplete`](#autocomplete) to provide file and directory suggestions.\n\n```js\nimport { path } from '@clack/prompts';\n\nconst targetDir = await path({\n  message: 'Select an existing directory.',\n  directory: true,\n});\n```\n\n### Spinner\n\nThe spinner component surfaces a pending action, such as a long-running download or dependency installation.\n\n```js\nimport { spinner } from '@clack/prompts';\n\nconst s = spinner();\ns.start('Installing via npm');\n// Do installation here\ns.stop('Installed via npm');\n```\n\n### Progress\n\nThe progress component extends the spinner component to add a progress bar to visualize the progression of an action.\n\n```js\nimport { progress } from '@clack/prompts';\n\nconst p = progress({ max: 10 });\np.start('Downloading archive');\n// Do download here\np.advance(3, 'Downloading (30%)');\n// ...\np.advance(5, 'Downloading (80%)');\n// ...\np.stop('Archive downloaded');\n```\n\n## Utilities\n\n### Grouping\n\nGrouping prompts together is a great way to keep your code organized. This accepts a JSON object with a name that can be used to reference the group later. The second argument is an optional but has a `onCancel` callback that will be called if the user cancels one of the prompts in the group.\n\n```js\nimport * as p from '@clack/prompts';\n\nconst group = await p.group(\n  {\n    name: () => p.text({ message: 'What is your name?' }),\n    age: () => p.text({ message: 'What is your age?' }),\n    color: ({ results }) =>\n      p.multiselect({\n        message: `What is your favorite color ${results.name}?`,\n        options: [\n          { value: 'red', label: 'Red' },\n          { value: 'green', label: 'Green' },\n          { value: 'blue', label: 'Blue' },\n        ],\n      }),\n  },\n  {\n    // On Cancel callback that wraps the group\n    // So if the user cancels one of the prompts in the group this function will be called\n    onCancel: ({ results }) => {\n      p.cancel('Operation cancelled.');\n      process.exit(0);\n    },\n  }\n);\n\nconsole.log(group.name, group.age, group.color);\n```\n\n### Tasks\n\nExecute multiple tasks in spinners.\n\n```js\nimport { tasks } from '@clack/prompts';\n\nawait tasks([\n  {\n    title: 'Installing via npm',\n    task: async (message) => {\n      // Do installation here\n      return 'Installed via npm';\n    },\n  },\n]);\n```\n\n### Logs\n\n```js\nimport { log } from '@clack/prompts';\n\nlog.info('Info!');\nlog.success('Success!');\nlog.step('Step!');\nlog.warn('Warn!');\nlog.error('Error!');\nlog.message('Hello, World', { symbol: color.cyan('~') });\n```\n\n\n### Stream\n\nWhen interacting with dynamic LLMs or other streaming message providers, use the `stream` APIs to log messages from an iterable, even an async one.\n\n```js\nimport { stream } from '@clack/prompts';\n\nstream.info((function *() { yield 'Info!'; })());\nstream.success((function *() { yield 'Success!'; })());\nstream.step((function *() { yield 'Step!'; })());\nstream.warn((function *() { yield 'Warn!'; })());\nstream.error((function *() { yield 'Error!'; })());\nstream.message((function *() { yield 'Hello'; yield \", World\" })(), { symbol: color.cyan('~') });\n```\n\n![clack-log-prompts](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-logs.png)\n\n### Task Log\n\nWhen executing a sub-process or a similar sub-task, `taskLog` can be used to render the output continuously and clear it at the end if it was successful.\n\n```js\nimport { taskLog } from '@clack/prompts';\n\nconst log = taskLog({\n\ttitle: 'Running npm install'\n});\n\nfor await (const line of npmInstall()) {\n\tlog.message(line);\n}\n\nif (success) {\n\tlog.success('Done!');\n} else {\n\tlog.error('Failed!');\n}\n```\n</yakaai_skills>"}