[Claude Code Desktop 자동 설치 환경]
- setup/CLAUDE.md: 트리거 키워드 + 설치 패키지 설명
- setup/.claude/skills/guardia-install/SKILL.md: 6단계 설치 오케스트레이터
Phase 0: 의도 파악 → Phase 1: OS 감지 → Phase 2: 사전 확인
Phase 3: 설치 실행 → Phase 4: 라이선스 발급 → Phase 5: 검증 → Phase 6: 완료보고
[통합 자동 설치 스크립트]
- setup/install_auto.sh: Linux 통합 (OS 자동 감지 ubuntu/centos/rhel)
- --license trial30|trial7|<key> 파라미터
- 설치 완료 후 GUARDiA 자동 실행 + 브라우저 자동 열기
- --test 검증 모드
- setup/install_auto.ps1: Windows 통합 (ASCII 전용, PS 5.1 호환)
- 설치 후 NSSM 서비스 자동 시작 + 브라우저 자동 열기
- -Test 파라미터로 검증 전용 실행
[라이선스 엔진 개선]
- core/license.py: generate_trial_key(days=None) 파라미터 추가
- TRIAL_DURATION_DAYS = TRIAL_DURATION_DAYS 환경변수로 조정 가능
- routers/license.py: TrialRequest.days 필드 + 30일 체험판 지원
POST /api/license/trial {"days": 30} 로 30일 발급
사용자 경험:
1. setup/ 폴더를 새 PC에 복사
2. Claude Code Desktop 열고 해당 폴더 open
3. "GUARDiA 시스템 1달 사용자로 설치해 줘" 입력
4. 자동으로 OS 감지 → 설치 → 30일 라이선스 → 브라우저 열림
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
205 lines
4.2 KiB
TypeScript
205 lines
4.2 KiB
TypeScript
import {
|
|
Document,
|
|
Node,
|
|
Plugin,
|
|
ProcessOptions,
|
|
Root,
|
|
SourceMap,
|
|
TransformCallback,
|
|
Warning,
|
|
WarningOptions
|
|
} from './postcss.js'
|
|
import Processor from './processor.js'
|
|
|
|
declare namespace Result {
|
|
export interface Message {
|
|
[others: string]: any
|
|
|
|
/**
|
|
* Source PostCSS plugin name.
|
|
*/
|
|
plugin?: string
|
|
|
|
/**
|
|
* Message type.
|
|
*/
|
|
type: string
|
|
}
|
|
|
|
export interface ResultOptions extends ProcessOptions {
|
|
/**
|
|
* The CSS node that was the source of the warning.
|
|
*/
|
|
node?: Node
|
|
|
|
/**
|
|
* Name of plugin that created this warning. `Result#warn` will fill it
|
|
* automatically with `Plugin#postcssPlugin` value.
|
|
*/
|
|
plugin?: string
|
|
}
|
|
|
|
export { Result_ as default }
|
|
}
|
|
|
|
/**
|
|
* Provides the result of the PostCSS transformations.
|
|
*
|
|
* A Result instance is returned by `LazyResult#then`
|
|
* or `Root#toResult` methods.
|
|
*
|
|
* ```js
|
|
* postcss([autoprefixer]).process(css).then(result => {
|
|
* console.log(result.css)
|
|
* })
|
|
* ```
|
|
*
|
|
* ```js
|
|
* const result2 = postcss.parse(css).toResult()
|
|
* ```
|
|
*/
|
|
declare class Result_<RootNode = Document | Root> {
|
|
/**
|
|
* A CSS string representing of `Result#root`.
|
|
*
|
|
* ```js
|
|
* postcss.parse('a{}').toResult().css //=> "a{}"
|
|
* ```
|
|
*/
|
|
css: string
|
|
|
|
/**
|
|
* Last runned PostCSS plugin.
|
|
*/
|
|
lastPlugin: Plugin | TransformCallback
|
|
|
|
/**
|
|
* An instance of `SourceMapGenerator` class from the `source-map` library,
|
|
* representing changes to the `Result#root` instance.
|
|
*
|
|
* ```js
|
|
* result.map.toJSON() //=> { version: 3, file: 'a.css', … }
|
|
* ```
|
|
*
|
|
* ```js
|
|
* if (result.map) {
|
|
* fs.writeFileSync(result.opts.to + '.map', result.map.toString())
|
|
* }
|
|
* ```
|
|
*/
|
|
map: SourceMap
|
|
|
|
/**
|
|
* Contains messages from plugins (e.g., warnings or custom messages).
|
|
* Each message should have type and plugin properties.
|
|
*
|
|
* ```js
|
|
* AtRule: {
|
|
* import: (atRule, { result }) {
|
|
* const importedFile = parseImport(atRule)
|
|
* result.messages.push({
|
|
* type: 'dependency',
|
|
* plugin: 'postcss-import',
|
|
* file: importedFile,
|
|
* parent: result.opts.from
|
|
* })
|
|
* }
|
|
* }
|
|
* ```
|
|
*/
|
|
messages: Result.Message[]
|
|
|
|
/**
|
|
* Options from the `Processor#process` or `Root#toResult` call
|
|
* that produced this Result instance.]
|
|
*
|
|
* ```js
|
|
* root.toResult(opts).opts === opts
|
|
* ```
|
|
*/
|
|
opts: Result.ResultOptions
|
|
|
|
/**
|
|
* The Processor instance used for this transformation.
|
|
*
|
|
* ```js
|
|
* for (const plugin of result.processor.plugins) {
|
|
* if (plugin.postcssPlugin === 'postcss-bad') {
|
|
* throw 'postcss-good is incompatible with postcss-bad'
|
|
* }
|
|
* })
|
|
* ```
|
|
*/
|
|
processor: Processor
|
|
|
|
/**
|
|
* Root node after all transformations.
|
|
*
|
|
* ```js
|
|
* root.toResult().root === root
|
|
* ```
|
|
*/
|
|
root: RootNode
|
|
|
|
/**
|
|
* An alias for the `Result#css` property.
|
|
* Use it with syntaxes that generate non-CSS output.
|
|
*
|
|
* ```js
|
|
* result.css === result.content
|
|
* ```
|
|
*/
|
|
get content(): string
|
|
|
|
/**
|
|
* @param processor Processor used for this transformation.
|
|
* @param root Root node after all transformations.
|
|
* @param opts Options from the `Processor#process` or `Root#toResult`.
|
|
*/
|
|
constructor(processor: Processor, root: RootNode, opts: Result.ResultOptions)
|
|
|
|
/**
|
|
* Returns for `Result#css` content.
|
|
*
|
|
* ```js
|
|
* result + '' === result.css
|
|
* ```
|
|
*
|
|
* @return String representing of `Result#root`.
|
|
*/
|
|
toString(): string
|
|
|
|
/**
|
|
* Creates an instance of `Warning` and adds it to `Result#messages`.
|
|
*
|
|
* ```js
|
|
* if (decl.important) {
|
|
* result.warn('Avoid !important', { node: decl, word: '!important' })
|
|
* }
|
|
* ```
|
|
*
|
|
* @param text Warning message.
|
|
* @param opts Warning options.
|
|
* @return Created warning.
|
|
*/
|
|
warn(message: string, options?: WarningOptions): Warning
|
|
|
|
/**
|
|
* Returns warnings from plugins. Filters `Warning` instances
|
|
* from `Result#messages`.
|
|
*
|
|
* ```js
|
|
* result.warnings().forEach(warn => {
|
|
* console.warn(warn.toString())
|
|
* })
|
|
* ```
|
|
*
|
|
* @return Warnings from plugins.
|
|
*/
|
|
warnings(): Warning[]
|
|
}
|
|
|
|
declare class Result<RootNode = Document | Root> extends Result_<RootNode> {}
|
|
|
|
export = Result
|