본문으로 건너뛰기

매니페스트 참조

모든 미니 프로그램, 애드온, 플러그인은 확장 프로그램의 메타데이터, 권한, 진입점을 설명하는 manifest.json 파일이 필요합니다. 매니페스트는 Manifest v2 스키마를 따릅니다.

최소 예시

미니 프로그램을 위한 가장 간단한 유효한 매니페스트:

{
"name": "my-app",
"version": "1.0.0",
"abi": 1,
"type": "mini-program",
"entry": "index.html",
"base_url": "https://cdn.example.com/my-app/"
}

전체 예시

일반적으로 사용되는 모든 필드가 포함된 완전한 매니페스트:

{
"name": "word-counter",
"version": "1.2.0",
"abi": 1,
"type": "mini-program",
"title": "Word Counter",
"description": "Count words in your chat history by role and visualize trends",
"icon": "https://cdn.example.com/word-counter/icon.png",
"author": {
"name": "Jane Developer",
"url": "https://janedev.com"
},
"entry": "index.html",
"base_url": "https://cdn.example.com/word-counter/",
"permissions": ["storage", "chat:read", "ui:toast"],
"keywords": ["statistics", "utility", "word-count"],
"license": "MIT",
"repository": "https://github.com/janedev/word-counter",
"min_platform_version": "1.0.0"
}

필드 참조

필수 필드

name

고유 패키지 이름. 저장소 격리, 설치 확인, 레지스트리 조회를 위한 내부 식별자로 사용됩니다.

속성
타입string
패턴^[a-z0-9-]+$ (소문자, 숫자, 하이픈만)
최대 길이64자
필수
"name": "word-counter"
주의

이름은 레지스트리 내에서 전역적으로 고유해야 합니다. 설명적인 이름을 선택하세요. 게시 후에는 새 패키지 항목을 만들지 않고는 변경할 수 없습니다.

version

시맨틱 버전 문자열. semver 형식을 따라야 합니다.

속성
타입string
패턴^\d+\.\d+\.\d+ (major.minor.patch, 선택적 프리릴리스)
필수
"version": "1.0.0"

레지스트리에서 앱을 업데이트할 때 매니페스트와 registry/packages.json 항목 모두에서 버전을 올리세요.

강력히 권장되는 필드

abi

이 매니페스트가 대상으로 하는 ABI(Application Binary Interface) 버전. 현재 플랫폼에서는 1이어야 합니다.

속성
타입integer
상수1
필수기술적으로 선택사항이지만 강력히 권장됨
"abi": 1

플랫폼은 1이 아닌 abi 값을 가진 매니페스트를 거부합니다. 생략하면 플랫폼은 ABI 1을 가정하지만 전방 호환성을 위해 명시적 선언이 권장됩니다.

type

확장 프로그램 타입. 런타임 환경과 사용 가능한 기능을 결정합니다.

속성
타입string
Enum"plugin", "addon", "mini-program"
기본값"plugin"
"type": "mini-program"
타입런타임UI 표면요구사항
pluginWASM (커널 슬롯 4-7)없음 (훅만)wasm + wasm_sha256
addonWASM 또는 JS명명된 UI 슬롯wasm 또는 entry
mini-program샌드박스 iframe (null origin)전체 패널 (채팅 대체)entry + base_url

entry

진입 HTML 파일의 경로. base_url에 상대적입니다.

속성
타입string
필수미니 프로그램과 HTML 애드온에 필수
"entry": "index.html"

플랫폼은 설치 시점에 {base_url}{entry}를 가져와 오프라인 사용을 위해 HTML을 캐시합니다.

base_url

진입 파일과 상대 에셋 경로(이미지, 스크립트, 스타일시트)를 해결하기 위한 기본 URL.

속성
타입string (URI)
필수미니 프로그램에 필수
"base_url": "https://cdn.example.com/word-counter/"

HTML의 상대 경로가 올바르게 해결되도록 <base href="{base_url}"> 태그가 iframe에 주입됩니다.

정보

파일 업로드에서 설치된 .ais 번들의 경우 모든 에셋이 인라인되므로 base_url은 자동으로 local://로 설정됩니다.

선택적 메타데이터 필드

title

앱 스토어와 권한 대화상자에 표시되는 사람이 읽을 수 있는 표시 이름. 생략하면 name이 사용됩니다.

속성
타입string
"title": "Word Counter"

description

스토어 목록 및 권한 대화상자를 위한 짧은 설명.

속성
타입string
최대 길이256자
"description": "Count words in your chat history by role and visualize trends"

icon

정사각형 아이콘 이미지 URL. 권장 크기: 128x128 PNG. 앱 그리드와 스토어 목록에 표시됩니다.

속성
타입string (URI)
"icon": "https://cdn.example.com/word-counter/icon.png"

플랫폼의 다크 테마에 맞게 투명 또는 어두운 배경의 128x128 픽셀 정사각형 PNG를 사용하세요. SVG도 허용됩니다.

author

작성자 정보.

속성
타입object
속성name (문자열, 최대 100), url (문자열, URI)
"author": {
"name": "Jane Developer",
"url": "https://janedev.com"
}

license

SPDX 라이선스 식별자.

속성
타입string
"license": "MIT"

repository

소스 저장소 URL.

속성
타입string (URI)
"repository": "https://github.com/janedev/word-counter"

keywords

앱 스토어에서 검색 가능성을 위한 키워드.

속성
타입string[]
최대 항목10
키워드당 최대32자
"keywords": ["statistics", "utility", "word-count"]

min_platform_version

이 확장 프로그램을 실행하는 데 필요한 최소 AISCouncil 플랫폼 버전.

속성
타입string (semver)
"min_platform_version": "1.0.0"

권한

permissions

확장 프로그램이 요청하는 권한 문자열 배열. 사용자가 설치 시점에 승인해야 합니다.

속성
타입string[]
고유 항목
"permissions": ["storage", "chat:read", "ui:toast"]

사용 가능한 권한

권한설명자동 승인?
storage앱별 격리된 키-값 저장소예 (항상 허용)
chat:read채팅 기록 읽기 및 새 메시지 구독아니오
chat:write사용자로서 메시지 보내기 (AI 응답 트리거)아니오
config:read활성 봇 설정 읽기 (제공자, 모델, 시스템 프롬프트)아니오
config:write활성 봇 설정 수정아니오
auth:read사용자 정보 읽기 (이름, 이메일, 프로필 사진) 및 구독 등급아니오
ui:toast플랫폼 UI에 토스트 알림 표시아니오
ui:modal확인 대화상자 표시아니오
hooks:action훅 이벤트 등록 및 발생아니오
hooks:filter필터 훅 등록아니오
network:fetch플랫폼을 통한 프록시 네트워크 요청 (향후)아니오
secrets:sync기기 간 전송을 위한 API 키 읽기 및 쓰기아니오
pages:publishbcz.co에 웹 페이지 게시아니오
경고

앱에 실제로 필요한 권한만 요청하세요. 추가 권한은 설치 장벽을 높입니다. 권한이 적은 앱일수록 사용자가 승인할 가능성이 높습니다.

플러그인 전용 필드

이 필드는 미니 프로그램이 아닌 플러그인과 WASM 애드온에서 사용됩니다.

wasm

WASM 바이너리 URL.

속성
타입string (URI)
필수플러그인의 경우
"wasm": "https://cdn.example.com/my-plugin/plugin.wasm"

wasm_sha256

무결성 검증을 위한 WASM 바이너리의 SHA-256 16진수 다이제스트.

속성
타입string
패턴^[0-9a-f]{64}$
필수플러그인의 경우
"wasm_sha256": "a1b2c3d4e5f6..."

segment_size

WASM 모듈 메모리 세그먼트 크기 (바이트).

속성
타입integer
최소0
"segment_size": 4194304

고급 필드

pages

다중 페이지 미니 프로그램을 위한 추가 페이지 경로.

속성
타입string[]
"pages": ["settings.html", "about.html"]

hooks

플러그인과 애드온을 위한 훅 등록. 각 훅에는 이름과 선택적 우선순위가 있습니다.

속성
타입object[]
"hooks": [
{ "name": "chat:before-send", "priority": 50 },
{ "name": "message:filter", "priority": 100 }
]

훅 이름은 ^[a-z][a-z0-9_.:-]*$와 일치해야 하며 최대 128자여야 합니다. 우선순위는 0(가장 빠름)에서 999(가장 늦음)까지이며 기본값은 100입니다.

settings

플랫폼 설정 UI에 표시되는 사용자 구성 가능 설정.

속성
타입object (키는 설정 이름, 값은 설정 정의)
"settings": {
"theme": {
"type": "select",
"label": "색상 테마",
"default": "dark",
"options": [
{ "value": "dark", "label": "다크" },
{ "value": "light", "label": "라이트" }
]
},
"maxMessages": {
"type": "number",
"label": "분석할 최대 메시지 수",
"default": 500,
"description": "로드되는 채팅 메시지 수 제한"
},
"autoRefresh": {
"type": "boolean",
"label": "열 때 자동 새로고침",
"default": true
}
}

설정 타입: string, number, boolean, select.

mcp_tools

이 확장 프로그램이 제공하는 MCP(Model Context Protocol) 도구 선언.

속성
타입object[]
"mcp_tools": [
{
"name": "count-words",
"description": "주어진 텍스트의 단어 수 세기",
"inputSchema": {
"type": "object",
"properties": {
"text": { "type": "string" }
},
"required": ["text"]
}
}
]

타입별 요구사항

필드플러그인애드온미니 프로그램
name필수필수필수
version필수필수필수
type"plugin""addon""mini-program"
wasm필수entry 없으면 필수사용 안 함
wasm_sha256필수wasm 사용 시 필수사용 안 함
entry사용 안 함wasm 없으면 필수필수
base_url사용 안 함선택필수

검증

게시 전에 내장 검증 스크립트로 매니페스트를 확인하세요:

# 단일 매니페스트 파일 검증
python3 registry/validate.py manifest path/to/manifest.json

검증기는 다음을 확인합니다:

  • 필수 필드 존재
  • name^[a-z0-9-]+$ 패턴과 일치하고 최대 64자
  • version이 유효한 semver
  • abi1 (존재하는 경우)
  • typeplugin, addon, mini-program 중 하나
  • 권한이 허용된 집합에서
  • 타입별 필수 필드 존재 (예: 미니 프로그램의 entry)
  • 알 수 없는 필드 없음 (스키마는 additionalProperties: false로 엄격)

JSON 스키마는 registry/manifest-schema.json에 게시되어 있습니다. IDE 통합이나 CI 파이프라인을 위해 모든 JSON 스키마 검증기와 함께 사용할 수 있습니다.


스키마 참조

매니페스트 스키마는 JSON Schema (Draft 2020-12)로 정의되어 있으며 다음에서 사용할 수 있습니다:

https://aiscouncil.net/schema/manifest/v2

에디터 자동완성을 위해 매니페스트에서 참조하세요:

{
"$schema": "https://aiscouncil.net/schema/manifest/v2",
"name": "my-app",
"version": "1.0.0"
}

대부분의 에디터(VS Code, JetBrains 등)는 $schema 필드가 있을 때 자동완성과 검증을 제공합니다.