@clawplays/ospec-cli 0.3.8 → 0.3.10

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.
Files changed (168) hide show
  1. package/.ospec/templates/hooks/post-merge +9 -3
  2. package/.ospec/templates/hooks/pre-commit +9 -3
  3. package/README.md +9 -1
  4. package/SKILL.md +1 -1
  5. package/assets/git-hooks/post-merge +4 -2
  6. package/assets/git-hooks/pre-commit +4 -2
  7. package/dist/advanced/BatchOperations.d.ts +1 -2
  8. package/dist/advanced/BatchOperations.js +1 -2
  9. package/dist/advanced/CachingLayer.d.ts +1 -2
  10. package/dist/advanced/CachingLayer.js +1 -2
  11. package/dist/advanced/FeatureUpdater.d.ts +1 -2
  12. package/dist/advanced/FeatureUpdater.js +1 -2
  13. package/dist/advanced/PerformanceMonitor.d.ts +1 -2
  14. package/dist/advanced/PerformanceMonitor.js +1 -2
  15. package/dist/advanced/StatePersistence.d.ts +1 -2
  16. package/dist/advanced/StatePersistence.js +1 -2
  17. package/dist/advanced/index.d.ts +1 -2
  18. package/dist/advanced/index.js +1 -2
  19. package/dist/cli/commands/config.d.ts +1 -2
  20. package/dist/cli/commands/config.js +1 -2
  21. package/dist/cli/commands/feature.d.ts +1 -2
  22. package/dist/cli/commands/feature.js +1 -2
  23. package/dist/cli/commands/index.d.ts +1 -2
  24. package/dist/cli/commands/index.js +1 -2
  25. package/dist/cli/commands/project.d.ts +1 -2
  26. package/dist/cli/commands/project.js +1 -2
  27. package/dist/cli/commands/validate.d.ts +1 -2
  28. package/dist/cli/commands/validate.js +1 -2
  29. package/dist/cli/index.d.ts +1 -2
  30. package/dist/cli/index.js +1 -2
  31. package/dist/cli.d.ts +1 -2
  32. package/dist/cli.js +1 -2
  33. package/dist/commands/ArchiveCommand.d.ts +1 -2
  34. package/dist/commands/ArchiveCommand.js +0 -1
  35. package/dist/commands/BaseCommand.d.ts +1 -2
  36. package/dist/commands/BaseCommand.js +1 -2
  37. package/dist/commands/BatchCommand.d.ts +1 -2
  38. package/dist/commands/BatchCommand.js +1 -2
  39. package/dist/commands/ChangesCommand.js +0 -1
  40. package/dist/commands/DocsCommand.d.ts +1 -2
  41. package/dist/commands/DocsCommand.js +0 -1
  42. package/dist/commands/IndexCommand.d.ts +1 -2
  43. package/dist/commands/IndexCommand.js +1 -2
  44. package/dist/commands/InitCommand.d.ts +1 -2
  45. package/dist/commands/InitCommand.js +0 -1
  46. package/dist/commands/NewCommand.d.ts +0 -1
  47. package/dist/commands/NewCommand.js +0 -1
  48. package/dist/commands/PluginsCommand.d.ts +0 -1
  49. package/dist/commands/PluginsCommand.js +0 -1
  50. package/dist/commands/ProgressCommand.d.ts +1 -2
  51. package/dist/commands/ProgressCommand.js +1 -2
  52. package/dist/commands/QueueCommand.d.ts +0 -1
  53. package/dist/commands/QueueCommand.js +0 -1
  54. package/dist/commands/RunCommand.d.ts +0 -1
  55. package/dist/commands/RunCommand.js +0 -1
  56. package/dist/commands/SkillCommand.d.ts +0 -1
  57. package/dist/commands/SkillCommand.js +1 -2
  58. package/dist/commands/SkillsCommand.d.ts +1 -2
  59. package/dist/commands/SkillsCommand.js +1 -2
  60. package/dist/commands/StatusCommand.d.ts +1 -2
  61. package/dist/commands/StatusCommand.js +0 -1
  62. package/dist/commands/UpdateCommand.d.ts +0 -1
  63. package/dist/commands/UpdateCommand.js +37 -2
  64. package/dist/commands/VerifyCommand.d.ts +1 -2
  65. package/dist/commands/VerifyCommand.js +0 -1
  66. package/dist/commands/WorkflowCommand.d.ts +0 -1
  67. package/dist/commands/WorkflowCommand.js +0 -1
  68. package/dist/commands/index.d.ts +0 -1
  69. package/dist/commands/index.js +0 -1
  70. package/dist/core/constants.d.ts +1 -2
  71. package/dist/core/constants.js +1 -2
  72. package/dist/core/errors.d.ts +1 -2
  73. package/dist/core/errors.js +1 -2
  74. package/dist/core/index.d.ts +1 -2
  75. package/dist/core/index.js +1 -2
  76. package/dist/core/types.d.ts +0 -1
  77. package/dist/core/types.js +1 -2
  78. package/dist/index.d.ts +1 -2
  79. package/dist/index.js +1 -2
  80. package/dist/presets/ProjectPresets.d.ts +0 -1
  81. package/dist/presets/ProjectPresets.js +0 -1
  82. package/dist/scaffolds/ProjectScaffoldPresets.d.ts +1 -2
  83. package/dist/scaffolds/ProjectScaffoldPresets.js +1 -2
  84. package/dist/services/ConfigManager.d.ts +1 -2
  85. package/dist/services/ConfigManager.js +0 -1
  86. package/dist/services/FeatureManager.d.ts +1 -2
  87. package/dist/services/FeatureManager.js +1 -2
  88. package/dist/services/FileService.d.ts +1 -2
  89. package/dist/services/FileService.js +0 -1
  90. package/dist/services/IndexBuilder.d.ts +1 -2
  91. package/dist/services/IndexBuilder.js +1 -2
  92. package/dist/services/Logger.d.ts +1 -2
  93. package/dist/services/Logger.js +1 -2
  94. package/dist/services/ProjectAssetRegistry.d.ts +0 -1
  95. package/dist/services/ProjectAssetRegistry.js +1 -2
  96. package/dist/services/ProjectAssetService.d.ts +0 -1
  97. package/dist/services/ProjectAssetService.js +4 -2
  98. package/dist/services/ProjectScaffoldCommandService.d.ts +1 -2
  99. package/dist/services/ProjectScaffoldCommandService.js +0 -1
  100. package/dist/services/ProjectScaffoldService.d.ts +1 -2
  101. package/dist/services/ProjectScaffoldService.js +0 -1
  102. package/dist/services/ProjectService.d.ts +0 -1
  103. package/dist/services/ProjectService.js +10 -5
  104. package/dist/services/QueueService.d.ts +0 -1
  105. package/dist/services/QueueService.js +0 -1
  106. package/dist/services/RunService.d.ts +0 -1
  107. package/dist/services/RunService.js +0 -1
  108. package/dist/services/SkillParser.d.ts +1 -2
  109. package/dist/services/SkillParser.js +0 -1
  110. package/dist/services/StateManager.d.ts +0 -1
  111. package/dist/services/StateManager.js +0 -1
  112. package/dist/services/TemplateEngine.d.ts +1 -2
  113. package/dist/services/TemplateEngine.js +1 -2
  114. package/dist/services/TemplateGenerator.d.ts +1 -2
  115. package/dist/services/TemplateGenerator.js +0 -1
  116. package/dist/services/ValidationService.d.ts +1 -2
  117. package/dist/services/ValidationService.js +1 -2
  118. package/dist/services/Validator.d.ts +1 -2
  119. package/dist/services/Validator.js +1 -2
  120. package/dist/services/index.d.ts +0 -1
  121. package/dist/services/index.js +0 -1
  122. package/dist/services/templates/ExecutionTemplateBuilder.d.ts +1 -2
  123. package/dist/services/templates/ExecutionTemplateBuilder.js +0 -1
  124. package/dist/services/templates/ProjectTemplateBuilder.d.ts +1 -2
  125. package/dist/services/templates/ProjectTemplateBuilder.js +0 -1
  126. package/dist/services/templates/TemplateBuilderBase.d.ts +0 -1
  127. package/dist/services/templates/TemplateBuilderBase.js +0 -1
  128. package/dist/services/templates/TemplateInputFactory.d.ts +1 -2
  129. package/dist/services/templates/TemplateInputFactory.js +0 -1
  130. package/dist/services/templates/templateTypes.d.ts +0 -1
  131. package/dist/services/templates/templateTypes.js +1 -2
  132. package/dist/tools/build-index.js +115 -18
  133. package/dist/utils/DateUtils.d.ts +1 -2
  134. package/dist/utils/DateUtils.js +1 -2
  135. package/dist/utils/PathUtils.d.ts +0 -1
  136. package/dist/utils/PathUtils.js +0 -1
  137. package/dist/utils/StringUtils.d.ts +1 -2
  138. package/dist/utils/StringUtils.js +1 -2
  139. package/dist/utils/helpers.d.ts +0 -1
  140. package/dist/utils/helpers.js +0 -1
  141. package/dist/utils/index.d.ts +1 -2
  142. package/dist/utils/index.js +1 -2
  143. package/dist/utils/logger.d.ts +1 -2
  144. package/dist/utils/logger.js +1 -2
  145. package/dist/utils/path.d.ts +1 -2
  146. package/dist/utils/path.js +1 -2
  147. package/dist/utils/subcommandHelp.d.ts +0 -1
  148. package/dist/utils/subcommandHelp.js +0 -1
  149. package/dist/workflow/ArchiveGate.d.ts +1 -2
  150. package/dist/workflow/ArchiveGate.js +1 -2
  151. package/dist/workflow/ConfigurableWorkflow.d.ts +1 -2
  152. package/dist/workflow/ConfigurableWorkflow.js +1 -2
  153. package/dist/workflow/HookSystem.d.ts +1 -2
  154. package/dist/workflow/HookSystem.js +1 -2
  155. package/dist/workflow/IndexRegenerator.d.ts +1 -2
  156. package/dist/workflow/IndexRegenerator.js +1 -2
  157. package/dist/workflow/PluginWorkflowComposer.d.ts +0 -1
  158. package/dist/workflow/PluginWorkflowComposer.js +0 -1
  159. package/dist/workflow/SkillUpdateEngine.d.ts +1 -2
  160. package/dist/workflow/SkillUpdateEngine.js +1 -2
  161. package/dist/workflow/VerificationSystem.d.ts +1 -2
  162. package/dist/workflow/VerificationSystem.js +1 -2
  163. package/dist/workflow/WorkflowEngine.d.ts +1 -2
  164. package/dist/workflow/WorkflowEngine.js +1 -2
  165. package/dist/workflow/index.d.ts +0 -1
  166. package/dist/workflow/index.js +0 -1
  167. package/package.json +13 -8
  168. package/skill.yaml +2 -2
@@ -4,7 +4,6 @@ const fs = require('fs');
4
4
  const fsp = require('fs/promises');
5
5
  const path = require('path');
6
6
  const { spawnSync } = require('child_process');
7
- const matter = require('gray-matter');
8
7
 
9
8
  const SKIP_DIRS = new Set(['node_modules', 'dist', '.git', 'changes', 'for-ai']);
10
9
  const INDEX_FILE = 'SKILL.index.json';
@@ -65,7 +64,7 @@ async function runHookCheck(rootDir, event) {
65
64
  const indexStatus = await computeIndexStatus(rootDir);
66
65
  if (indexStatus.stale) {
67
66
  console.log('[ospec] SKILL.index.json is stale');
68
- console.log('[ospec] run "ospec index build" or "node build-index-auto.cjs" to refresh it');
67
+ console.log('[ospec] run "ospec index build" or "node .ospec/tools/build-index-auto.cjs" to refresh it');
69
68
  if (event === 'pre-commit' && config.indexCheck === 'error') {
70
69
  shouldBlock = true;
71
70
  }
@@ -469,7 +468,7 @@ function analyzeWorkflowChecklistDocument(content, options) {
469
468
 
470
469
  if (hasFrontmatter) {
471
470
  try {
472
- parsed = matter(content);
471
+ parsed = parseFrontmatter(content, { strict: true });
473
472
  } catch (error) {
474
473
  parseError = error;
475
474
  }
@@ -484,8 +483,8 @@ function analyzeWorkflowChecklistDocument(content, options) {
484
483
  const missingActivatedSteps = optionalStepsFieldValid
485
484
  ? options.activatedSteps.filter(step => !optionalSteps.includes(step))
486
485
  : [...options.activatedSteps];
487
- const checklistItems = parsed?.content.match(/^\s*-\s+\[(?: |x|X)\]\s+.+$/gm) ?? [];
488
- const uncheckedItems = parsed?.content.match(/^\s*-\s+\[ \]\s+.+$/gm) ?? [];
486
+ const checklistItems = parsed?.body.match(/^\s*-\s+\[(?: |x|X)\]\s+.+$/gm) ?? [];
487
+ const uncheckedItems = parsed?.body.match(/^\s*-\s+\[ \]\s+.+$/gm) ?? [];
489
488
  const checklistStructureValid = checklistItems.length > 0;
490
489
 
491
490
  let frontmatterMessage = `${options.name} frontmatter parsed successfully`;
@@ -553,40 +552,61 @@ function normalizeLineEndings(content) {
553
552
  return String(content || '').replace(/\r\n?/g, '\n');
554
553
  }
555
554
 
556
- function parseFrontmatter(content) {
557
- const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
555
+ function parseFrontmatter(content, options = {}) {
556
+ const normalizedContent = normalizeLineEndings(content);
557
+ const match = normalizedContent.match(/^---\n([\s\S]*?)\n---(?:\n|$)/);
558
558
  if (!match) {
559
- return { data: {}, body: content };
559
+ return { data: {}, body: normalizedContent };
560
560
  }
561
561
 
562
562
  const data = {};
563
- const lines = match[1].split(/\r?\n/);
563
+ const lines = match[1].split('\n');
564
564
  let currentKey = null;
565
565
 
566
- for (const line of lines) {
566
+ for (let index = 0; index < lines.length; index += 1) {
567
+ const line = lines[index];
568
+ const lineNumber = index + 1;
569
+ const trimmed = line.trim();
570
+
571
+ if (trimmed === '' || trimmed.startsWith('#')) {
572
+ continue;
573
+ }
574
+
567
575
  if (/^\s*-\s+/.test(line) && currentKey) {
568
576
  if (!Array.isArray(data[currentKey])) {
569
577
  data[currentKey] = [];
570
578
  }
571
- data[currentKey].push(parseValue(line.replace(/^\s*-\s+/, '').trim()));
579
+ data[currentKey].push(
580
+ parseValue(line.replace(/^\s*-\s+/, '').trim(), options, {
581
+ key: currentKey,
582
+ lineNumber,
583
+ })
584
+ );
572
585
  continue;
573
586
  }
574
587
 
588
+ if (/^\s*-\s+/.test(line) && options.strict) {
589
+ throw createFrontmatterParseError('Unexpected list item outside an array field', lineNumber);
590
+ }
591
+
575
592
  const keyMatch = line.match(/^([A-Za-z0-9_-]+):\s*(.*)$/);
576
593
  if (!keyMatch) {
594
+ if (options.strict) {
595
+ throw createFrontmatterParseError(`Invalid frontmatter line: ${trimmed}`, lineNumber);
596
+ }
577
597
  currentKey = null;
578
598
  continue;
579
599
  }
580
600
 
581
601
  const key = keyMatch[1];
582
602
  const rawValue = keyMatch[2].trim();
583
- data[key] = parseValue(rawValue);
603
+ data[key] = parseValue(rawValue, options, { key, lineNumber });
584
604
  currentKey = Array.isArray(data[key]) && rawValue === '' ? key : null;
585
605
  }
586
606
 
587
607
  return {
588
608
  data,
589
- body: content.slice(match[0].length),
609
+ body: normalizedContent.slice(match[0].length),
590
610
  };
591
611
  }
592
612
 
@@ -609,7 +629,7 @@ function isValidFrontmatterField(value, type) {
609
629
  return false;
610
630
  }
611
631
 
612
- function parseValue(rawValue) {
632
+ function parseValue(rawValue, options = {}, context = {}) {
613
633
  if (rawValue === '') {
614
634
  return [];
615
635
  }
@@ -622,25 +642,102 @@ function parseValue(rawValue) {
622
642
  if (rawValue === 'false') {
623
643
  return false;
624
644
  }
645
+ if (options.strict) {
646
+ validateFrontmatterValue(rawValue, context);
647
+ }
625
648
  if (/^\[(.*)\]$/.test(rawValue)) {
626
649
  const inner = rawValue.slice(1, -1).trim();
627
650
  if (!inner) {
628
651
  return [];
629
652
  }
630
653
 
631
- return inner
632
- .split(',')
633
- .map(item => stripQuotes(item.trim()))
634
- .filter(Boolean);
654
+ return splitInlineArray(inner, options, context);
635
655
  }
636
656
 
637
657
  return stripQuotes(rawValue);
638
658
  }
639
659
 
660
+ function validateFrontmatterValue(rawValue, context) {
661
+ const startsArray = rawValue.startsWith('[');
662
+ const endsArray = rawValue.endsWith(']');
663
+ if (startsArray !== endsArray) {
664
+ throw createFrontmatterParseError(
665
+ `Unterminated inline array for ${context.key || 'field'}`,
666
+ context.lineNumber
667
+ );
668
+ }
669
+
670
+ if (!rawValue) {
671
+ return;
672
+ }
673
+
674
+ const quote = rawValue[0];
675
+ if ((quote === '"' || quote === "'") && rawValue[rawValue.length - 1] !== quote) {
676
+ throw createFrontmatterParseError(
677
+ `Unterminated quoted string for ${context.key || 'field'}`,
678
+ context.lineNumber
679
+ );
680
+ }
681
+ }
682
+
683
+ function splitInlineArray(inner, options = {}, context = {}) {
684
+ const values = [];
685
+ let current = '';
686
+ let activeQuote = null;
687
+
688
+ for (let index = 0; index < inner.length; index += 1) {
689
+ const char = inner[index];
690
+ if (activeQuote) {
691
+ current += char;
692
+ if (char === activeQuote && inner[index - 1] !== '\\') {
693
+ activeQuote = null;
694
+ }
695
+ continue;
696
+ }
697
+
698
+ if (char === '"' || char === "'") {
699
+ activeQuote = char;
700
+ current += char;
701
+ continue;
702
+ }
703
+
704
+ if (char === ',') {
705
+ const parsed = parseValue(current.trim(), {}, context);
706
+ if (parsed !== '') {
707
+ values.push(parsed);
708
+ }
709
+ current = '';
710
+ continue;
711
+ }
712
+
713
+ current += char;
714
+ }
715
+
716
+ if (activeQuote && options.strict) {
717
+ throw createFrontmatterParseError(
718
+ `Unterminated quoted string in inline array for ${context.key || 'field'}`,
719
+ context.lineNumber
720
+ );
721
+ }
722
+
723
+ const parsed = parseValue(current.trim(), {}, context);
724
+ if (parsed !== '') {
725
+ values.push(parsed);
726
+ }
727
+
728
+ return values.filter(value => value !== '');
729
+ }
730
+
640
731
  function stripQuotes(value) {
641
732
  return value.replace(/^['"]|['"]$/g, '');
642
733
  }
643
734
 
735
+ function createFrontmatterParseError(message, lineNumber) {
736
+ const error = new Error(lineNumber ? `line ${lineNumber}: ${message}` : message);
737
+ error.name = 'FrontmatterParseError';
738
+ return error;
739
+ }
740
+
644
741
  function extractSections(content) {
645
742
  const sections = {};
646
743
  const matches = [];
@@ -14,5 +14,4 @@ export declare class DateUtils {
14
14
  * 解析 ISO 字符串
15
15
  */
16
16
  static parseISO(dateString: string): Date;
17
- }
18
- //# sourceMappingURL=DateUtils.d.ts.map
17
+ }
@@ -36,5 +36,4 @@ class DateUtils {
36
36
  return new Date(dateString);
37
37
  }
38
38
  }
39
- exports.DateUtils = DateUtils;
40
- //# sourceMappingURL=DateUtils.js.map
39
+ exports.DateUtils = DateUtils;
@@ -6,4 +6,3 @@ export declare class PathUtils {
6
6
  static isAbsolute(filePath: string): boolean;
7
7
  static getRelative(from: string, to: string): string;
8
8
  }
9
- //# sourceMappingURL=PathUtils.d.ts.map
@@ -63,4 +63,3 @@ class PathUtils {
63
63
  }
64
64
  }
65
65
  exports.PathUtils = PathUtils;
66
- //# sourceMappingURL=PathUtils.js.map
@@ -22,5 +22,4 @@ export declare class StringUtils {
22
22
  * 去除空白
23
23
  */
24
24
  static trim(str: string): string;
25
- }
26
- //# sourceMappingURL=StringUtils.d.ts.map
25
+ }
@@ -43,5 +43,4 @@ class StringUtils {
43
43
  return str.trim();
44
44
  }
45
45
  }
46
- exports.StringUtils = StringUtils;
47
- //# sourceMappingURL=StringUtils.js.map
46
+ exports.StringUtils = StringUtils;
@@ -1,3 +1,2 @@
1
1
  export declare function quoteCliArg(value: string): string;
2
2
  export declare function formatCliCommand(...args: Array<string | null | undefined>): string;
3
- //# sourceMappingURL=helpers.d.ts.map
@@ -19,4 +19,3 @@ function formatCliCommand(...args) {
19
19
  .join(' ');
20
20
  }
21
21
  exports.formatCliCommand = formatCliCommand;
22
- //# sourceMappingURL=helpers.js.map
@@ -3,5 +3,4 @@
3
3
  */
4
4
  export * from './PathUtils';
5
5
  export * from './StringUtils';
6
- export * from './DateUtils';
7
- //# sourceMappingURL=index.d.ts.map
6
+ export * from './DateUtils';
@@ -19,5 +19,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
20
  __exportStar(require("./PathUtils"), exports);
21
21
  __exportStar(require("./StringUtils"), exports);
22
- __exportStar(require("./DateUtils"), exports);
23
- //# sourceMappingURL=index.js.map
22
+ __exportStar(require("./DateUtils"), exports);
@@ -1,5 +1,4 @@
1
1
  /**
2
2
  * 日志输出
3
3
  * TODO: 实现日志功能
4
- */
5
- //# sourceMappingURL=logger.d.ts.map
4
+ */
@@ -2,5 +2,4 @@
2
2
  /**
3
3
  * 日志输出
4
4
  * TODO: 实现日志功能
5
- */
6
- //# sourceMappingURL=logger.js.map
5
+ */
@@ -1,5 +1,4 @@
1
1
  /**
2
2
  * 路径处理
3
3
  * TODO: 实现路径处理函数
4
- */
5
- //# sourceMappingURL=path.d.ts.map
4
+ */
@@ -2,5 +2,4 @@
2
2
  /**
3
3
  * 路径处理
4
4
  * TODO: 实现路径处理函数
5
- */
6
- //# sourceMappingURL=path.js.map
5
+ */
@@ -8,4 +8,3 @@ export declare function getBatchHelpText(): string;
8
8
  export declare function getChangesHelpText(): string;
9
9
  export declare function getQueueHelpText(): string;
10
10
  export declare function getRunHelpText(): string;
11
- //# sourceMappingURL=subcommandHelp.d.ts.map
@@ -116,4 +116,3 @@ Run Commands:
116
116
  ospec run help - show run command help
117
117
  `;
118
118
  }
119
- //# sourceMappingURL=subcommandHelp.js.map
@@ -26,5 +26,4 @@ export interface ArchiveProtocolState {
26
26
  export declare class ArchiveGate {
27
27
  checkArchiveReadiness(featureState: FeatureState, config: ArchiveGateConfig, protocolState?: ArchiveProtocolState): Promise<ArchiveCheckResult>;
28
28
  }
29
- export declare const archiveGate: ArchiveGate;
30
- //# sourceMappingURL=ArchiveGate.d.ts.map
29
+ export declare const archiveGate: ArchiveGate;
@@ -89,5 +89,4 @@ class ArchiveGate {
89
89
  }
90
90
  }
91
91
  exports.ArchiveGate = ArchiveGate;
92
- exports.archiveGate = new ArchiveGate();
93
- //# sourceMappingURL=ArchiveGate.js.map
92
+ exports.archiveGate = new ArchiveGate();
@@ -85,5 +85,4 @@ export declare class ConfigurableWorkflow {
85
85
  * 获取当前模式
86
86
  */
87
87
  getMode(): string;
88
- }
89
- //# sourceMappingURL=ConfigurableWorkflow.d.ts.map
88
+ }
@@ -182,5 +182,4 @@ class ConfigurableWorkflow {
182
182
  return this.mode;
183
183
  }
184
184
  }
185
- exports.ConfigurableWorkflow = ConfigurableWorkflow;
186
- //# sourceMappingURL=ConfigurableWorkflow.js.map
185
+ exports.ConfigurableWorkflow = ConfigurableWorkflow;
@@ -34,5 +34,4 @@ export declare class HookSystem {
34
34
  count: number;
35
35
  }[];
36
36
  }
37
- export declare const hookSystem: HookSystem;
38
- //# sourceMappingURL=HookSystem.d.ts.map
37
+ export declare const hookSystem: HookSystem;
@@ -62,5 +62,4 @@ class HookSystem {
62
62
  }
63
63
  }
64
64
  exports.HookSystem = HookSystem;
65
- exports.hookSystem = new HookSystem();
66
- //# sourceMappingURL=HookSystem.js.map
65
+ exports.hookSystem = new HookSystem();
@@ -45,5 +45,4 @@ export declare class IndexRegenerator {
45
45
  errors: string[];
46
46
  }>;
47
47
  }
48
- export declare const indexRegenerator: IndexRegenerator;
49
- //# sourceMappingURL=IndexRegenerator.d.ts.map
48
+ export declare const indexRegenerator: IndexRegenerator;
@@ -143,5 +143,4 @@ class IndexRegenerator {
143
143
  }
144
144
  }
145
145
  exports.IndexRegenerator = IndexRegenerator;
146
- exports.indexRegenerator = new IndexRegenerator();
147
- //# sourceMappingURL=IndexRegenerator.js.map
146
+ exports.indexRegenerator = new IndexRegenerator();
@@ -135,4 +135,3 @@ export declare class PluginWorkflowComposer {
135
135
  unsupportedFlags: string[];
136
136
  };
137
137
  }
138
- //# sourceMappingURL=PluginWorkflowComposer.d.ts.map
@@ -236,4 +236,3 @@ class PluginWorkflowComposer {
236
236
  }
237
237
  }
238
238
  exports.PluginWorkflowComposer = PluginWorkflowComposer;
239
- //# sourceMappingURL=PluginWorkflowComposer.js.map
@@ -22,5 +22,4 @@ export declare class SkillUpdateEngine {
22
22
  }>;
23
23
  exportSkillPackage(featureDir: string): Promise<Buffer>;
24
24
  }
25
- export declare const skillUpdateEngine: SkillUpdateEngine;
26
- //# sourceMappingURL=SkillUpdateEngine.d.ts.map
25
+ export declare const skillUpdateEngine: SkillUpdateEngine;
@@ -109,5 +109,4 @@ ${content}`;
109
109
  }
110
110
  }
111
111
  exports.SkillUpdateEngine = SkillUpdateEngine;
112
- exports.skillUpdateEngine = new SkillUpdateEngine();
113
- //# sourceMappingURL=SkillUpdateEngine.js.map
112
+ exports.skillUpdateEngine = new SkillUpdateEngine();
@@ -20,5 +20,4 @@ export declare class VerificationSystem {
20
20
  critical: boolean;
21
21
  }>;
22
22
  }
23
- export declare const verificationSystem: VerificationSystem;
24
- //# sourceMappingURL=VerificationSystem.d.ts.map
23
+ export declare const verificationSystem: VerificationSystem;
@@ -112,5 +112,4 @@ class VerificationSystem {
112
112
  }
113
113
  }
114
114
  exports.VerificationSystem = VerificationSystem;
115
- exports.verificationSystem = new VerificationSystem();
116
- //# sourceMappingURL=VerificationSystem.js.map
115
+ exports.verificationSystem = new VerificationSystem();
@@ -11,5 +11,4 @@ export declare class WorkflowEngine {
11
11
  percentage: number;
12
12
  };
13
13
  }
14
- export declare const workflowEngine: WorkflowEngine;
15
- //# sourceMappingURL=WorkflowEngine.d.ts.map
14
+ export declare const workflowEngine: WorkflowEngine;
@@ -53,5 +53,4 @@ class WorkflowEngine {
53
53
  }
54
54
  }
55
55
  exports.WorkflowEngine = WorkflowEngine;
56
- exports.workflowEngine = new WorkflowEngine();
57
- //# sourceMappingURL=WorkflowEngine.js.map
56
+ exports.workflowEngine = new WorkflowEngine();
@@ -16,4 +16,3 @@ export { ConfigurableWorkflow, WORKFLOW_PRESETS } from './ConfigurableWorkflow';
16
16
  export type { CoreStep, OptionalStep, OptionalStepConfig, WorkflowConfigType } from './ConfigurableWorkflow';
17
17
  export { PluginWorkflowComposer, DEFAULT_STITCH_PLUGIN_CONFIG, DEFAULT_CHECKPOINT_PLUGIN_CONFIG } from './PluginWorkflowComposer';
18
18
  export type { EnabledPluginSummary, PluginCapabilitySummary } from './PluginWorkflowComposer';
19
- //# sourceMappingURL=index.d.ts.map
@@ -29,4 +29,3 @@ var PluginWorkflowComposer_1 = require("./PluginWorkflowComposer");
29
29
  Object.defineProperty(exports, "DEFAULT_STITCH_PLUGIN_CONFIG", { enumerable: true, get: function () { return PluginWorkflowComposer_1.DEFAULT_STITCH_PLUGIN_CONFIG; } });
30
30
  Object.defineProperty(exports, "DEFAULT_CHECKPOINT_PLUGIN_CONFIG", { enumerable: true, get: function () { return PluginWorkflowComposer_1.DEFAULT_CHECKPOINT_PLUGIN_CONFIG; } });
31
31
  Object.defineProperty(exports, "PluginWorkflowComposer", { enumerable: true, get: function () { return PluginWorkflowComposer_1.PluginWorkflowComposer; } });
32
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@clawplays/ospec-cli",
3
- "version": "0.3.8",
4
- "description": "CLI tool for enforcing ospec workflow",
3
+ "version": "0.3.10",
4
+ "description": "Official OSpec CLI package for spec-driven development (SDD) and document-driven development in AI coding agent and CLI workflows.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
@@ -11,9 +11,10 @@
11
11
  "access": "public"
12
12
  },
13
13
  "scripts": {
14
- "build": "tsc",
15
- "dev": "tsc --watch",
14
+ "build": "tsc && node scripts/strip-sourcemap-refs.js",
15
+ "dev": "node scripts/dev-watch.js",
16
16
  "postinstall": "node scripts/postinstall.js",
17
+ "prepack": "node scripts/strip-sourcemap-refs.js",
17
18
  "test": "vitest",
18
19
  "test:run": "vitest --run",
19
20
  "lint": "eslint src tests --ext .ts",
@@ -26,6 +27,7 @@
26
27
  "release:cut:major": "node scripts/release-cut.js major",
27
28
  "release:smoke": "node scripts/release-smoke.js",
28
29
  "release:notes": "node scripts/release-notes.js",
30
+ "release:upload-notes": "node scripts/release-upload-notes.js",
29
31
  "release:sync-version": "node scripts/sync-version.js",
30
32
  "release:bump:patch": "npm version patch --no-git-tag-version",
31
33
  "release:bump:minor": "npm version minor --no-git-tag-version",
@@ -36,16 +38,19 @@
36
38
  },
37
39
  "keywords": [
38
40
  "ospec",
39
- "workflow",
40
- "cli",
41
- "automation"
41
+ "ospec-cli",
42
+ "spec-driven development",
43
+ "sdd",
44
+ "document-driven development",
45
+ "ai coding agents",
46
+ "cli workflows"
42
47
  ],
43
48
  "author": "clawplays <ai@clawplays.com>",
44
49
  "repository": {
45
50
  "type": "git",
46
51
  "url": "git+https://github.com/clawplays/ospec.git"
47
52
  },
48
- "homepage": "https://github.com/clawplays/ospec",
53
+ "homepage": "https://ospec.ai/",
49
54
  "bugs": {
50
55
  "url": "https://github.com/clawplays/ospec/issues"
51
56
  },
package/skill.yaml CHANGED
@@ -19,7 +19,7 @@ protocol:
19
19
  - ".skillrc"
20
20
  - "SKILL.md"
21
21
  - "SKILL.index.json"
22
- - "build-index-auto.cjs"
22
+ - ".ospec/tools/build-index-auto.cjs"
23
23
  - "for-ai/ai-guide.md"
24
24
  - "for-ai/execution-protocol.md"
25
25
  - "for-ai/naming-conventions.md"
@@ -139,7 +139,7 @@ usage:
139
139
  - "Create the first active change explicitly."
140
140
  - "Run your project deployment and validation flow, then use ospec verify [changes/active/<change>]."
141
141
  - "Archive the validated change with ospec finalize [changes/active/<change>]."
142
- - "Verify .skillrc, changes/, .ospec/, build-index-auto.cjs, for-ai docs, and docs/project/* before claiming init is complete."
142
+ - "Verify .skillrc, changes/, .ospec/, .ospec/tools/build-index-auto.cjs, for-ai docs, and docs/project/* before claiming init is complete."
143
143
  - "Use presets only as planning defaults; scaffold still requires explicit intent."
144
144
  prompt_shortcuts:
145
145
  - "initialize this project"