@contractspec/module.workspace 1.46.2 → 1.47.0

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 (56) hide show
  1. package/dist/analysis/deps/graph.js.map +1 -1
  2. package/dist/analysis/deps/parse-imports.js.map +1 -1
  3. package/dist/analysis/diff/deep-diff.js.map +1 -1
  4. package/dist/analysis/diff/semantic.js.map +1 -1
  5. package/dist/analysis/example-scan.d.ts.map +1 -1
  6. package/dist/analysis/example-scan.js +2 -37
  7. package/dist/analysis/example-scan.js.map +1 -1
  8. package/dist/analysis/feature-extractor.js +203 -0
  9. package/dist/analysis/feature-extractor.js.map +1 -0
  10. package/dist/analysis/feature-scan.d.ts.map +1 -1
  11. package/dist/analysis/feature-scan.js +20 -121
  12. package/dist/analysis/feature-scan.js.map +1 -1
  13. package/dist/analysis/impact/classifier.js.map +1 -1
  14. package/dist/analysis/impact/rules.js.map +1 -1
  15. package/dist/analysis/index.js +3 -1
  16. package/dist/analysis/snapshot/normalizer.js.map +1 -1
  17. package/dist/analysis/snapshot/snapshot.js.map +1 -1
  18. package/dist/analysis/spec-parsing-utils.d.ts +26 -0
  19. package/dist/analysis/spec-parsing-utils.d.ts.map +1 -0
  20. package/dist/analysis/spec-parsing-utils.js +98 -0
  21. package/dist/analysis/spec-parsing-utils.js.map +1 -0
  22. package/dist/analysis/spec-scan.d.ts +8 -22
  23. package/dist/analysis/spec-scan.d.ts.map +1 -1
  24. package/dist/analysis/spec-scan.js +105 -337
  25. package/dist/analysis/spec-scan.js.map +1 -1
  26. package/dist/analysis/utils/matchers.js +77 -0
  27. package/dist/analysis/utils/matchers.js.map +1 -0
  28. package/dist/analysis/utils/variables.js +45 -0
  29. package/dist/analysis/utils/variables.js.map +1 -0
  30. package/dist/analysis/validate/index.js +1 -0
  31. package/dist/analysis/validate/spec-structure.d.ts.map +1 -1
  32. package/dist/analysis/validate/spec-structure.js +401 -85
  33. package/dist/analysis/validate/spec-structure.js.map +1 -1
  34. package/dist/formatter.js.map +1 -1
  35. package/dist/formatters/index.js +2 -0
  36. package/dist/formatters/spec-markdown.d.ts +4 -1
  37. package/dist/formatters/spec-markdown.d.ts.map +1 -1
  38. package/dist/formatters/spec-markdown.js +12 -4
  39. package/dist/formatters/spec-markdown.js.map +1 -1
  40. package/dist/formatters/spec-to-docblock.d.ts +3 -1
  41. package/dist/formatters/spec-to-docblock.d.ts.map +1 -1
  42. package/dist/formatters/spec-to-docblock.js +2 -2
  43. package/dist/formatters/spec-to-docblock.js.map +1 -1
  44. package/dist/index.d.ts +4 -3
  45. package/dist/index.js +4 -2
  46. package/dist/templates/integration-utils.js.map +1 -1
  47. package/dist/templates/integration.js +3 -4
  48. package/dist/templates/integration.js.map +1 -1
  49. package/dist/templates/knowledge.js.map +1 -1
  50. package/dist/templates/workflow.js.map +1 -1
  51. package/dist/types/analysis-types.d.ts +24 -3
  52. package/dist/types/analysis-types.d.ts.map +1 -1
  53. package/dist/types/generation-types.js.map +1 -1
  54. package/dist/types/llm-types.d.ts +1 -1
  55. package/dist/types/llm-types.d.ts.map +1 -1
  56. package/package.json +9 -10
@@ -1 +1 @@
1
- {"version":3,"file":"knowledge.js","names":["entries: string[]"],"sources":["../../src/templates/knowledge.ts"],"sourcesContent":["import type { KnowledgeSpaceSpecData, Stability } from '../types/spec-types';\nimport { toPascalCase, escapeString } from './utils';\n\nexport function generateKnowledgeSpaceSpec(\n data: KnowledgeSpaceSpecData\n): string {\n const specName = toPascalCase(data.name.split('.').pop() ?? 'KnowledgeSpace');\n const varName = `${specName}KnowledgeSpace`;\n const registerFn = `register${specName}KnowledgeSpace`;\n\n const retention = renderRetention(data);\n const access = renderAccess(data);\n const indexing = renderIndexing(data);\n const policyComment =\n data.policyName && !data.policyVersion\n ? ` // defaults to latest version`\n : '';\n\n return `import { StabilityEnum } from '@contractspec/lib.contracts/ownership';\nimport type { KnowledgeSpaceSpec } from '@contractspec/lib.contracts/knowledge/spec';\nimport type { KnowledgeSpaceRegistry } from '@contractspec/lib.contracts/knowledge/spec';\n\nexport const ${varName}: KnowledgeSpaceSpec = {\n meta: {\n key: '${escapeString(data.name)}',\n version: ${data.version},\n category: '${data.category}',\n displayName: '${escape(data.displayName)}',\n title: '${escape(data.title)}',\n description: '${escape(data.description)}',\n domain: '${escape(data.domain)}',\n owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(', ')}],\n stability: StabilityEnum.${stabilityToEnum(data.stability)},\n },\n retention: ${retention},\n access: {\n${access}${data.policyName ? ` policy: { name: '${escapeString(data.policyName)}',${data.policyVersion ? ` version: ${data.policyVersion}` : ''} },${policyComment}\\n` : ''} },\n${indexing} description: '${escape(data.description || data.displayName)}',\n};\n\nexport function ${registerFn}(registry: KnowledgeSpaceRegistry): KnowledgeSpaceRegistry {\n return registry.register(${varName});\n}\n`;\n}\n\nfunction renderRetention(data: KnowledgeSpaceSpecData): string {\n const ttl =\n data.retention.ttlDays === null\n ? 'null'\n : typeof data.retention.ttlDays === 'number'\n ? String(data.retention.ttlDays)\n : 'null';\n const archive =\n typeof data.retention.archiveAfterDays === 'number'\n ? `, archiveAfterDays: ${data.retention.archiveAfterDays}`\n : '';\n return `{ ttlDays: ${ttl}${archive} }`;\n}\n\nfunction renderAccess(data: KnowledgeSpaceSpecData): string {\n const trustLine = ` trustLevel: '${data.trustLevel}',\\n`;\n const automationLine = ` automationWritable: ${data.automationWritable},\\n`;\n return `${trustLine}${automationLine}`;\n}\n\nfunction renderIndexing(data: KnowledgeSpaceSpecData): string {\n const entries: string[] = [];\n if (data.embeddingModel) {\n entries.push(` embeddingModel: '${escape(data.embeddingModel)}'`);\n }\n if (typeof data.chunkSize === 'number') {\n entries.push(` chunkSize: ${data.chunkSize}`);\n }\n if (data.vectorDbIntegration) {\n entries.push(\n ` vectorDbIntegration: '${escape(data.vectorDbIntegration)}'`\n );\n }\n if (entries.length === 0) {\n return '';\n }\n return ` indexing: {\\n${entries.join(',\\n')}\\n },\\n`;\n}\n\nfunction stabilityToEnum(stability: Stability): string {\n switch (stability) {\n case 'beta':\n return 'Beta';\n case 'stable':\n return 'Stable';\n case 'deprecated':\n return 'Deprecated';\n case 'experimental':\n default:\n return 'Experimental';\n }\n}\n\nfunction escape(value: string): string {\n return value.replace(/`/g, '\\\\`').replace(/'/g, \"\\\\'\");\n}\n"],"mappings":";;;AAGA,SAAgB,2BACd,MACQ;CACR,MAAM,WAAW,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,iBAAiB;CAC7E,MAAM,UAAU,GAAG,SAAS;CAC5B,MAAM,aAAa,WAAW,SAAS;CAEvC,MAAM,YAAY,gBAAgB,KAAK;CACvC,MAAM,SAAS,aAAa,KAAK;CACjC,MAAM,WAAW,eAAe,KAAK;CACrC,MAAM,gBACJ,KAAK,cAAc,CAAC,KAAK,gBACrB,mCACA;AAEN,QAAO;;;;eAIM,QAAQ;;YAEX,aAAa,KAAK,KAAK,CAAC;eACrB,KAAK,QAAQ;iBACX,KAAK,SAAS;oBACX,OAAO,KAAK,YAAY,CAAC;cAC/B,OAAO,KAAK,MAAM,CAAC;oBACb,OAAO,KAAK,YAAY,CAAC;eAC9B,OAAO,KAAK,OAAO,CAAC;eACpB,KAAK,OAAO,KAAK,UAAU,IAAI,aAAa,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;aACpE,KAAK,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;+BAC1C,gBAAgB,KAAK,UAAU,CAAC;;eAEhD,UAAU;;EAEvB,SAAS,KAAK,aAAa,wBAAwB,aAAa,KAAK,WAAW,CAAC,IAAI,KAAK,gBAAgB,aAAa,KAAK,kBAAkB,GAAG,KAAK,cAAc,MAAM,GAAG;EAC7K,SAAS,kBAAkB,OAAO,KAAK,eAAe,KAAK,YAAY,CAAC;;;kBAGxD,WAAW;6BACA,QAAQ;;;;AAKrC,SAAS,gBAAgB,MAAsC;AAW7D,QAAO,cATL,KAAK,UAAU,YAAY,OACvB,SACA,OAAO,KAAK,UAAU,YAAY,WAChC,OAAO,KAAK,UAAU,QAAQ,GAC9B,SAEN,OAAO,KAAK,UAAU,qBAAqB,WACvC,uBAAuB,KAAK,UAAU,qBACtC,GAC6B;;AAGrC,SAAS,aAAa,MAAsC;AAG1D,QAAO,GAFW,oBAAoB,KAAK,WAAW,QAC/B,2BAA2B,KAAK,mBAAmB;;AAI5E,SAAS,eAAe,MAAsC;CAC5D,MAAMA,UAAoB,EAAE;AAC5B,KAAI,KAAK,eACP,SAAQ,KAAK,wBAAwB,OAAO,KAAK,eAAe,CAAC,GAAG;AAEtE,KAAI,OAAO,KAAK,cAAc,SAC5B,SAAQ,KAAK,kBAAkB,KAAK,YAAY;AAElD,KAAI,KAAK,oBACP,SAAQ,KACN,6BAA6B,OAAO,KAAK,oBAAoB,CAAC,GAC/D;AAEH,KAAI,QAAQ,WAAW,EACrB,QAAO;AAET,QAAO,kBAAkB,QAAQ,KAAK,MAAM,CAAC;;AAG/C,SAAS,gBAAgB,WAA8B;AACrD,SAAQ,WAAR;EACE,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,aACH,QAAO;EACT,KAAK;EACL,QACE,QAAO;;;AAIb,SAAS,OAAO,OAAuB;AACrC,QAAO,MAAM,QAAQ,MAAM,MAAM,CAAC,QAAQ,MAAM,MAAM"}
1
+ {"version":3,"file":"knowledge.js","names":[],"sources":["../../src/templates/knowledge.ts"],"sourcesContent":["import type { KnowledgeSpaceSpecData, Stability } from '../types/spec-types';\nimport { toPascalCase, escapeString } from './utils';\n\nexport function generateKnowledgeSpaceSpec(\n data: KnowledgeSpaceSpecData\n): string {\n const specName = toPascalCase(data.name.split('.').pop() ?? 'KnowledgeSpace');\n const varName = `${specName}KnowledgeSpace`;\n const registerFn = `register${specName}KnowledgeSpace`;\n\n const retention = renderRetention(data);\n const access = renderAccess(data);\n const indexing = renderIndexing(data);\n const policyComment =\n data.policyName && !data.policyVersion\n ? ` // defaults to latest version`\n : '';\n\n return `import { StabilityEnum } from '@contractspec/lib.contracts/ownership';\nimport type { KnowledgeSpaceSpec } from '@contractspec/lib.contracts/knowledge/spec';\nimport type { KnowledgeSpaceRegistry } from '@contractspec/lib.contracts/knowledge/spec';\n\nexport const ${varName}: KnowledgeSpaceSpec = {\n meta: {\n key: '${escapeString(data.name)}',\n version: ${data.version},\n category: '${data.category}',\n displayName: '${escape(data.displayName)}',\n title: '${escape(data.title)}',\n description: '${escape(data.description)}',\n domain: '${escape(data.domain)}',\n owners: [${data.owners.map((owner) => `'${escapeString(owner)}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${escapeString(tag)}'`).join(', ')}],\n stability: StabilityEnum.${stabilityToEnum(data.stability)},\n },\n retention: ${retention},\n access: {\n${access}${data.policyName ? ` policy: { name: '${escapeString(data.policyName)}',${data.policyVersion ? ` version: ${data.policyVersion}` : ''} },${policyComment}\\n` : ''} },\n${indexing} description: '${escape(data.description || data.displayName)}',\n};\n\nexport function ${registerFn}(registry: KnowledgeSpaceRegistry): KnowledgeSpaceRegistry {\n return registry.register(${varName});\n}\n`;\n}\n\nfunction renderRetention(data: KnowledgeSpaceSpecData): string {\n const ttl =\n data.retention.ttlDays === null\n ? 'null'\n : typeof data.retention.ttlDays === 'number'\n ? String(data.retention.ttlDays)\n : 'null';\n const archive =\n typeof data.retention.archiveAfterDays === 'number'\n ? `, archiveAfterDays: ${data.retention.archiveAfterDays}`\n : '';\n return `{ ttlDays: ${ttl}${archive} }`;\n}\n\nfunction renderAccess(data: KnowledgeSpaceSpecData): string {\n const trustLine = ` trustLevel: '${data.trustLevel}',\\n`;\n const automationLine = ` automationWritable: ${data.automationWritable},\\n`;\n return `${trustLine}${automationLine}`;\n}\n\nfunction renderIndexing(data: KnowledgeSpaceSpecData): string {\n const entries: string[] = [];\n if (data.embeddingModel) {\n entries.push(` embeddingModel: '${escape(data.embeddingModel)}'`);\n }\n if (typeof data.chunkSize === 'number') {\n entries.push(` chunkSize: ${data.chunkSize}`);\n }\n if (data.vectorDbIntegration) {\n entries.push(\n ` vectorDbIntegration: '${escape(data.vectorDbIntegration)}'`\n );\n }\n if (entries.length === 0) {\n return '';\n }\n return ` indexing: {\\n${entries.join(',\\n')}\\n },\\n`;\n}\n\nfunction stabilityToEnum(stability: Stability): string {\n switch (stability) {\n case 'beta':\n return 'Beta';\n case 'stable':\n return 'Stable';\n case 'deprecated':\n return 'Deprecated';\n case 'experimental':\n default:\n return 'Experimental';\n }\n}\n\nfunction escape(value: string): string {\n return value.replace(/`/g, '\\\\`').replace(/'/g, \"\\\\'\");\n}\n"],"mappings":";;;AAGA,SAAgB,2BACd,MACQ;CACR,MAAM,WAAW,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,iBAAiB;CAC7E,MAAM,UAAU,GAAG,SAAS;CAC5B,MAAM,aAAa,WAAW,SAAS;CAEvC,MAAM,YAAY,gBAAgB,KAAK;CACvC,MAAM,SAAS,aAAa,KAAK;CACjC,MAAM,WAAW,eAAe,KAAK;CACrC,MAAM,gBACJ,KAAK,cAAc,CAAC,KAAK,gBACrB,mCACA;AAEN,QAAO;;;;eAIM,QAAQ;;YAEX,aAAa,KAAK,KAAK,CAAC;eACrB,KAAK,QAAQ;iBACX,KAAK,SAAS;oBACX,OAAO,KAAK,YAAY,CAAC;cAC/B,OAAO,KAAK,MAAM,CAAC;oBACb,OAAO,KAAK,YAAY,CAAC;eAC9B,OAAO,KAAK,OAAO,CAAC;eACpB,KAAK,OAAO,KAAK,UAAU,IAAI,aAAa,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;aACpE,KAAK,KAAK,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;+BAC1C,gBAAgB,KAAK,UAAU,CAAC;;eAEhD,UAAU;;EAEvB,SAAS,KAAK,aAAa,wBAAwB,aAAa,KAAK,WAAW,CAAC,IAAI,KAAK,gBAAgB,aAAa,KAAK,kBAAkB,GAAG,KAAK,cAAc,MAAM,GAAG;EAC7K,SAAS,kBAAkB,OAAO,KAAK,eAAe,KAAK,YAAY,CAAC;;;kBAGxD,WAAW;6BACA,QAAQ;;;;AAKrC,SAAS,gBAAgB,MAAsC;AAW7D,QAAO,cATL,KAAK,UAAU,YAAY,OACvB,SACA,OAAO,KAAK,UAAU,YAAY,WAChC,OAAO,KAAK,UAAU,QAAQ,GAC9B,SAEN,OAAO,KAAK,UAAU,qBAAqB,WACvC,uBAAuB,KAAK,UAAU,qBACtC,GAC6B;;AAGrC,SAAS,aAAa,MAAsC;AAG1D,QAAO,GAFW,oBAAoB,KAAK,WAAW,QAC/B,2BAA2B,KAAK,mBAAmB;;AAI5E,SAAS,eAAe,MAAsC;CAC5D,MAAM,UAAoB,EAAE;AAC5B,KAAI,KAAK,eACP,SAAQ,KAAK,wBAAwB,OAAO,KAAK,eAAe,CAAC,GAAG;AAEtE,KAAI,OAAO,KAAK,cAAc,SAC5B,SAAQ,KAAK,kBAAkB,KAAK,YAAY;AAElD,KAAI,KAAK,oBACP,SAAQ,KACN,6BAA6B,OAAO,KAAK,oBAAoB,CAAC,GAC/D;AAEH,KAAI,QAAQ,WAAW,EACrB,QAAO;AAET,QAAO,kBAAkB,QAAQ,KAAK,MAAM,CAAC;;AAG/C,SAAS,gBAAgB,WAA8B;AACrD,SAAQ,WAAR;EACE,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,aACH,QAAO;EACT,KAAK;EACL,QACE,QAAO;;;AAIb,SAAS,OAAO,OAAuB;AACrC,QAAO,MAAM,QAAQ,MAAM,MAAM,CAAC,QAAQ,MAAM,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow.js","names":["lines: string[]","actionLines: string[]"],"sources":["../../src/templates/workflow.ts"],"sourcesContent":["/**\n * Workflow spec template generation.\n * Extracted from cli-contractspec/src/templates/workflow.template.ts\n */\n\nimport type { WorkflowSpecData } from '../types/spec-types';\nimport { toPascalCase, escapeString } from './utils';\n\n/**\n * Generate workflow spec TypeScript code.\n */\nexport function generateWorkflowSpec(data: WorkflowSpecData): string {\n const specVarName =\n toPascalCase(data.name.split('.').pop() ?? 'Workflow') + 'Workflow';\n\n const stepsCode = data.steps.map((step) => formatStep(step)).join(',\\n');\n\n const transitionsCode = data.transitions\n .map(\n (transition) => ` {\n from: '${transition.from}',\n to: '${transition.to}',\n${transition.condition ? ` condition: '${escapeString(transition.condition)}',` : ''}\n }`\n )\n .join(',\\n');\n\n return `import type { WorkflowSpec } from '@contractspec/lib.contracts/workflow';\n\n/**\n * Workflow generated via contractspec CLI.\n * TODO:\n * - Review step definitions and descriptions.\n * - Wire automation steps to actual operations.\n * - Provide form renderers for human steps.\n * - Add guards/conditions as needed.\n */\nexport const ${specVarName}: WorkflowSpec = {\n meta: {\n key: '${data.name}',\n version: ${data.version},\n title: '${escapeString(data.title)}',\n description: '${escapeString(data.description)}',\n domain: '${escapeString(data.domain)}',\n stability: '${data.stability}',\n owners: [${data.owners.map((owner) => `'${owner}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${tag}'`).join(', ')}],\n },\n definition: {\n${data.entryStepId ? ` entryStepId: '${data.entryStepId}',\\n` : ''} steps: [\n${stepsCode}\n ],\n transitions: [\n${transitionsCode}\n ],\n },\n ${\n data.policyFlags.length > 0\n ? `policy: {\n flags: [${data.policyFlags.map((flag) => `'${flag}'`).join(', ')}],\n },`\n : '// policy: { flags: [] },'\n }\n};\n`;\n}\n\nfunction formatStep(step: WorkflowSpecData['steps'][number]): string {\n const lines: string[] = [\n ` {`,\n ` id: '${step.id}',`,\n ` type: '${step.type}',`,\n ` label: '${escapeString(step.label)}',`,\n ];\n if (step.description) {\n lines.push(` description: '${escapeString(step.description)}',`);\n }\n\n const actionLines: string[] = [];\n if (step.operation) {\n actionLines.push(\n `operation: { name: '${step.operation.name}', version: ${step.operation.version} }`\n );\n }\n if (step.form) {\n actionLines.push(\n `form: { key: '${step.form.key}', version: ${step.form.version} }`\n );\n }\n if (actionLines.length) {\n lines.push(` action: { ${actionLines.join(', ')} },`);\n }\n\n lines.push(` }`);\n return lines.join('\\n');\n}\n"],"mappings":";;;;;;AAWA,SAAgB,qBAAqB,MAAgC;CACnE,MAAM,cACJ,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,WAAW,GAAG;CAE3D,MAAM,YAAY,KAAK,MAAM,KAAK,SAAS,WAAW,KAAK,CAAC,CAAC,KAAK,MAAM;CAExE,MAAM,kBAAkB,KAAK,YAC1B,KACE,eAAe;eACP,WAAW,KAAK;aAClB,WAAW,GAAG;EACzB,WAAW,YAAY,qBAAqB,aAAa,WAAW,UAAU,CAAC,MAAM,GAAG;OAErF,CACA,KAAK,MAAM;AAEd,QAAO;;;;;;;;;;eAUM,YAAY;;YAEf,KAAK,KAAK;eACP,KAAK,QAAQ;cACd,aAAa,KAAK,MAAM,CAAC;oBACnB,aAAa,KAAK,YAAY,CAAC;eACpC,aAAa,KAAK,OAAO,CAAC;kBACvB,KAAK,UAAU;eAClB,KAAK,OAAO,KAAK,UAAU,IAAI,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC;aACtD,KAAK,KAAK,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC;;;EAGzD,KAAK,cAAc,qBAAqB,KAAK,YAAY,QAAQ,GAAG;EACpE,UAAU;;;EAGV,gBAAgB;;;IAId,KAAK,YAAY,SAAS,IACtB;cACM,KAAK,YAAY,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC;QAE7D,4BACL;;;;AAKH,SAAS,WAAW,MAAiD;CACnE,MAAMA,QAAkB;EACtB;EACA,cAAc,KAAK,GAAG;EACtB,gBAAgB,KAAK,KAAK;EAC1B,iBAAiB,aAAa,KAAK,MAAM,CAAC;EAC3C;AACD,KAAI,KAAK,YACP,OAAM,KAAK,uBAAuB,aAAa,KAAK,YAAY,CAAC,IAAI;CAGvE,MAAMC,cAAwB,EAAE;AAChC,KAAI,KAAK,UACP,aAAY,KACV,uBAAuB,KAAK,UAAU,KAAK,cAAc,KAAK,UAAU,QAAQ,IACjF;AAEH,KAAI,KAAK,KACP,aAAY,KACV,iBAAiB,KAAK,KAAK,IAAI,cAAc,KAAK,KAAK,QAAQ,IAChE;AAEH,KAAI,YAAY,OACd,OAAM,KAAK,mBAAmB,YAAY,KAAK,KAAK,CAAC,KAAK;AAG5D,OAAM,KAAK,QAAQ;AACnB,QAAO,MAAM,KAAK,KAAK"}
1
+ {"version":3,"file":"workflow.js","names":[],"sources":["../../src/templates/workflow.ts"],"sourcesContent":["/**\n * Workflow spec template generation.\n * Extracted from cli-contractspec/src/templates/workflow.template.ts\n */\n\nimport type { WorkflowSpecData } from '../types/spec-types';\nimport { toPascalCase, escapeString } from './utils';\n\n/**\n * Generate workflow spec TypeScript code.\n */\nexport function generateWorkflowSpec(data: WorkflowSpecData): string {\n const specVarName =\n toPascalCase(data.name.split('.').pop() ?? 'Workflow') + 'Workflow';\n\n const stepsCode = data.steps.map((step) => formatStep(step)).join(',\\n');\n\n const transitionsCode = data.transitions\n .map(\n (transition) => ` {\n from: '${transition.from}',\n to: '${transition.to}',\n${transition.condition ? ` condition: '${escapeString(transition.condition)}',` : ''}\n }`\n )\n .join(',\\n');\n\n return `import type { WorkflowSpec } from '@contractspec/lib.contracts/workflow';\n\n/**\n * Workflow generated via contractspec CLI.\n * TODO:\n * - Review step definitions and descriptions.\n * - Wire automation steps to actual operations.\n * - Provide form renderers for human steps.\n * - Add guards/conditions as needed.\n */\nexport const ${specVarName}: WorkflowSpec = {\n meta: {\n key: '${data.name}',\n version: ${data.version},\n title: '${escapeString(data.title)}',\n description: '${escapeString(data.description)}',\n domain: '${escapeString(data.domain)}',\n stability: '${data.stability}',\n owners: [${data.owners.map((owner) => `'${owner}'`).join(', ')}],\n tags: [${data.tags.map((tag) => `'${tag}'`).join(', ')}],\n },\n definition: {\n${data.entryStepId ? ` entryStepId: '${data.entryStepId}',\\n` : ''} steps: [\n${stepsCode}\n ],\n transitions: [\n${transitionsCode}\n ],\n },\n ${\n data.policyFlags.length > 0\n ? `policy: {\n flags: [${data.policyFlags.map((flag) => `'${flag}'`).join(', ')}],\n },`\n : '// policy: { flags: [] },'\n }\n};\n`;\n}\n\nfunction formatStep(step: WorkflowSpecData['steps'][number]): string {\n const lines: string[] = [\n ` {`,\n ` id: '${step.id}',`,\n ` type: '${step.type}',`,\n ` label: '${escapeString(step.label)}',`,\n ];\n if (step.description) {\n lines.push(` description: '${escapeString(step.description)}',`);\n }\n\n const actionLines: string[] = [];\n if (step.operation) {\n actionLines.push(\n `operation: { name: '${step.operation.name}', version: ${step.operation.version} }`\n );\n }\n if (step.form) {\n actionLines.push(\n `form: { key: '${step.form.key}', version: ${step.form.version} }`\n );\n }\n if (actionLines.length) {\n lines.push(` action: { ${actionLines.join(', ')} },`);\n }\n\n lines.push(` }`);\n return lines.join('\\n');\n}\n"],"mappings":";;;;;;AAWA,SAAgB,qBAAqB,MAAgC;CACnE,MAAM,cACJ,aAAa,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,WAAW,GAAG;CAE3D,MAAM,YAAY,KAAK,MAAM,KAAK,SAAS,WAAW,KAAK,CAAC,CAAC,KAAK,MAAM;CAExE,MAAM,kBAAkB,KAAK,YAC1B,KACE,eAAe;eACP,WAAW,KAAK;aAClB,WAAW,GAAG;EACzB,WAAW,YAAY,qBAAqB,aAAa,WAAW,UAAU,CAAC,MAAM,GAAG;OAErF,CACA,KAAK,MAAM;AAEd,QAAO;;;;;;;;;;eAUM,YAAY;;YAEf,KAAK,KAAK;eACP,KAAK,QAAQ;cACd,aAAa,KAAK,MAAM,CAAC;oBACnB,aAAa,KAAK,YAAY,CAAC;eACpC,aAAa,KAAK,OAAO,CAAC;kBACvB,KAAK,UAAU;eAClB,KAAK,OAAO,KAAK,UAAU,IAAI,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC;aACtD,KAAK,KAAK,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC;;;EAGzD,KAAK,cAAc,qBAAqB,KAAK,YAAY,QAAQ,GAAG;EACpE,UAAU;;;EAGV,gBAAgB;;;IAId,KAAK,YAAY,SAAS,IACtB;cACM,KAAK,YAAY,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC;QAE7D,4BACL;;;;AAKH,SAAS,WAAW,MAAiD;CACnE,MAAM,QAAkB;EACtB;EACA,cAAc,KAAK,GAAG;EACtB,gBAAgB,KAAK,KAAK;EAC1B,iBAAiB,aAAa,KAAK,MAAM,CAAC;EAC3C;AACD,KAAI,KAAK,YACP,OAAM,KAAK,uBAAuB,aAAa,KAAK,YAAY,CAAC,IAAI;CAGvE,MAAM,cAAwB,EAAE;AAChC,KAAI,KAAK,UACP,aAAY,KACV,uBAAuB,KAAK,UAAU,KAAK,cAAc,KAAK,UAAU,QAAQ,IACjF;AAEH,KAAI,KAAK,KACP,aAAY,KACV,iBAAiB,KAAK,KAAK,IAAI,cAAc,KAAK,KAAK,QAAQ,IAChE;AAEH,KAAI,YAAY,OACd,OAAM,KAAK,mBAAmB,YAAY,KAAK,KAAK,CAAC,KAAK;AAG5D,OAAM,KAAK,QAAQ;AACnB,QAAO,MAAM,KAAK,KAAK"}
@@ -6,15 +6,16 @@ import { Stability } from "./spec-types.js";
6
6
  * Spec type detected from file analysis.
7
7
  * Covers all contract types from @contractspec/lib.contracts.
8
8
  */
9
- type AnalyzedSpecType = 'operation' | 'event' | 'presentation' | 'feature' | 'capability' | 'data-view' | 'form' | 'migration' | 'workflow' | 'experiment' | 'integration' | 'knowledge' | 'telemetry' | 'app-config' | 'policy' | 'test-spec' | 'unknown';
9
+ type AnalyzedSpecType = 'operation' | 'event' | 'presentation' | 'feature' | 'capability' | 'data-view' | 'form' | 'migration' | 'workflow' | 'experiment' | 'integration' | 'knowledge' | 'knowledge' | 'telemetry' | 'example' | 'app-config' | 'policy' | 'test-spec' | 'type' | 'unknown';
10
10
  /**
11
11
  * Types that can be referenced by features.
12
12
  */
13
13
  type RefType = 'operation' | 'event' | 'presentation' | 'capability' | 'experiment' | 'policy' | 'test';
14
+ /**
14
15
  /**
15
16
  * Operation kind detected from file analysis.
16
17
  */
17
- type AnalyzedOperationKind = 'command' | 'query' | 'unknown';
18
+ type AnalyzedOperationKind = 'command' | 'query' | 'event' | 'presentation' | 'capability' | 'policy' | 'type' | 'example' | 'app-config' | 'integration' | 'workflow' | 'unknown';
18
19
  /**
19
20
  * Reference information (name + version).
20
21
  */
@@ -22,6 +23,15 @@ interface RefInfo {
22
23
  key: string;
23
24
  version: string;
24
25
  }
26
+ /**
27
+ * Test target extracted from a TestSpec.
28
+ * Matches the TestTarget type from @contractspec/lib.contracts.
29
+ */
30
+ interface ExtractedTestTarget {
31
+ type: 'operation' | 'workflow';
32
+ key: string;
33
+ version?: string;
34
+ }
25
35
  /**
26
36
  * A reference extracted from source code with location context.
27
37
  */
@@ -56,6 +66,11 @@ interface SpecScanResult {
56
66
  emittedEvents?: RefInfo[];
57
67
  policyRefs?: RefInfo[];
58
68
  testRefs?: RefInfo[];
69
+ testTarget?: ExtractedTestTarget;
70
+ testCoverage?: {
71
+ hasSuccess: boolean;
72
+ hasError: boolean;
73
+ };
59
74
  sourceBlock?: string;
60
75
  }
61
76
  /**
@@ -64,6 +79,7 @@ interface SpecScanResult {
64
79
  interface FeatureScanResult {
65
80
  filePath: string;
66
81
  key: string;
82
+ version?: string;
67
83
  title?: string;
68
84
  description?: string;
69
85
  goal?: string;
@@ -84,6 +100,11 @@ interface FeatureScanResult {
84
100
  op: RefInfo;
85
101
  pres: RefInfo;
86
102
  }[];
103
+ presentationsTargets?: {
104
+ key: string;
105
+ version: string;
106
+ targets: Record<string, unknown>[];
107
+ }[];
87
108
  sourceBlock?: string;
88
109
  }
89
110
  /**
@@ -174,5 +195,5 @@ interface ValidationResult {
174
195
  warnings: string[];
175
196
  }
176
197
  //#endregion
177
- export { AnalyzedOperationKind, AnalyzedSpecType, ContractGraph, ContractNode, ExampleScanResult, ExtractedRef, FeatureScanResult, RefInfo, RefType, SemanticDiffItem, SemanticDiffOptions, SemanticDiffType, SpecScanResult, ValidationResult };
198
+ export { AnalyzedOperationKind, AnalyzedSpecType, ContractGraph, ContractNode, ExampleScanResult, ExtractedRef, ExtractedTestTarget, FeatureScanResult, RefInfo, RefType, SemanticDiffItem, SemanticDiffOptions, SemanticDiffType, SpecScanResult, ValidationResult };
178
199
  //# sourceMappingURL=analysis-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis-types.d.ts","names":[],"sources":["../../src/types/analysis-types.ts"],"sourcesContent":[],"mappings":";;;;AAgCA;AAYA;AAKA;AAQA;AAWiB,KA1DL,gBAAA,GA0DmB,WAAA,GAAA,OAAA,GAAA,cAAA,GAAA,SAAA,GAAA,YAAA,GAAA,WAAA,GAAA,MAAA,GAAA,WAAA,GAAA,UAAA,GAAA,YAAA,GAAA,aAAA,GAAA,WAAA,GAAA,WAAA,GAAA,YAAA,GAAA,QAAA,GAAA,WAAA,GAAA,SAAA;;;;AAsBb,KA1DN,OAAA,GA0DM,WAAA,GAAA,OAAA,GAAA,cAAA,GAAA,YAAA,GAAA,YAAA,GAAA,QAAA,GAAA,MAAA;;;;AAWD,KAzDL,qBAAA,GAyDsB,SAAA,GAAA,OAAA,GAAA,SAAA;;;;AAejB,UAnEA,OAAA,CAmEA;EACF,GAAA,EAAA,MAAA;EAID,OAAA,EAAA,MAAA;;;;;AAcG,UA9EA,YAAA,CA8EiB;EA6CtB,IAAA,EA1HJ,OA0HI;EAKK,GAAA,EAAA,MAAA;EAWA,OAAA,EAAA,MAAA;EAOA,UAAA,EAAA,MAAY;EAUjB,UAAA,CAAA,EAAA,MAAa;AAKzB;;;;UAtJiB,cAAA;;YAEL;;;SAGH;cACK;;;;;;;;;;;;kBAgBI;eACH;aACF;;;;;;UASI,iBAAA;;;;;;;;cAQH;;;cAKA;UACJ;iBACO;eACF;;cAID;cACA;;;QAIiB;UAAe;;;;;;;UAS7B,iBAAA;;;;;;;;;cASH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoCF,gBAAA;;;;UAKK,gBAAA;QACT;;;;;;;;;UAUS,mBAAA;;;;;;UAOA,YAAA;;;;;;;;;KAUL,aAAA,GAAgB,YAAY;;;;UAKvB,gBAAA"}
1
+ {"version":3,"file":"analysis-types.d.ts","names":[],"sources":["../../src/types/analysis-types.ts"],"sourcesContent":[],"mappings":";;;;AAmCA;AAaA;AAiBA;AASA;AASiB,KAzEL,gBAAA,GA0EJ,WAAO,GAAA,OAAA,GAAA,cAAA,GAAA,SAAA,GAAA,YAAA,GAAA,WAAA,GAAA,MAAA,GAAA,WAAA,GAAA,UAAA,GAAA,YAAA,GAAA,aAAA,GAAA,WAAA,GAAA,WAAA,GAAA,WAAA,GAAA,SAAA,GAAA,YAAA,GAAA,QAAA,GAAA,WAAA,GAAA,MAAA,GAAA,SAAA;AAUf;;;AAMc,KAjEF,OAAA,GAiEE,WAAA,GAAA,OAAA,GAAA,cAAA,GAAA,YAAA,GAAA,YAAA,GAAA,QAAA,GAAA,MAAA;;;;;AAqBoB,KAzEtB,qBAAA,GAyEsB,SAAA,GAAA,OAAA,GAAA,OAAA,GAAA,cAAA,GAAA,YAAA,GAAA,QAAA,GAAA,MAAA,GAAA,SAAA,GAAA,YAAA,GAAA,aAAA,GAAA,UAAA,GAAA,SAAA;AAalC;;;AAeU,UApFO,OAAA,CAoFP;EACO,GAAA,EAAA,MAAA;EACF,OAAA,EAAA,MAAA;;;;;;AAeI,UA5FF,mBAAA,CA4FE;EAUF,IAAA,EAAA,WAAA,GAAiB,UAAA;EA6CtB,GAAA,EAAA,MAAA;EAKK,OAAA,CAAA,EAAA,MAAA;AAWjB;AAOA;AAUA;AAKA;UAhLiB,YAAA;QACT;;;;;;;;;UAUS,cAAA;;YAEL;;;SAGH;cACK;;;;;;;;;;;;kBAgBI;eACH;aACF;eAGE;;;;;;;;;;UAaE,iBAAA;;;;;;;;;cASH;;;cAKA;UACJ;iBACO;eACF;;cAID;cACA;;;QAIiB;UAAe;;;;;aAMjC;;;;;;;UAUI,iBAAA;;;;;;;;;cASH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoCF,gBAAA;;;;UAKK,gBAAA;QACT;;;;;;;;;UAUS,mBAAA;;;;;;UAOA,YAAA;;;;;;;;;KAUL,aAAA,GAAgB,YAAY;;;;UAKvB,gBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"generation-types.js","names":["DEFAULT_WORKSPACE_CONFIG: WorkspaceConfig"],"sources":["../../src/types/generation-types.ts"],"sourcesContent":["/**\n * Code generation related type definitions.\n */\n\nimport type { OpKind } from '@contractspec/lib.contracts';\nimport type { SpecType, PresentationKind } from './spec-types';\nimport type { RuleSyncConfig } from './rulesync-types';\n\n/**\n * AI provider options for generation.\n */\nexport interface AIGenerationOptions {\n provider: 'claude' | 'openai' | 'ollama' | 'custom';\n model?: string;\n endpoint?: string;\n stream?: boolean;\n}\n\n/**\n * Result of code generation.\n */\nexport interface GenerationResult {\n code: string;\n filePath: string;\n specType: SpecType;\n}\n\n/**\n * Build target types.\n */\nexport type GenerationTarget = 'handler' | 'component' | 'form';\n\n/**\n * Test target types.\n */\nexport type TestTarget = 'handler' | 'component';\n\n/**\n * Spec build type detected during build.\n */\nexport type SpecBuildType =\n | 'operation'\n | 'presentation'\n | 'form'\n | 'event'\n | 'workflow'\n | 'data-view'\n | 'telemetry'\n | 'migration'\n | 'experiment'\n | 'app-config'\n | 'integration'\n | 'knowledge'\n | 'unknown';\n\n/**\n * Configuration for workspace operations.\n */\nexport interface WorkspaceConfig {\n aiProvider: 'claude' | 'openai' | 'ollama' | 'custom';\n aiModel?: string;\n agentMode: 'simple' | 'cursor' | 'claude-code' | 'openai-codex';\n customEndpoint?: string | null;\n customApiKey?: string | null;\n outputDir: string;\n conventions: {\n operations: string;\n events: string;\n presentations: string;\n forms: string;\n workflows?: string;\n 'data-views'?: string;\n dataViews?: string;\n migrations?: string;\n telemetry?: string;\n experiments?: string;\n appConfig?: string;\n integrations?: string;\n knowledge?: string;\n };\n defaultOwners: string[];\n defaultTags: string[];\n ruleSync?: RuleSyncConfig;\n}\n\n/**\n * Default workspace configuration.\n */\nexport const DEFAULT_WORKSPACE_CONFIG: WorkspaceConfig = {\n aiProvider: 'claude',\n agentMode: 'simple',\n outputDir: './src',\n conventions: {\n operations: 'interactions/commands|queries',\n events: 'events',\n presentations: 'presentations',\n forms: 'forms',\n },\n defaultOwners: [],\n defaultTags: [],\n};\n\n/**\n * AI prompt context for spec generation.\n */\nexport interface SpecGenerationContext {\n description: string;\n kind?: OpKind;\n presentationKind?: PresentationKind;\n}\n\n/**\n * AI prompt context for code generation.\n */\nexport interface CodeGenerationContext {\n specCode: string;\n targetPath?: string;\n existingCode?: string;\n}\n"],"mappings":";;;;AAwFA,MAAaA,2BAA4C;CACvD,YAAY;CACZ,WAAW;CACX,WAAW;CACX,aAAa;EACX,YAAY;EACZ,QAAQ;EACR,eAAe;EACf,OAAO;EACR;CACD,eAAe,EAAE;CACjB,aAAa,EAAE;CAChB"}
1
+ {"version":3,"file":"generation-types.js","names":[],"sources":["../../src/types/generation-types.ts"],"sourcesContent":["/**\n * Code generation related type definitions.\n */\n\nimport type { OpKind } from '@contractspec/lib.contracts';\nimport type { SpecType, PresentationKind } from './spec-types';\nimport type { RuleSyncConfig } from './rulesync-types';\n\n/**\n * AI provider options for generation.\n */\nexport interface AIGenerationOptions {\n provider: 'claude' | 'openai' | 'ollama' | 'custom';\n model?: string;\n endpoint?: string;\n stream?: boolean;\n}\n\n/**\n * Result of code generation.\n */\nexport interface GenerationResult {\n code: string;\n filePath: string;\n specType: SpecType;\n}\n\n/**\n * Build target types.\n */\nexport type GenerationTarget = 'handler' | 'component' | 'form';\n\n/**\n * Test target types.\n */\nexport type TestTarget = 'handler' | 'component';\n\n/**\n * Spec build type detected during build.\n */\nexport type SpecBuildType =\n | 'operation'\n | 'presentation'\n | 'form'\n | 'event'\n | 'workflow'\n | 'data-view'\n | 'telemetry'\n | 'migration'\n | 'experiment'\n | 'app-config'\n | 'integration'\n | 'knowledge'\n | 'unknown';\n\n/**\n * Configuration for workspace operations.\n */\nexport interface WorkspaceConfig {\n aiProvider: 'claude' | 'openai' | 'ollama' | 'custom';\n aiModel?: string;\n agentMode: 'simple' | 'cursor' | 'claude-code' | 'openai-codex';\n customEndpoint?: string | null;\n customApiKey?: string | null;\n outputDir: string;\n conventions: {\n operations: string;\n events: string;\n presentations: string;\n forms: string;\n workflows?: string;\n 'data-views'?: string;\n dataViews?: string;\n migrations?: string;\n telemetry?: string;\n experiments?: string;\n appConfig?: string;\n integrations?: string;\n knowledge?: string;\n };\n defaultOwners: string[];\n defaultTags: string[];\n ruleSync?: RuleSyncConfig;\n}\n\n/**\n * Default workspace configuration.\n */\nexport const DEFAULT_WORKSPACE_CONFIG: WorkspaceConfig = {\n aiProvider: 'claude',\n agentMode: 'simple',\n outputDir: './src',\n conventions: {\n operations: 'interactions/commands|queries',\n events: 'events',\n presentations: 'presentations',\n forms: 'forms',\n },\n defaultOwners: [],\n defaultTags: [],\n};\n\n/**\n * AI prompt context for spec generation.\n */\nexport interface SpecGenerationContext {\n description: string;\n kind?: OpKind;\n presentationKind?: PresentationKind;\n}\n\n/**\n * AI prompt context for code generation.\n */\nexport interface CodeGenerationContext {\n specCode: string;\n targetPath?: string;\n existingCode?: string;\n}\n"],"mappings":";;;;AAwFA,MAAa,2BAA4C;CACvD,YAAY;CACZ,WAAW;CACX,WAAW;CACX,aAAa;EACX,YAAY;EACZ,QAAQ;EACR,eAAe;EACf,OAAO;EACR;CACD,eAAe,EAAE;CACjB,aAAa,EAAE;CAChB"}
@@ -55,7 +55,7 @@ interface ParsedSpec {
55
55
  /** Type of spec (operation, event, feature, etc.) */
56
56
  specType: string;
57
57
  /** For operations: command or query */
58
- kind?: 'command' | 'query' | 'unknown';
58
+ kind?: 'command' | 'query' | 'event' | 'presentation' | 'capability' | 'policy' | 'type' | 'example' | 'app-config' | 'integration' | 'workflow' | 'unknown';
59
59
  /** Whether the spec defines input/output schemas */
60
60
  hasIo?: boolean;
61
61
  /** Whether the spec defines policy rules */
@@ -1 +1 @@
1
- {"version":3,"file":"llm-types.d.ts","names":[],"sources":["../../src/types/llm-types.ts"],"sourcesContent":[],"mappings":";;;;AA6BA;AAQA;AAuBA;;;;AAsBa,KApED,eAAA,GAoEC,MAAA,GAAA,QAAA,GAAA,SAAA;;;;AAYY,KA3Eb,SAAA,GA2Ea,aAAA,GAAA,YAAA,GAAA,aAAA;AAMzB;AAcA;AAYA;AAciB,KApHL,gBAAA,GAoHsB,OAAA,GAAA,UAAA,GAAA,UAAA;;;;UA/GjB,OAAA;;;;;;;UAQA,cAAA;;;;;;;;cAQH;;;;;;;;;;;;;;UAeG,UAAA;;QAET;;;;;;;;;;;;;;;;kBAgBU;;eAEH;;aAEF;;;;;;eAQE;;WAEJ;;kBAEO;;;;;UAMD,qBAAA;;UAEP;;;;;;;;;;;UAYO,eAAA;;;;;;UAMP;;;;;UAMO,kBAAA;;;;UAIP;;;;QAIF;;;;;UAMS,iBAAA"}
1
+ {"version":3,"file":"llm-types.d.ts","names":[],"sources":["../../src/types/llm-types.ts"],"sourcesContent":[],"mappings":";;;;AA6BA;AAQA;AAuBA;;;;AAkCa,KAhFD,eAAA,GAgFC,MAAA,GAAA,QAAA,GAAA,SAAA;;;;AAYY,KAvFb,SAAA,GAuFa,aAAA,GAAA,YAAA,GAAA,aAAA;AAMzB;AAcA;AAYA;AAciB,KAhIL,gBAAA,GAgIsB,OAAA,GAAA,UAAA,GAAA,UAAA;;;;UA3HjB,OAAA;;;;;;;UAQA,cAAA;;;;;;;;cAQH;;;;;;;;;;;;;;UAeG,UAAA;;QAET;;;;;;;;;;;;;;;;kBA4BU;;eAEH;;aAEF;;;;;;eAQE;;WAEJ;;kBAEO;;;;;UAMD,qBAAA;;UAEP;;;;;;;;;;;UAYO,eAAA;;;;;;UAMP;;;;;UAMO,kBAAA;;;;UAIP;;;;QAIF;;;;;UAMS,iBAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/module.workspace",
3
- "version": "1.46.2",
3
+ "version": "1.47.0",
4
4
  "description": "Workspace discovery and management module",
5
5
  "keywords": [
6
6
  "contractspec",
@@ -10,8 +10,6 @@
10
10
  "typescript"
11
11
  ],
12
12
  "type": "module",
13
- "main": "./dist/index.js",
14
- "module": "./dist/index.js",
15
13
  "types": "./dist/index.d.ts",
16
14
  "files": [
17
15
  "dist",
@@ -28,18 +26,19 @@
28
26
  "lint": "bun lint:fix",
29
27
  "lint:fix": "eslint src --fix",
30
28
  "lint:check": "eslint src",
31
- "test": "bun run"
29
+ "test": "bun test"
32
30
  },
33
31
  "dependencies": {
34
- "@contractspec/lib.contracts": "1.46.2",
35
- "@contractspec/lib.schema": "1.46.2",
32
+ "@contractspec/lib.contracts": "1.47.0",
33
+ "@contractspec/lib.schema": "1.47.0",
36
34
  "compare-versions": "^6.1.1",
37
- "zod": "^4.1.13"
35
+ "ts-morph": "^27.0.2",
36
+ "zod": "^4.3.5"
38
37
  },
39
38
  "devDependencies": {
40
- "@contractspec/tool.tsdown": "1.46.2",
41
- "@contractspec/tool.typescript": "1.46.2",
42
- "tsdown": "^0.18.3",
39
+ "@contractspec/tool.tsdown": "1.47.0",
40
+ "@contractspec/tool.typescript": "1.47.0",
41
+ "tsdown": "^0.19.0",
43
42
  "typescript": "^5.9.3"
44
43
  },
45
44
  "exports": {