@clawplays/ospec-cli 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ospec/templates/hooks/post-merge +8 -0
- package/.ospec/templates/hooks/pre-commit +8 -0
- package/LICENSE +21 -0
- package/README.md +549 -0
- package/README.zh-CN.md +549 -0
- package/assets/for-ai/en-US/ai-guide.md +98 -0
- package/assets/for-ai/en-US/execution-protocol.md +64 -0
- package/assets/for-ai/zh-CN/ai-guide.md +102 -0
- package/assets/for-ai/zh-CN/execution-protocol.md +68 -0
- package/assets/git-hooks/post-merge +12 -0
- package/assets/git-hooks/pre-commit +12 -0
- package/assets/global-skills/claude/ospec-change/SKILL.md +116 -0
- package/assets/global-skills/codex/ospec-change/SKILL.md +117 -0
- package/assets/global-skills/codex/ospec-change/agents/openai.yaml +7 -0
- package/assets/global-skills/codex/ospec-change/skill.yaml +19 -0
- package/assets/project-conventions/en-US/development-guide.md +32 -0
- package/assets/project-conventions/en-US/naming-conventions.md +51 -0
- package/assets/project-conventions/en-US/skill-conventions.md +40 -0
- package/assets/project-conventions/en-US/workflow-conventions.md +70 -0
- package/assets/project-conventions/zh-CN/development-guide.md +32 -0
- package/assets/project-conventions/zh-CN/naming-conventions.md +51 -0
- package/assets/project-conventions/zh-CN/skill-conventions.md +40 -0
- package/assets/project-conventions/zh-CN/workflow-conventions.md +74 -0
- package/dist/adapters/codex-stitch-adapter.js +420 -0
- package/dist/adapters/gemini-stitch-adapter.js +408 -0
- package/dist/adapters/playwright-checkpoint-adapter.js +2260 -0
- package/dist/advanced/BatchOperations.d.ts +36 -0
- package/dist/advanced/BatchOperations.js +159 -0
- package/dist/advanced/CachingLayer.d.ts +66 -0
- package/dist/advanced/CachingLayer.js +136 -0
- package/dist/advanced/FeatureUpdater.d.ts +46 -0
- package/dist/advanced/FeatureUpdater.js +151 -0
- package/dist/advanced/PerformanceMonitor.d.ts +52 -0
- package/dist/advanced/PerformanceMonitor.js +129 -0
- package/dist/advanced/StatePersistence.d.ts +61 -0
- package/dist/advanced/StatePersistence.js +168 -0
- package/dist/advanced/index.d.ts +14 -0
- package/dist/advanced/index.js +22 -0
- package/dist/cli/commands/config.d.ts +5 -0
- package/dist/cli/commands/config.js +6 -0
- package/dist/cli/commands/feature.d.ts +5 -0
- package/dist/cli/commands/feature.js +6 -0
- package/dist/cli/commands/index.d.ts +5 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/project.d.ts +5 -0
- package/dist/cli/commands/project.js +6 -0
- package/dist/cli/commands/validate.d.ts +5 -0
- package/dist/cli/commands/validate.js +6 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +1007 -0
- package/dist/commands/ArchiveCommand.d.ts +14 -0
- package/dist/commands/ArchiveCommand.js +241 -0
- package/dist/commands/BaseCommand.d.ts +33 -0
- package/dist/commands/BaseCommand.js +46 -0
- package/dist/commands/BatchCommand.d.ts +5 -0
- package/dist/commands/BatchCommand.js +42 -0
- package/dist/commands/ChangesCommand.d.ts +3 -0
- package/dist/commands/ChangesCommand.js +71 -0
- package/dist/commands/DocsCommand.d.ts +5 -0
- package/dist/commands/DocsCommand.js +118 -0
- package/dist/commands/FinalizeCommand.d.ts +3 -0
- package/dist/commands/FinalizeCommand.js +24 -0
- package/dist/commands/IndexCommand.d.ts +5 -0
- package/dist/commands/IndexCommand.js +57 -0
- package/dist/commands/InitCommand.d.ts +5 -0
- package/dist/commands/InitCommand.js +65 -0
- package/dist/commands/NewCommand.d.ts +11 -0
- package/dist/commands/NewCommand.js +262 -0
- package/dist/commands/PluginsCommand.d.ts +58 -0
- package/dist/commands/PluginsCommand.js +2491 -0
- package/dist/commands/ProgressCommand.d.ts +5 -0
- package/dist/commands/ProgressCommand.js +103 -0
- package/dist/commands/QueueCommand.d.ts +10 -0
- package/dist/commands/QueueCommand.js +147 -0
- package/dist/commands/RunCommand.d.ts +13 -0
- package/dist/commands/RunCommand.js +200 -0
- package/dist/commands/SkillCommand.d.ts +31 -0
- package/dist/commands/SkillCommand.js +1216 -0
- package/dist/commands/SkillsCommand.d.ts +5 -0
- package/dist/commands/SkillsCommand.js +68 -0
- package/dist/commands/StatusCommand.d.ts +6 -0
- package/dist/commands/StatusCommand.js +140 -0
- package/dist/commands/UpdateCommand.d.ts +8 -0
- package/dist/commands/UpdateCommand.js +251 -0
- package/dist/commands/VerifyCommand.d.ts +5 -0
- package/dist/commands/VerifyCommand.js +278 -0
- package/dist/commands/WorkflowCommand.d.ts +12 -0
- package/dist/commands/WorkflowCommand.js +150 -0
- package/dist/commands/index.d.ts +43 -0
- package/dist/commands/index.js +85 -0
- package/dist/core/constants.d.ts +41 -0
- package/dist/core/constants.js +73 -0
- package/dist/core/errors.d.ts +36 -0
- package/dist/core/errors.js +72 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.js +23 -0
- package/dist/core/types.d.ts +369 -0
- package/dist/core/types.js +3 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +27 -0
- package/dist/presets/ProjectPresets.d.ts +41 -0
- package/dist/presets/ProjectPresets.js +190 -0
- package/dist/scaffolds/ProjectScaffoldPresets.d.ts +20 -0
- package/dist/scaffolds/ProjectScaffoldPresets.js +151 -0
- package/dist/services/ConfigManager.d.ts +14 -0
- package/dist/services/ConfigManager.js +386 -0
- package/dist/services/FeatureManager.d.ts +5 -0
- package/dist/services/FeatureManager.js +6 -0
- package/dist/services/FileService.d.ts +21 -0
- package/dist/services/FileService.js +152 -0
- package/dist/services/IndexBuilder.d.ts +12 -0
- package/dist/services/IndexBuilder.js +130 -0
- package/dist/services/Logger.d.ts +20 -0
- package/dist/services/Logger.js +48 -0
- package/dist/services/ProjectAssetRegistry.d.ts +12 -0
- package/dist/services/ProjectAssetRegistry.js +96 -0
- package/dist/services/ProjectAssetService.d.ts +49 -0
- package/dist/services/ProjectAssetService.js +223 -0
- package/dist/services/ProjectScaffoldCommandService.d.ts +73 -0
- package/dist/services/ProjectScaffoldCommandService.js +159 -0
- package/dist/services/ProjectScaffoldService.d.ts +44 -0
- package/dist/services/ProjectScaffoldService.js +507 -0
- package/dist/services/ProjectService.d.ts +209 -0
- package/dist/services/ProjectService.js +13239 -0
- package/dist/services/QueueService.d.ts +17 -0
- package/dist/services/QueueService.js +142 -0
- package/dist/services/RunService.d.ts +40 -0
- package/dist/services/RunService.js +420 -0
- package/dist/services/SkillParser.d.ts +30 -0
- package/dist/services/SkillParser.js +88 -0
- package/dist/services/StateManager.d.ts +16 -0
- package/dist/services/StateManager.js +127 -0
- package/dist/services/TemplateEngine.d.ts +43 -0
- package/dist/services/TemplateEngine.js +119 -0
- package/dist/services/TemplateGenerator.d.ts +40 -0
- package/dist/services/TemplateGenerator.js +273 -0
- package/dist/services/ValidationService.d.ts +19 -0
- package/dist/services/ValidationService.js +44 -0
- package/dist/services/Validator.d.ts +5 -0
- package/dist/services/Validator.js +6 -0
- package/dist/services/index.d.ts +52 -0
- package/dist/services/index.js +91 -0
- package/dist/services/templates/ExecutionTemplateBuilder.d.ts +12 -0
- package/dist/services/templates/ExecutionTemplateBuilder.js +300 -0
- package/dist/services/templates/ProjectTemplateBuilder.d.ts +38 -0
- package/dist/services/templates/ProjectTemplateBuilder.js +1897 -0
- package/dist/services/templates/TemplateBuilderBase.d.ts +19 -0
- package/dist/services/templates/TemplateBuilderBase.js +60 -0
- package/dist/services/templates/TemplateInputFactory.d.ts +16 -0
- package/dist/services/templates/TemplateInputFactory.js +298 -0
- package/dist/services/templates/templateTypes.d.ts +90 -0
- package/dist/services/templates/templateTypes.js +3 -0
- package/dist/tools/build-index.js +632 -0
- package/dist/utils/DateUtils.d.ts +18 -0
- package/dist/utils/DateUtils.js +40 -0
- package/dist/utils/PathUtils.d.ts +9 -0
- package/dist/utils/PathUtils.js +66 -0
- package/dist/utils/StringUtils.d.ts +26 -0
- package/dist/utils/StringUtils.js +47 -0
- package/dist/utils/helpers.d.ts +5 -0
- package/dist/utils/helpers.js +6 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.js +23 -0
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.js +6 -0
- package/dist/utils/path.d.ts +5 -0
- package/dist/utils/path.js +6 -0
- package/dist/utils/subcommandHelp.d.ts +11 -0
- package/dist/utils/subcommandHelp.js +119 -0
- package/dist/workflow/ArchiveGate.d.ts +30 -0
- package/dist/workflow/ArchiveGate.js +93 -0
- package/dist/workflow/ConfigurableWorkflow.d.ts +89 -0
- package/dist/workflow/ConfigurableWorkflow.js +186 -0
- package/dist/workflow/HookSystem.d.ts +38 -0
- package/dist/workflow/HookSystem.js +66 -0
- package/dist/workflow/IndexRegenerator.d.ts +49 -0
- package/dist/workflow/IndexRegenerator.js +147 -0
- package/dist/workflow/PluginWorkflowComposer.d.ts +138 -0
- package/dist/workflow/PluginWorkflowComposer.js +239 -0
- package/dist/workflow/SkillUpdateEngine.d.ts +26 -0
- package/dist/workflow/SkillUpdateEngine.js +113 -0
- package/dist/workflow/VerificationSystem.d.ts +24 -0
- package/dist/workflow/VerificationSystem.js +116 -0
- package/dist/workflow/WorkflowEngine.d.ts +15 -0
- package/dist/workflow/WorkflowEngine.js +57 -0
- package/dist/workflow/index.d.ts +19 -0
- package/dist/workflow/index.js +32 -0
- package/package.json +78 -0
- package/scripts/postinstall.js +43 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WORKFLOW_STEPS = exports.DATETIME_FORMAT = exports.DATE_FORMAT = exports.NAMING_RULES = exports.DIR_NAMES = exports.FILE_NAMES = exports.CORE_REQUIRED_STEPS = exports.STATE_TRANSITIONS = void 0;
|
|
4
|
+
exports.STATE_TRANSITIONS = {
|
|
5
|
+
queued: ['draft'],
|
|
6
|
+
draft: ['proposed'],
|
|
7
|
+
proposed: ['planned', 'draft'],
|
|
8
|
+
planned: ['implementing', 'proposed'],
|
|
9
|
+
implementing: ['verifying', 'planned'],
|
|
10
|
+
verifying: ['ready_to_archive', 'implementing'],
|
|
11
|
+
ready_to_archive: ['archived', 'verifying'],
|
|
12
|
+
archived: [],
|
|
13
|
+
};
|
|
14
|
+
exports.CORE_REQUIRED_STEPS = [
|
|
15
|
+
'proposal',
|
|
16
|
+
'tasks',
|
|
17
|
+
'state',
|
|
18
|
+
'verification',
|
|
19
|
+
'skill_update',
|
|
20
|
+
'index_regenerated',
|
|
21
|
+
];
|
|
22
|
+
exports.FILE_NAMES = {
|
|
23
|
+
SKILLRC: '.skillrc',
|
|
24
|
+
SKILL_MD: 'SKILL.md',
|
|
25
|
+
SKILL_INDEX: 'SKILL.index.json',
|
|
26
|
+
README: 'README.md',
|
|
27
|
+
BUILD_INDEX_SCRIPT: 'build-index-auto.cjs',
|
|
28
|
+
AI_GUIDE: 'ai-guide.md',
|
|
29
|
+
EXECUTION_PROTOCOL: 'execution-protocol.md',
|
|
30
|
+
PROPOSAL: 'proposal.md',
|
|
31
|
+
TASKS: 'tasks.md',
|
|
32
|
+
VERIFICATION: 'verification.md',
|
|
33
|
+
STATE: 'state.json',
|
|
34
|
+
REVIEW: 'review.md',
|
|
35
|
+
INDEX: 'INDEX.json',
|
|
36
|
+
};
|
|
37
|
+
exports.DIR_NAMES = {
|
|
38
|
+
CHANGES: 'changes',
|
|
39
|
+
ACTIVE: 'active',
|
|
40
|
+
QUEUED: 'queued',
|
|
41
|
+
ARCHIVED: 'archived',
|
|
42
|
+
RUNS: 'runs',
|
|
43
|
+
HISTORY: 'history',
|
|
44
|
+
LOGS: 'logs',
|
|
45
|
+
FOR_AI: 'for-ai',
|
|
46
|
+
DOCS: 'docs',
|
|
47
|
+
PROJECT: 'project',
|
|
48
|
+
DESIGN: 'design',
|
|
49
|
+
PLANNING: 'planning',
|
|
50
|
+
API: 'api',
|
|
51
|
+
SRC: 'src',
|
|
52
|
+
MODULES: 'modules',
|
|
53
|
+
CORE: 'core',
|
|
54
|
+
TESTS: 'tests',
|
|
55
|
+
DIST: 'dist',
|
|
56
|
+
};
|
|
57
|
+
exports.NAMING_RULES = {
|
|
58
|
+
FEATURE_NAME: /^[a-z0-9]+(-[a-z0-9]+)*$/,
|
|
59
|
+
ARCHIVED_DIR: /^\d{4}-\d{2}-\d{2}-[a-z0-9]+(-[a-z0-9]+)*$/,
|
|
60
|
+
};
|
|
61
|
+
exports.DATE_FORMAT = 'YYYY-MM-DD';
|
|
62
|
+
exports.DATETIME_FORMAT = 'YYYY-MM-DDTHH:mm:ssZ';
|
|
63
|
+
exports.WORKFLOW_STEPS = [
|
|
64
|
+
'proposal_complete',
|
|
65
|
+
'tasks_complete',
|
|
66
|
+
'implementation_complete',
|
|
67
|
+
'skill_updated',
|
|
68
|
+
'index_regenerated',
|
|
69
|
+
'tests_passed',
|
|
70
|
+
'verification_passed',
|
|
71
|
+
'archived',
|
|
72
|
+
];
|
|
73
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 错误类定义
|
|
3
|
+
*/
|
|
4
|
+
export declare class OSpecError extends Error {
|
|
5
|
+
code: string;
|
|
6
|
+
details?: any | undefined;
|
|
7
|
+
constructor(message: string, code?: string, details?: any | undefined);
|
|
8
|
+
}
|
|
9
|
+
export declare class ProjectNotInitializedError extends OSpecError {
|
|
10
|
+
constructor(message?: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class FeatureNotFoundError extends OSpecError {
|
|
13
|
+
constructor(featureName: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class FeatureAlreadyExistsError extends OSpecError {
|
|
16
|
+
constructor(featureName: string);
|
|
17
|
+
}
|
|
18
|
+
export declare class InvalidStateTransitionError extends OSpecError {
|
|
19
|
+
constructor(currentStatus: string, targetStatus: string);
|
|
20
|
+
}
|
|
21
|
+
export declare class ValidationError extends OSpecError {
|
|
22
|
+
constructor(message: string, details?: any);
|
|
23
|
+
}
|
|
24
|
+
export declare class FileOperationError extends OSpecError {
|
|
25
|
+
constructor(message: string, details?: any);
|
|
26
|
+
}
|
|
27
|
+
export declare class ConfigError extends OSpecError {
|
|
28
|
+
constructor(message: string, details?: any);
|
|
29
|
+
}
|
|
30
|
+
export declare class WorkflowError extends OSpecError {
|
|
31
|
+
constructor(message: string, details?: any);
|
|
32
|
+
}
|
|
33
|
+
export declare class VerificationError extends OSpecError {
|
|
34
|
+
constructor(message: string, details?: any);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 错误类定义
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.VerificationError = exports.WorkflowError = exports.ConfigError = exports.FileOperationError = exports.ValidationError = exports.InvalidStateTransitionError = exports.FeatureAlreadyExistsError = exports.FeatureNotFoundError = exports.ProjectNotInitializedError = exports.OSpecError = void 0;
|
|
7
|
+
class OSpecError extends Error {
|
|
8
|
+
constructor(message, code = 'OSPEC_ERROR', details) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.details = details;
|
|
12
|
+
this.name = 'OSpecError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.OSpecError = OSpecError;
|
|
16
|
+
class ProjectNotInitializedError extends OSpecError {
|
|
17
|
+
constructor(message = 'Project not initialized. Run `ospec project init` first.') {
|
|
18
|
+
super(message, 'PROJECT_NOT_INITIALIZED');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ProjectNotInitializedError = ProjectNotInitializedError;
|
|
22
|
+
class FeatureNotFoundError extends OSpecError {
|
|
23
|
+
constructor(featureName) {
|
|
24
|
+
super(`Feature '${featureName}' not found.`, 'FEATURE_NOT_FOUND', { featureName });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.FeatureNotFoundError = FeatureNotFoundError;
|
|
28
|
+
class FeatureAlreadyExistsError extends OSpecError {
|
|
29
|
+
constructor(featureName) {
|
|
30
|
+
super(`Feature '${featureName}' already exists.`, 'FEATURE_ALREADY_EXISTS', {
|
|
31
|
+
featureName,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.FeatureAlreadyExistsError = FeatureAlreadyExistsError;
|
|
36
|
+
class InvalidStateTransitionError extends OSpecError {
|
|
37
|
+
constructor(currentStatus, targetStatus) {
|
|
38
|
+
super(`Cannot transition from '${currentStatus}' to '${targetStatus}'.`, 'INVALID_STATE_TRANSITION', { currentStatus, targetStatus });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.InvalidStateTransitionError = InvalidStateTransitionError;
|
|
42
|
+
class ValidationError extends OSpecError {
|
|
43
|
+
constructor(message, details) {
|
|
44
|
+
super(message, 'VALIDATION_ERROR', details);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.ValidationError = ValidationError;
|
|
48
|
+
class FileOperationError extends OSpecError {
|
|
49
|
+
constructor(message, details) {
|
|
50
|
+
super(message, 'FILE_OPERATION_ERROR', details);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.FileOperationError = FileOperationError;
|
|
54
|
+
class ConfigError extends OSpecError {
|
|
55
|
+
constructor(message, details) {
|
|
56
|
+
super(message, 'CONFIG_ERROR', details);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.ConfigError = ConfigError;
|
|
60
|
+
class WorkflowError extends OSpecError {
|
|
61
|
+
constructor(message, details) {
|
|
62
|
+
super(message, 'WORKFLOW_ERROR', details);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.WorkflowError = WorkflowError;
|
|
66
|
+
class VerificationError extends OSpecError {
|
|
67
|
+
constructor(message, details) {
|
|
68
|
+
super(message, 'VERIFICATION_ERROR', details);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.VerificationError = VerificationError;
|
|
72
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 导出入口
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./types"), exports);
|
|
21
|
+
__exportStar(require("./constants"), exports);
|
|
22
|
+
__exportStar(require("./errors"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
export type ProjectMode = 'lite' | 'standard' | 'full';
|
|
2
|
+
export type HookCheckPolicy = 'off' | 'warn' | 'error';
|
|
3
|
+
export type ChangeSummaryStatus = 'pass' | 'warn' | 'fail';
|
|
4
|
+
export type FeatureStatus = 'queued' | 'draft' | 'proposed' | 'planned' | 'implementing' | 'verifying' | 'ready_to_archive' | 'archived';
|
|
5
|
+
export interface StitchPageDesignReviewCapabilityConfig {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
step: string;
|
|
8
|
+
activate_when_flags: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface StitchCommandRunnerConfig {
|
|
11
|
+
mode: 'command';
|
|
12
|
+
command: string;
|
|
13
|
+
args: string[];
|
|
14
|
+
cwd: string;
|
|
15
|
+
timeout_ms: number;
|
|
16
|
+
token_env: string;
|
|
17
|
+
extra_env: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
export interface StitchPluginConfig {
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
blocking: boolean;
|
|
22
|
+
project?: {
|
|
23
|
+
project_id: string;
|
|
24
|
+
project_url: string;
|
|
25
|
+
save_on_first_run: boolean;
|
|
26
|
+
enforce_single_project: boolean;
|
|
27
|
+
};
|
|
28
|
+
gemini?: {
|
|
29
|
+
model: string;
|
|
30
|
+
auto_switch_on_limit: boolean;
|
|
31
|
+
save_on_fallback: boolean;
|
|
32
|
+
};
|
|
33
|
+
codex?: {
|
|
34
|
+
model: string;
|
|
35
|
+
mcp_server: string;
|
|
36
|
+
};
|
|
37
|
+
runner: StitchCommandRunnerConfig;
|
|
38
|
+
provider?: string;
|
|
39
|
+
capabilities: {
|
|
40
|
+
page_design_review: StitchPageDesignReviewCapabilityConfig;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface CheckpointCapabilityConfig {
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
step: string;
|
|
46
|
+
activate_when_flags: string[];
|
|
47
|
+
}
|
|
48
|
+
export interface CheckpointCommandConfig {
|
|
49
|
+
command: string;
|
|
50
|
+
args: string[];
|
|
51
|
+
cwd: string;
|
|
52
|
+
timeout_ms: number;
|
|
53
|
+
}
|
|
54
|
+
export interface CheckpointAuthCommandConfig extends CheckpointCommandConfig {
|
|
55
|
+
when: string;
|
|
56
|
+
}
|
|
57
|
+
export interface CheckpointRuntimeConfig {
|
|
58
|
+
base_url: string;
|
|
59
|
+
startup: CheckpointCommandConfig;
|
|
60
|
+
readiness: {
|
|
61
|
+
type: string;
|
|
62
|
+
url: string;
|
|
63
|
+
timeout_ms: number;
|
|
64
|
+
};
|
|
65
|
+
auth: CheckpointAuthCommandConfig;
|
|
66
|
+
shutdown: CheckpointCommandConfig;
|
|
67
|
+
storage_state: string;
|
|
68
|
+
}
|
|
69
|
+
export interface CheckpointRunnerConfig {
|
|
70
|
+
mode: 'command';
|
|
71
|
+
command: string;
|
|
72
|
+
args: string[];
|
|
73
|
+
cwd: string;
|
|
74
|
+
timeout_ms: number;
|
|
75
|
+
token_env: string;
|
|
76
|
+
extra_env: Record<string, string>;
|
|
77
|
+
}
|
|
78
|
+
export interface CheckpointPluginConfig {
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
blocking: boolean;
|
|
81
|
+
runtime: CheckpointRuntimeConfig;
|
|
82
|
+
runner: CheckpointRunnerConfig;
|
|
83
|
+
capabilities: {
|
|
84
|
+
ui_review: CheckpointCapabilityConfig;
|
|
85
|
+
flow_check: CheckpointCapabilityConfig;
|
|
86
|
+
};
|
|
87
|
+
stitch_integration: {
|
|
88
|
+
enabled: boolean;
|
|
89
|
+
auto_pass_stitch_review: boolean;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export interface SkillrcConfig {
|
|
93
|
+
version: string;
|
|
94
|
+
mode: ProjectMode;
|
|
95
|
+
hooks: {
|
|
96
|
+
'pre-commit': boolean;
|
|
97
|
+
'post-merge': boolean;
|
|
98
|
+
'spec-check': HookCheckPolicy;
|
|
99
|
+
'change-check'?: HookCheckPolicy;
|
|
100
|
+
'index-check'?: HookCheckPolicy;
|
|
101
|
+
};
|
|
102
|
+
index: {
|
|
103
|
+
include?: string[];
|
|
104
|
+
exclude?: string[];
|
|
105
|
+
};
|
|
106
|
+
plugins?: {
|
|
107
|
+
stitch?: StitchPluginConfig;
|
|
108
|
+
checkpoint?: CheckpointPluginConfig;
|
|
109
|
+
};
|
|
110
|
+
workflow?: {
|
|
111
|
+
core_required: string[];
|
|
112
|
+
optional_steps: Record<string, {
|
|
113
|
+
enabled: boolean;
|
|
114
|
+
when: string[];
|
|
115
|
+
}>;
|
|
116
|
+
archive_gate: {
|
|
117
|
+
require_verification: boolean;
|
|
118
|
+
require_skill_update: boolean;
|
|
119
|
+
require_index_regenerated: boolean;
|
|
120
|
+
require_optional_steps_passed: boolean;
|
|
121
|
+
};
|
|
122
|
+
feature_flags: {
|
|
123
|
+
supported: string[];
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export interface FeatureState {
|
|
128
|
+
version: string;
|
|
129
|
+
feature: string;
|
|
130
|
+
mode: ProjectMode;
|
|
131
|
+
workflow_profile_id?: string;
|
|
132
|
+
status: FeatureStatus;
|
|
133
|
+
current_step: string;
|
|
134
|
+
affects: string[];
|
|
135
|
+
completed: string[];
|
|
136
|
+
pending: string[];
|
|
137
|
+
blocked_by: string[];
|
|
138
|
+
queued_at?: string;
|
|
139
|
+
activated_at?: string;
|
|
140
|
+
queue_source?: string;
|
|
141
|
+
activation_source?: string;
|
|
142
|
+
last_updated: string;
|
|
143
|
+
}
|
|
144
|
+
export interface ProposalFrontmatter {
|
|
145
|
+
name: string;
|
|
146
|
+
status: 'queued' | 'active' | 'archived';
|
|
147
|
+
created: string;
|
|
148
|
+
affects: string[];
|
|
149
|
+
flags: string[];
|
|
150
|
+
}
|
|
151
|
+
export interface SkillFrontmatter {
|
|
152
|
+
name: string;
|
|
153
|
+
title?: string;
|
|
154
|
+
tags: string[];
|
|
155
|
+
}
|
|
156
|
+
export interface SkillSection {
|
|
157
|
+
level: number;
|
|
158
|
+
title: string;
|
|
159
|
+
start: number;
|
|
160
|
+
end: number;
|
|
161
|
+
tags?: string[];
|
|
162
|
+
}
|
|
163
|
+
export interface IndexModule {
|
|
164
|
+
file: string;
|
|
165
|
+
title: string;
|
|
166
|
+
tags: string[];
|
|
167
|
+
sections: Record<string, SkillSection>;
|
|
168
|
+
}
|
|
169
|
+
export interface SkillIndex {
|
|
170
|
+
version: string;
|
|
171
|
+
generated: string;
|
|
172
|
+
git_commit: string | null;
|
|
173
|
+
active_changes: string[];
|
|
174
|
+
stats: {
|
|
175
|
+
totalFiles: number;
|
|
176
|
+
totalModules: number;
|
|
177
|
+
totalSections: number;
|
|
178
|
+
};
|
|
179
|
+
modules: Record<string, IndexModule>;
|
|
180
|
+
tagIndex: Record<string, string[]>;
|
|
181
|
+
}
|
|
182
|
+
export interface CommandResult {
|
|
183
|
+
success: boolean;
|
|
184
|
+
message: string;
|
|
185
|
+
data?: unknown;
|
|
186
|
+
error?: string;
|
|
187
|
+
}
|
|
188
|
+
export type ProjectStructureLevel = 'none';
|
|
189
|
+
export interface ProjectStructureCheck {
|
|
190
|
+
key: string;
|
|
191
|
+
path: string;
|
|
192
|
+
exists: boolean;
|
|
193
|
+
required: boolean;
|
|
194
|
+
category: 'core' | 'knowledge';
|
|
195
|
+
}
|
|
196
|
+
export interface ProjectStructureUpgradeSuggestion {
|
|
197
|
+
code: string;
|
|
198
|
+
title: string;
|
|
199
|
+
description: string;
|
|
200
|
+
paths: string[];
|
|
201
|
+
}
|
|
202
|
+
export interface ProjectStructureStatus {
|
|
203
|
+
initialized: boolean;
|
|
204
|
+
level: ProjectStructureLevel;
|
|
205
|
+
checks: ProjectStructureCheck[];
|
|
206
|
+
missingRequired: string[];
|
|
207
|
+
missingRecommended: string[];
|
|
208
|
+
upgradeSuggestions: ProjectStructureUpgradeSuggestion[];
|
|
209
|
+
}
|
|
210
|
+
export interface ProjectSummary {
|
|
211
|
+
name: string;
|
|
212
|
+
path: string;
|
|
213
|
+
mode: ProjectMode | null;
|
|
214
|
+
initialized: boolean;
|
|
215
|
+
structureLevel: ProjectStructureLevel;
|
|
216
|
+
createdAt: string | null;
|
|
217
|
+
activeChangeCount: number;
|
|
218
|
+
docsRootExists: boolean;
|
|
219
|
+
forAiExists: boolean;
|
|
220
|
+
skillIndexExists: boolean;
|
|
221
|
+
}
|
|
222
|
+
export interface ProjectDocumentStatusItem {
|
|
223
|
+
key: string;
|
|
224
|
+
path: string;
|
|
225
|
+
exists: boolean;
|
|
226
|
+
required: boolean;
|
|
227
|
+
updatedAt: string | null;
|
|
228
|
+
}
|
|
229
|
+
export interface DocsStatus {
|
|
230
|
+
total: number;
|
|
231
|
+
existing: number;
|
|
232
|
+
coverage: number;
|
|
233
|
+
items: ProjectDocumentStatusItem[];
|
|
234
|
+
apiDocs: ApiDocInfo[];
|
|
235
|
+
designDocs: KnowledgeDocInfo[];
|
|
236
|
+
planningDocs: KnowledgeDocInfo[];
|
|
237
|
+
missingRequired: string[];
|
|
238
|
+
missingRecommended: string[];
|
|
239
|
+
updatedAt: string | null;
|
|
240
|
+
}
|
|
241
|
+
export interface SkillFileInfo {
|
|
242
|
+
key: string;
|
|
243
|
+
path: string;
|
|
244
|
+
exists: boolean;
|
|
245
|
+
title: string | null;
|
|
246
|
+
tags: string[];
|
|
247
|
+
sectionCount: number;
|
|
248
|
+
sectionTitles: string[];
|
|
249
|
+
}
|
|
250
|
+
export interface ModuleInfo {
|
|
251
|
+
name: string;
|
|
252
|
+
path: string;
|
|
253
|
+
skillPath: string;
|
|
254
|
+
skillExists: boolean;
|
|
255
|
+
}
|
|
256
|
+
export interface ApiDocInfo {
|
|
257
|
+
name: string;
|
|
258
|
+
path: string;
|
|
259
|
+
exists: boolean;
|
|
260
|
+
updatedAt: string | null;
|
|
261
|
+
}
|
|
262
|
+
export interface KnowledgeDocInfo {
|
|
263
|
+
name: string;
|
|
264
|
+
path: string;
|
|
265
|
+
exists: boolean;
|
|
266
|
+
updatedAt: string | null;
|
|
267
|
+
}
|
|
268
|
+
export interface SkillsStatus {
|
|
269
|
+
totalSkillFiles: number;
|
|
270
|
+
existing: number;
|
|
271
|
+
missingRecommended: string[];
|
|
272
|
+
rootSkills: SkillFileInfo[];
|
|
273
|
+
moduleSkills: SkillFileInfo[];
|
|
274
|
+
modules: ModuleInfo[];
|
|
275
|
+
skillIndex: {
|
|
276
|
+
exists: boolean;
|
|
277
|
+
path: string;
|
|
278
|
+
updatedAt: string | null;
|
|
279
|
+
latestSourceUpdatedAt: string | null;
|
|
280
|
+
needsRebuild: boolean;
|
|
281
|
+
stale: boolean;
|
|
282
|
+
reasons: string[];
|
|
283
|
+
stats: SkillIndex['stats'] | null;
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
export interface ExecutionFeatureSummary {
|
|
287
|
+
name: string;
|
|
288
|
+
status: FeatureState['status'];
|
|
289
|
+
progress: number;
|
|
290
|
+
currentStep: string;
|
|
291
|
+
flags: string[];
|
|
292
|
+
description: string;
|
|
293
|
+
}
|
|
294
|
+
export interface ExecutionStatus {
|
|
295
|
+
totalActiveChanges: number;
|
|
296
|
+
byStatus: Record<string, number>;
|
|
297
|
+
activeChanges: ExecutionFeatureSummary[];
|
|
298
|
+
}
|
|
299
|
+
export interface QueuedChangeStatusItem {
|
|
300
|
+
name: string;
|
|
301
|
+
path: string;
|
|
302
|
+
status: FeatureState['status'];
|
|
303
|
+
currentStep: string;
|
|
304
|
+
flags: string[];
|
|
305
|
+
description: string;
|
|
306
|
+
queuedAt: string | null;
|
|
307
|
+
source: string | null;
|
|
308
|
+
}
|
|
309
|
+
export interface ChangeStatusCheck {
|
|
310
|
+
name: string;
|
|
311
|
+
status: ChangeSummaryStatus;
|
|
312
|
+
message: string;
|
|
313
|
+
}
|
|
314
|
+
export interface ActiveChangeStatusItem extends ExecutionFeatureSummary {
|
|
315
|
+
path: string;
|
|
316
|
+
activatedSteps: string[];
|
|
317
|
+
summaryStatus: ChangeSummaryStatus;
|
|
318
|
+
failCount: number;
|
|
319
|
+
warnCount: number;
|
|
320
|
+
archiveReady: boolean;
|
|
321
|
+
checks: ChangeStatusCheck[];
|
|
322
|
+
}
|
|
323
|
+
export interface ActiveChangeStatusReport {
|
|
324
|
+
totalActiveChanges: number;
|
|
325
|
+
totals: Record<ChangeSummaryStatus, number>;
|
|
326
|
+
changes: ActiveChangeStatusItem[];
|
|
327
|
+
}
|
|
328
|
+
export type QueueRunProfileId = 'manual-safe' | 'archive-chain';
|
|
329
|
+
export type QueueRunStatus = 'running' | 'paused' | 'failed' | 'completed';
|
|
330
|
+
export interface QueueRunChangeRef {
|
|
331
|
+
name: string;
|
|
332
|
+
path: string;
|
|
333
|
+
status: FeatureState['status'];
|
|
334
|
+
recordedAt: string;
|
|
335
|
+
note?: string | null;
|
|
336
|
+
}
|
|
337
|
+
export interface QueueRunRecord {
|
|
338
|
+
id: string;
|
|
339
|
+
status: QueueRunStatus;
|
|
340
|
+
executor: 'manual-bridge';
|
|
341
|
+
profileId: QueueRunProfileId;
|
|
342
|
+
mode: 'single-active-sequential';
|
|
343
|
+
projectPath: string;
|
|
344
|
+
startedAt: string;
|
|
345
|
+
updatedAt: string;
|
|
346
|
+
stoppedAt: string | null;
|
|
347
|
+
completedAt: string | null;
|
|
348
|
+
currentChange: string | null;
|
|
349
|
+
currentChangePath: string | null;
|
|
350
|
+
completedChanges: QueueRunChangeRef[];
|
|
351
|
+
remainingChanges: string[];
|
|
352
|
+
failedChange: QueueRunChangeRef | null;
|
|
353
|
+
logPath: string;
|
|
354
|
+
lastInstruction: string | null;
|
|
355
|
+
}
|
|
356
|
+
export interface QueueRunStatusReport {
|
|
357
|
+
currentRun: QueueRunRecord | null;
|
|
358
|
+
stage: string | null;
|
|
359
|
+
activeChange: {
|
|
360
|
+
name: string;
|
|
361
|
+
path: string;
|
|
362
|
+
status: FeatureState['status'];
|
|
363
|
+
} | null;
|
|
364
|
+
queuedChanges: QueuedChangeStatusItem[];
|
|
365
|
+
logTail: string[];
|
|
366
|
+
nextInstruction: string | null;
|
|
367
|
+
}
|
|
368
|
+
export type WorkflowStep = 'proposal_complete' | 'tasks_complete' | 'implementation_complete' | 'skill_updated' | 'index_regenerated' | 'tests_passed' | 'verification_passed' | 'archived';
|
|
369
|
+
//# sourceMappingURL=types.d.ts.map
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OSpec CLI 主导出 (更新版本)
|
|
3
|
+
*/
|
|
4
|
+
export * from './cli';
|
|
5
|
+
export * from './services';
|
|
6
|
+
export * from './commands';
|
|
7
|
+
export * from './utils';
|
|
8
|
+
export * from './core';
|
|
9
|
+
export * from './workflow';
|
|
10
|
+
export * from './advanced';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OSpec CLI 主导出 (更新版本)
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
17
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
__exportStar(require("./cli"), exports);
|
|
21
|
+
__exportStar(require("./services"), exports);
|
|
22
|
+
__exportStar(require("./commands"), exports);
|
|
23
|
+
__exportStar(require("./utils"), exports);
|
|
24
|
+
__exportStar(require("./core"), exports);
|
|
25
|
+
__exportStar(require("./workflow"), exports);
|
|
26
|
+
__exportStar(require("./advanced"), exports);
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ProjectMode } from '../core/types';
|
|
2
|
+
export type ProjectPresetId = 'official-site' | 'nextjs-web';
|
|
3
|
+
export type ProjectPresetDocumentLanguage = 'zh-CN' | 'en-US';
|
|
4
|
+
export interface ProjectPresetFirstChangeSuggestion {
|
|
5
|
+
name: string;
|
|
6
|
+
background: string;
|
|
7
|
+
goals: string[];
|
|
8
|
+
inScope: string[];
|
|
9
|
+
outOfScope: string[];
|
|
10
|
+
acceptanceCriteria: string[];
|
|
11
|
+
affects: string[];
|
|
12
|
+
flags: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface ProjectPresetDefinition {
|
|
15
|
+
id: ProjectPresetId;
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
recommendedMode: ProjectMode;
|
|
19
|
+
recommendedTechStack: string[];
|
|
20
|
+
architecture: string;
|
|
21
|
+
modules: string[];
|
|
22
|
+
apiAreas: string[];
|
|
23
|
+
designDocs: string[];
|
|
24
|
+
planningDocs: string[];
|
|
25
|
+
keywords: string[];
|
|
26
|
+
buildFirstChangeSuggestion: (language: ProjectPresetDocumentLanguage, projectName: string) => ProjectPresetFirstChangeSuggestion;
|
|
27
|
+
}
|
|
28
|
+
interface LocalizedProjectPresetContent {
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
architecture: string;
|
|
32
|
+
designDocs: string[];
|
|
33
|
+
planningDocs: string[];
|
|
34
|
+
}
|
|
35
|
+
export declare const PROJECT_PRESETS: ProjectPresetDefinition[];
|
|
36
|
+
export declare const getProjectPresetById: (presetId?: string | null) => ProjectPresetDefinition | undefined;
|
|
37
|
+
export declare const getLocalizedProjectPresetContent: (presetId: ProjectPresetId | null | undefined, language: ProjectPresetDocumentLanguage) => LocalizedProjectPresetContent | null;
|
|
38
|
+
export declare const inferProjectPresetFromDescription: (description: string) => ProjectPresetDefinition | undefined;
|
|
39
|
+
export declare const getProjectPresetFirstChangeSuggestion: (presetId: ProjectPresetId | null | undefined, language: ProjectPresetDocumentLanguage, projectName: string) => ProjectPresetFirstChangeSuggestion | null;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=ProjectPresets.d.ts.map
|