open-index/open-npm huggingface dataset:
npm package: @fivexlabs/fivui
Description: DEPRECATED: FivUI is retired. Use FivFold instead — https://fold.fivexlabs.com/
Author: Fivex Labs
Latest version: 4.0.0

# FivUI (Deprecated)

> **This package is deprecated and no longer maintained.**

FivUI has been retired in favor of **FivFold**, the modern full-stack scaffolding platform by Fivex Labs.

Please migrate to FivFold: [https://fold.fivexlabs.com/](https://fold.fivexlabs.com/)

Running `fivui` (or `npx @fivexlabs/fivui`) will print a deprecation error and exit with a non-zero code.

## License

Licensed under the [MIT license](https://github.com/Fivex-Labs/fivui/blob/main/LICENSE).
npm package: @fix-fix/opencode-plugin-nono
Description: OpenCode plugin integrating nono sandbox context and guidance
Latest version: 0.1.3

# opencode-plugin-nono

OpenCode plugin that integrates [nono](https://nono.sh) sandbox context and guidance into your AI agent sessions. This is the OpenCode equivalent of the [built-in Claude Code hook](https://github.com/always-further/nono/blob/main/crates/nono-cli/data/hooks/nono-hook.sh) that nono provides for Claude.

## What it does

With this plugin, when you run OpenCode inside the nono sandbox:

1. **Knows your sandbox limits** - The agent sees which paths are allowed and whether network access is blocked
2. **Gets clear guidance on denials** - When a tool fails due to sandbox restrictions, the agent is told immediately that it's a hard boundary and how to fix it (restart with `--allow`)
3. **Stops wasting time on workarounds** - No more trying alternative paths, copying files, or suggesting manual steps. The agent tells you to restart nono with the needed permissions

## Quick Start

Add to your `opencode.json`:

```json
{
  "plugins": ["@fix-fix/opencode-plugin-nono@latest"]
}
```

Run OpenCode inside nono:

```bash
nono run --profile -- opencode
```

Then on encountering an access error the agent won't try to work around it
and instead will suggest a solution:

```bash
nono run --profile -- opencode 'Show the content of ~/.env file'

✗ read failed
Error: EACCES: permission denied, open '/home/username/.env'

The `~/.env` file is not accessible in the current nono sandbox session due to permission restrictions. The sandbox only allows access to specific directories in your home folder, and `~/.env` is not among them.

**To access this file, you would need to exit and restart the session with:**
nono run --allow ~/.env -- opencode
```

## Requirements

- [nono](https://nono.sh)

The plugin detects automatically when running under nono (via `$NONO_CAP_FILE`).
If not running under nono, it does nothing.

## Supported tools

Denial detection works for: `bash`, `read`, `write`, `edit`, `patch`, `glob`, `grep`, `list`.

## License

MIT
npm package: @fix-the-world/utils
Description: 通用前端工具包，包含请求,正则校验,全局ts声明等
Author: fix-the-world
Latest version: 0.2.4

# @fix-the-world/utils

简称ftw，ts前端工具包，包含常用css类以及ts工具方法等。

## 1.安装

```bash
pnpm i @fix-the-world/utils
// 或
yarn add @fix-the-world/utils
```

## 2.使用

### vue项目使用

main.ts文件中：

```ts
import { createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue'
import '@fix-the-world/utils/dist/styles/index.scss'// 引入全局样式文件

const app = createApp(App)
app.use(router)
app.mount('#app')
app.use(ftw, { storage: { prefix: 'my' } })
```

之后可以在ts文件和vue中使用bem，utils等工具方法，比如

```html
<template>
  <h1 :class="[css.bm('color', 'red')]">132</h1>
</template>
<script>
  console.log('aes:', utils.aes.encrypt('test'))
</script>

```

### ts支持

在项目的tsconfig.json中将@fix-the-world/utils相关ts声明文件加入到types中，这样可以在ts中获得类型提示

```json
{
  "compilerOptions": {
    "types": ["@fix-the-world/utils/dist/types/index", "@fix-the-world/utils/dist/types/global"]
  }
}
```

### vite配置

在vite中配置autoImport后，会将ftw的相关方法注入到ts和vue文件中

```ts
import vite from '@fix-the-world/utils/dist/vite'
import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'vite'

// https://vite.dev/config/
export default defineConfig({
  plugins: [vue(), vite.autoImport()],
  css: {
    preprocessorOptions: {
      // 引入通用的全局mixin和变量
      scss: vite.scss(),
    },
  },
})
```

### 主题修改，自定义scss变量

1.新建一个scss文件，比如src/styles/index.scss，内容如下：

```scss
@forward '@fix-the-world/utils/dist/styles/reference/config.scss' with (
  $colors: (
    'red': blue,
    //你的自定义变量
  )
);
@forward '@fix-the-world/utils/dist/styles/reference/index.scss';

```

2.修改vite中全局变量以及mixins的引用

```ts
{
  css: {
    // https://vitejs.dev/config/shared-options.html#css-preprocessoroptions
    preprocessorOptions: {
      scss: {
        additionalData: '@use "@/styles/index.scss" as *;'
      }
    }
  }
}
```

## 3.工具列表

[bem](./dist/ts/bem.d.ts)
[reg](./dist/ts/reg.d.ts)
[request](./dist/ts/request.d.ts)
[validators](./dist/ts/validators.d.ts)
[utils](./dist/ts/utils.d.ts)

[通用样式大全](./dist/styles/index.css)
npm package: @fix-the-world/vue-utils
Description: 适用于vue3的前端工具包，包含常用css类以及ts工具方法等
Author: fix-the-world
Latest version: 0.0.9

# @fix-the-world/vue-utils
vue3的前端工具包，包含常用css类以及ts工具方法等。

## 安装
```bash
pnpm i @fix-the-world/vue-utils
// 或
yarn add @fix-the-world/vue-utils
```
## 使用
1. vue项目的main.ts中
```ts
import vueUtils from '@fix-the-world/vue-utils';
import '@fix-the-world/vue-utils/dist/index.css';

app.use(vueUtils);
```

2. vue组件中使用
```vue
<template>
  <div :class="[css.bm('color','red')]">
    hello world
  </div>
</template>
<script setup lang="ts">
import { utils } from '@fix-the-world/vue-utils';
const encryptStr=utils.aes.encrypt('hello world','encryptKey');
console.log('encryptStr',encryptStr);
</script>
```

## 样式列表
请查看[dist/index.css](./dist/index.css)


## TODO
- [x] 用户环境中的css变量的ts支持
- [ ] 全局的utils方法，不需要import
- [ ] 用户可重写css的相关变量
- [ ] 用户可调用相关sass变量和mixin
- [ ] 二次封装的组件库
npm package: @fix-webm-duration/fix
Description: navigator.mediaDevices.getUserMedia + MediaRecorder create WEBM files without duration metadata. This library appends missing metadata section right to the file blob.
Author: Yuri Sitnikov
Latest version: 1.0.1

# @fix-webm-duration/fix

`navigator.mediaDevices.getUserMedia` + `MediaRecorder` create WEBM files without duration metadata.

This library appends missing metadata section right to the file blob.

## Installation

Install from a package manager:

```
npm install @fix-webm-duration/fix
```

Then, the library could be imported:

```typescript
import { fixWebmDuration } from "@fix-webm-duration/fix";
```

## Usage

Syntax:

```typescript
const newBlob = await fixWebmDuration(blob, duration, options = {});
```

where

- `blob` is `Blob` object with file contents from `MediaRecorder`
- `duration` is video duration in milliseconds (you should calculate it while recording the video)
- `options` is an object of options:
    - `options.logger` - a callback for logging debug messages or `false`.
      The callback should accept one argument - the message string.
      By default, `console.debug` will be used for logging.
      Passing `false` will disable the logging.

`fixWebmDuration` will parse and fix your file asynchronously and return the fixed blob once the result is ready.

If the original blob already contains duration metadata section and the duration value is not empty, the callback will receive it without any changes made.

Example:

```typescript
let mediaRecorder;
let mediaParts;
let startTime;

function startRecording(stream: MediaStream, options: MediaRecorderOptions) {
    mediaParts = [];
    mediaRecorder = new MediaRecorder(stream, options);
    mediaRecorder.onstop = async () => {
        const duration = Date.now() - startTime;
        const buggyBlob = new Blob(mediaParts, { type: "video/webm" });

        const fixedBlob = await fixWebmDuration(buggyBlob, duration)
        displayResult(fixedBlob);
    };
    mediaRecorder.ondataavailable = (event) => {
        var data = event.data;
        if (data && data.size > 0) {
            mediaParts.push(data);
        }
    };
    mediaRecorder.start();
    startTime = Date.now();
}

function stopRecording() {
    mediaRecorder.stop();
}

function displayResult(blob: Blob) {
    // ...
}
```

Note: this example **is not** a `MediaRecorder` usage guide.
npm package: @fix-webm-duration/parser
Description: Parse webm files into individual sections, edit the sections, and compile the file from edited sections back together
Author: Yuri Sitnikov
Latest version: 1.0.1

# @fix-webm-duration/parser

Parse webm files into individual sections, edit the sections,
and compile the file from edited sections back together.

**Warning: it's an internal implementation package, the interfaces here can change at any moment!**
**Please don't use it directly in production code, only for debugging contents of webm files while developing!**

## Installation

Install from a package manager:

```
npm install @fix-webm-duration/parser
```

## Usage

### Parse a blob:

```typescript
import { WebmFile } from "@fix-webm-duration/parser";

const file = await WebmFile.fromBlob(blob);
```

It will return an instance of `WebmFile`, which is a tree of sections with IDs.
`WebmFile` and `WebmContainer` are containers for other sections,
while all other classes of webm nodes (`WebmUint`, `WebmFloat`, `WebmString`) are the final leaves of the tree.
`WebmBase` is the base node class that is uses for nodes with unrecognized IDs
(the map of webm nodes in the library is not full, it's only a set of nodes required to fix webm duration).

### Traverse nodes:

The `data` field of a parsed `WebmContainer` (or `WebmFile`) object
contains a list of child nodes (which could be leaves or other sections).

Use the `getSectionById` method to get a direct child section by ID, e.g.

```typescript
const segmentSection: WebmContainer | null = file.getSectionById(0x8538067);
```

Section IDs could be found in the [sections.ts file](./src/lib/sections.ts).

### Modify nodes

Use the `setValue` method to modify the value of nodes, e.g.

```typescript
const durationSection = infoSection.getSectionById(0x489);
if (!durationSection) throw new Error("Duration section not found");
durationSection.setValue(60000);
```

Access regular array method for the `data` field to add or remove child nodes for a sections, e.g.

```typescript
const durationSection = new WebmFloat("Duration");
durationSection.setValue(duration);
infoSection.data!.push({
    id: 0x489,
    data: durationSection,
});
```

### Compile modified file back to blob

Call `updateByData` method of all modified `WebmContainer` and `WebmFile` objects in the reverse order,
i.e. starting from the most nested nodes, and ending with the `WebmFile` object.

Call the `toBlob` method of the file to convert the parsed file to blob.
Pass MIME type to it if it's not default, e.g. `file.toBlob("audio/webm")`.
npm package: @fix-webm-duration/react-viewer
Description: React component for viewing parsed webm files and nodes as a tree
Author: Yuri Sitnikov
Latest version: 1.1.1

# fix-webm-duration

`navigator.mediaDevices.getUserMedia` + `MediaRecorder` create WEBM files without duration metadata.

This library appends missing metadata section right to the file blob.

## Installation

Install from a package manager:

```
npm install @fix-webm-duration/fix
```

Then, the library could be imported:

```typescript
import { fixWebmDuration } from "@fix-webm-duration/fix";
```

## Usage

Syntax:

```typescript
const newBlob = await fixWebmDuration(blob, duration, options = {});
```

where

- `blob` is `Blob` object with file contents from `MediaRecorder`
- `duration` is video duration in milliseconds (you should calculate it while recording the video)
- `options` is an object of options:
    - `options.logger` - a callback for logging debug messages or `false`.
      The callback should accept one argument - the message string.
      By default, `console.debug` will be used for logging.
      Passing `false` will disable the logging.

`fixWebmDuration` will parse and fix your file asynchronously and return the fixed blob once the result is ready.

If the original blob already contains duration metadata section and the duration value is not empty, the callback will receive it without any changes made.

Example:

```typescript
let mediaRecorder;
let mediaParts;
let startTime;

function startRecording(stream: MediaStream, options: MediaRecorderOptions) {
    mediaParts = [];
    mediaRecorder = new MediaRecorder(stream, options);
    mediaRecorder.onstop = async () => {
        const duration = Date.now() - startTime;
        const buggyBlob = new Blob(mediaParts, { type: "video/webm" });

        const fixedBlob = await fixWebmDuration(buggyBlob, duration)
        displayResult(fixedBlob);
    };
    mediaRecorder.ondataavailable = (event) => {
        var data = event.data;
        if (data && data.size > 0) {
            mediaParts.push(data);
        }
    };
    mediaRecorder.start();
    startTime = Date.now();
}

function stopRecording() {
    mediaRecorder.stop();
}

function displayResult(blob: Blob) {
    // ...
}
```

Note: this example **is not** a `MediaRecorder` usage guide.