@devtrack-solution/codesdd 1.2.3 → 1.2.4

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 (213) hide show
  1. package/.sdd/skills/curated/devtrack-api/SKILL.md +98 -12
  2. package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +10 -0
  3. package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +10 -0
  4. package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +10 -0
  5. package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +10 -0
  6. package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +10 -0
  7. package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +5 -3
  8. package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +12 -0
  9. package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +61 -5
  10. package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +15 -3
  11. package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +1951 -0
  12. package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +16 -14
  13. package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +40 -0
  14. package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +19 -2
  15. package/.sdd/skills/curated/devtrack-api/references/generated-artifact-invalidation.md +97 -0
  16. package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +30 -1
  17. package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +42 -0
  18. package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +22 -1
  19. package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +9 -7
  20. package/README.md +280 -29
  21. package/dist/applications/sdd/index.d.ts +16 -0
  22. package/dist/applications/sdd/index.js +16 -0
  23. package/dist/cli/program.js +180 -11
  24. package/dist/commands/config.js +197 -10
  25. package/dist/commands/sdd/execution.js +408 -16
  26. package/dist/commands/sdd/plugin.js +5 -0
  27. package/dist/commands/sdd/shared.d.ts +1 -0
  28. package/dist/commands/sdd/shared.js +10 -0
  29. package/dist/commands/sdd.js +157 -7
  30. package/dist/core/cli/command-matrix.d.ts +18 -0
  31. package/dist/core/cli/command-matrix.js +157 -0
  32. package/dist/core/cli-command-quality.js +11 -0
  33. package/dist/core/completions/command-registry.js +45 -0
  34. package/dist/core/config-schema.d.ts +31 -1
  35. package/dist/core/config-schema.js +79 -5
  36. package/dist/core/config.d.ts +1 -0
  37. package/dist/core/config.js +11 -0
  38. package/dist/core/global-config.d.ts +29 -0
  39. package/dist/core/init.d.ts +2 -2
  40. package/dist/core/init.js +13 -14
  41. package/dist/core/sdd/agent-binding.d.ts +19 -19
  42. package/dist/core/sdd/agent-runtime-contract.d.ts +204 -0
  43. package/dist/core/sdd/agent-runtime-contract.js +200 -0
  44. package/dist/core/sdd/allocator-recovery.d.ts +14 -0
  45. package/dist/core/sdd/allocator-recovery.js +30 -0
  46. package/dist/core/sdd/allocator-security.d.ts +18 -0
  47. package/dist/core/sdd/allocator-security.js +36 -0
  48. package/dist/core/sdd/api-foundation-baseline.d.ts +111 -0
  49. package/dist/core/sdd/api-foundation-baseline.js +151 -0
  50. package/dist/core/sdd/api-foundation-parity.d.ts +114 -0
  51. package/dist/core/sdd/api-foundation-parity.js +131 -0
  52. package/dist/core/sdd/api-profile-catalog.d.ts +36 -0
  53. package/dist/core/sdd/api-profile-catalog.js +132 -0
  54. package/dist/core/sdd/api-profile-dry-run-projection.d.ts +93 -0
  55. package/dist/core/sdd/api-profile-dry-run-projection.js +370 -0
  56. package/dist/core/sdd/api-profile-recipes.d.ts +82 -0
  57. package/dist/core/sdd/api-profile-recipes.js +484 -0
  58. package/dist/core/sdd/artifact-id-allocator.d.ts +368 -0
  59. package/dist/core/sdd/artifact-id-allocator.js +510 -0
  60. package/dist/core/sdd/check.d.ts +52 -1
  61. package/dist/core/sdd/check.js +326 -11
  62. package/dist/core/sdd/coordination/coordination-adapters.d.ts +15 -8
  63. package/dist/core/sdd/coordination/coordination-adapters.js +43 -15
  64. package/dist/core/sdd/coordination/index.d.ts +1 -0
  65. package/dist/core/sdd/coordination/index.js +1 -0
  66. package/dist/core/sdd/coordination/redis-runtime.d.ts +131 -0
  67. package/dist/core/sdd/coordination/redis-runtime.js +698 -0
  68. package/dist/core/sdd/deepagent-contracts.d.ts +99 -5
  69. package/dist/core/sdd/deepagent-contracts.js +62 -0
  70. package/dist/core/sdd/deepagents/reversa-subagents.d.ts +3 -3
  71. package/dist/core/sdd/default-bootstrap-files.d.ts +2 -2
  72. package/dist/core/sdd/default-bootstrap-files.js +14 -10
  73. package/dist/core/sdd/default-skills.js +115 -9
  74. package/dist/core/sdd/devtrack-api-appliance.d.ts +42 -1
  75. package/dist/core/sdd/devtrack-api-appliance.js +159 -32
  76. package/dist/core/sdd/devtrack-api-architecture.d.ts +16 -0
  77. package/dist/core/sdd/devtrack-api-architecture.js +86 -0
  78. package/dist/core/sdd/docs-sync.js +24 -18
  79. package/dist/core/sdd/domain/capability-diff.d.ts +63 -0
  80. package/dist/core/sdd/domain/capability-diff.js +200 -0
  81. package/dist/core/sdd/domain/change-safety-guardrails.d.ts +74 -0
  82. package/dist/core/sdd/domain/change-safety-guardrails.js +333 -0
  83. package/dist/core/sdd/domain/semantic-intent-classifier.d.ts +29 -0
  84. package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
  85. package/dist/core/sdd/enterprise-mutating-command-gate.d.ts +27 -0
  86. package/dist/core/sdd/enterprise-mutating-command-gate.js +104 -0
  87. package/dist/core/sdd/enterprise-provenance-gates.d.ts +20 -0
  88. package/dist/core/sdd/enterprise-provenance-gates.js +63 -0
  89. package/dist/core/sdd/enterprise-provisioning-policy.d.ts +26 -0
  90. package/dist/core/sdd/enterprise-provisioning-policy.js +104 -0
  91. package/dist/core/sdd/foundation-artifact-map-validator.d.ts +16 -0
  92. package/dist/core/sdd/foundation-artifact-map-validator.js +71 -0
  93. package/dist/core/sdd/foundation-layer-manifest.d.ts +24 -0
  94. package/dist/core/sdd/foundation-layer-manifest.js +117 -0
  95. package/dist/core/sdd/governance-schemas.d.ts +2 -2
  96. package/dist/core/sdd/governance-schemas.js +11 -2
  97. package/dist/core/sdd/intent-guard.d.ts +22 -0
  98. package/dist/core/sdd/intent-guard.js +67 -0
  99. package/dist/core/sdd/json-schema.js +13 -1
  100. package/dist/core/sdd/legacy-operations.js +169 -5
  101. package/dist/core/sdd/migrate-workspace.js +39 -0
  102. package/dist/core/sdd/package-security-gates.d.ts +21 -0
  103. package/dist/core/sdd/package-security-gates.js +121 -0
  104. package/dist/core/sdd/package-structure-gate.d.ts +85 -3
  105. package/dist/core/sdd/package-structure-gate.js +384 -11
  106. package/dist/core/sdd/parallel-feat-automation.d.ts +185 -7
  107. package/dist/core/sdd/parallel-feat-automation.js +212 -0
  108. package/dist/core/sdd/plugin-broker.d.ts +223 -4
  109. package/dist/core/sdd/plugin-broker.js +10 -0
  110. package/dist/core/sdd/plugin-cli.d.ts +30 -0
  111. package/dist/core/sdd/plugin-cli.js +70 -3
  112. package/dist/core/sdd/plugin-evidence.d.ts +73 -0
  113. package/dist/core/sdd/plugin-manifest.d.ts +69 -1
  114. package/dist/core/sdd/plugin-manifest.js +10 -0
  115. package/dist/core/sdd/plugin-policy-pack.d.ts +1 -1
  116. package/dist/core/sdd/plugin-policy.js +6 -1
  117. package/dist/core/sdd/plugin-registry.d.ts +138 -2
  118. package/dist/core/sdd/plugin-sdk-contract.d.ts +363 -0
  119. package/dist/core/sdd/plugin-sdk-contract.js +268 -0
  120. package/dist/core/sdd/plugin-skill-binding.d.ts +1 -1
  121. package/dist/core/sdd/quality-validation.d.ts +89 -16
  122. package/dist/core/sdd/release-readiness.d.ts +68 -0
  123. package/dist/core/sdd/release-readiness.js +767 -0
  124. package/dist/core/sdd/reversa-architecture-extractor.d.ts +13 -0
  125. package/dist/core/sdd/reversa-architecture-extractor.js +89 -0
  126. package/dist/core/sdd/reversa-artifact-writer.d.ts +18 -0
  127. package/dist/core/sdd/reversa-artifact-writer.js +40 -0
  128. package/dist/core/sdd/reversa-command-policy.d.ts +136 -0
  129. package/dist/core/sdd/reversa-command-policy.js +361 -0
  130. package/dist/core/sdd/reversa-data-extractor.d.ts +11 -0
  131. package/dist/core/sdd/reversa-data-extractor.js +73 -0
  132. package/dist/core/sdd/reversa-equivalence.d.ts +20 -0
  133. package/dist/core/sdd/reversa-equivalence.js +34 -0
  134. package/dist/core/sdd/reversa-evidence.d.ts +298 -0
  135. package/dist/core/sdd/reversa-evidence.js +118 -0
  136. package/dist/core/sdd/reversa-reconstruction.d.ts +29 -0
  137. package/dist/core/sdd/reversa-reconstruction.js +32 -0
  138. package/dist/core/sdd/reversa-rules-extractor.d.ts +12 -0
  139. package/dist/core/sdd/reversa-rules-extractor.js +86 -0
  140. package/dist/core/sdd/reversa-source-safety.d.ts +19 -0
  141. package/dist/core/sdd/reversa-source-safety.js +105 -0
  142. package/dist/core/sdd/reversa-surface-scout.d.ts +13 -0
  143. package/dist/core/sdd/reversa-surface-scout.js +85 -0
  144. package/dist/core/sdd/reversa-ux-mapper.d.ts +11 -0
  145. package/dist/core/sdd/reversa-ux-mapper.js +73 -0
  146. package/dist/core/sdd/runtime-boundary-contract.d.ts +45 -0
  147. package/dist/core/sdd/runtime-boundary-contract.js +90 -0
  148. package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +150 -0
  149. package/dist/core/sdd/sdk-agent-plugin-quality-gates.js +258 -0
  150. package/dist/core/sdd/services/agent-run.service.d.ts +38 -6
  151. package/dist/core/sdd/services/agent-run.service.js +73 -1
  152. package/dist/core/sdd/services/archive-quality-coherence.service.d.ts +17 -0
  153. package/dist/core/sdd/services/archive-quality-coherence.service.js +141 -0
  154. package/dist/core/sdd/services/capability-diff.service.d.ts +18 -0
  155. package/dist/core/sdd/services/capability-diff.service.js +26 -0
  156. package/dist/core/sdd/services/change-safety-preflight.service.d.ts +17 -0
  157. package/dist/core/sdd/services/change-safety-preflight.service.js +17 -0
  158. package/dist/core/sdd/services/context.service.d.ts +43 -340
  159. package/dist/core/sdd/services/context.service.js +323 -9
  160. package/dist/core/sdd/services/decide.service.js +1 -1
  161. package/dist/core/sdd/services/finalize.service.d.ts +27 -0
  162. package/dist/core/sdd/services/finalize.service.js +226 -18
  163. package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
  164. package/dist/core/sdd/services/historical-quality-regression.service.d.ts +35 -0
  165. package/dist/core/sdd/services/historical-quality-regression.service.js +228 -0
  166. package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
  167. package/dist/core/sdd/services/planning-execution-coherence.service.d.ts +45 -0
  168. package/dist/core/sdd/services/planning-execution-coherence.service.js +225 -0
  169. package/dist/core/sdd/services/semantic-intent-classifier.service.d.ts +6 -0
  170. package/dist/core/sdd/services/semantic-intent-classifier.service.js +7 -0
  171. package/dist/core/sdd/state.d.ts +1 -0
  172. package/dist/core/sdd/state.js +266 -34
  173. package/dist/core/sdd/store/sdd-stores.js +2 -2
  174. package/dist/core/sdd/structural-health.d.ts +13 -13
  175. package/dist/core/sdd/types.d.ts +30 -15
  176. package/dist/core/sdd/types.js +4 -0
  177. package/dist/core/sdd/views.js +17 -0
  178. package/dist/core/sdd/workspace-schemas.d.ts +428 -7
  179. package/dist/core/sdd/workspace-schemas.js +223 -70
  180. package/dist/core/shared/skill-generation.d.ts +2 -0
  181. package/dist/core/shared/skill-generation.js +19 -2
  182. package/dist/core/shared/tool-detection.d.ts +19 -0
  183. package/dist/core/shared/tool-detection.js +89 -0
  184. package/dist/domains/sdd/index.d.ts +6 -0
  185. package/dist/domains/sdd/index.js +6 -0
  186. package/dist/infrastructures/sdd/index.d.ts +7 -0
  187. package/dist/infrastructures/sdd/index.js +6 -0
  188. package/dist/presentations/cli/sdd/index.d.ts +3 -0
  189. package/dist/presentations/cli/sdd/index.js +3 -0
  190. package/dist/shared/sdd/index.d.ts +3 -0
  191. package/dist/shared/sdd/index.js +2 -0
  192. package/package.json +14 -10
  193. package/schemas/sdd/2-plan.schema.json +207 -2
  194. package/schemas/sdd/5-quality.schema.json +324 -25
  195. package/schemas/sdd/agent-runtime-command-plan.schema.json +212 -0
  196. package/schemas/sdd/agent-runtime-opencode-run-evidence.schema.json +270 -0
  197. package/schemas/sdd/codesdd-plugin.schema.json +171 -0
  198. package/schemas/sdd/deepagent-run-request.schema.json +316 -0
  199. package/schemas/sdd/parallel-feat-automation-plan.schema.json +89 -0
  200. package/schemas/sdd/parallel-feat-scheduler-request.schema.json +116 -0
  201. package/schemas/sdd/parallel-feat-scheduler-result.schema.json +404 -0
  202. package/schemas/sdd/plugin-artifact-manifest.schema.json +109 -0
  203. package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
  204. package/schemas/sdd/plugin-evidence-manifest.schema.json +109 -0
  205. package/schemas/sdd/plugin-language-runtime.schema.json +103 -0
  206. package/schemas/sdd/plugin-package-governance.schema.json +74 -0
  207. package/schemas/sdd/plugin-registry.schema.json +171 -0
  208. package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +109 -0
  209. package/schemas/sdd/quality-evidence-bundle.schema.json +109 -0
  210. package/schemas/sdd/reversa-evidence-bundle.schema.json +466 -0
  211. package/schemas/sdd/sdk-agent-plugin-quality-gate-input.schema.json +168 -0
  212. package/schemas/sdd/sdk-agent-plugin-quality-gate-report.schema.json +160 -0
  213. package/schemas/sdd/workspace-catalog.schema.json +5298 -1409
@@ -20,6 +20,36 @@ export const GlobalConfigSchema = z
20
20
  workflows: z
21
21
  .array(z.string())
22
22
  .optional(),
23
+ redis: z
24
+ .object({
25
+ enabled: z.boolean().optional(),
26
+ url: z.string().min(1).optional(),
27
+ url_env: z.string().min(1).optional(),
28
+ namespace: z.string().min(1).optional(),
29
+ tls: z.boolean().optional(),
30
+ connect_timeout_ms: z.number().int().positive().optional(),
31
+ command_timeout_ms: z.number().int().positive().optional(),
32
+ max_retries: z.number().int().min(0).optional(),
33
+ fallback: z.enum(['filesystem', 'none']).optional(),
34
+ cache_default_ttl_ms: z.number().int().positive().optional(),
35
+ lock_ttl_ms: z.number().int().positive().optional(),
36
+ stream_max_len: z.number().int().positive().optional(),
37
+ })
38
+ .optional(),
39
+ enterprise: z
40
+ .object({
41
+ provisioning: z
42
+ .object({
43
+ mode: z.enum(['local', 'enterprise']).optional(),
44
+ project_id: z.string().min(1).optional(),
45
+ authority_url: z.string().min(1).optional(),
46
+ authority_url_env: z.string().min(1).optional(),
47
+ tenant_id: z.string().min(1).optional(),
48
+ required_for_numbered_artifacts: z.boolean().optional(),
49
+ })
50
+ .optional(),
51
+ })
52
+ .optional(),
23
53
  })
24
54
  .passthrough();
25
55
  /**
@@ -30,7 +60,7 @@ export const DEFAULT_CONFIG = {
30
60
  profile: 'core',
31
61
  delivery: 'both',
32
62
  };
33
- const KNOWN_TOP_LEVEL_KEYS = new Set([...Object.keys(DEFAULT_CONFIG), 'workflows']);
63
+ const KNOWN_TOP_LEVEL_KEYS = new Set([...Object.keys(DEFAULT_CONFIG), 'workflows', 'redis', 'enterprise']);
34
64
  const SENSITIVE_KEY_TOKENS = ['key', 'secret', 'token', 'password', 'credential', 'private', 'auth'];
35
65
  /**
36
66
  * Validate a config key path for CLI set operations.
@@ -51,6 +81,46 @@ export function validateConfigKeyPath(path) {
51
81
  }
52
82
  return { valid: true };
53
83
  }
84
+ if (rootKey === 'redis') {
85
+ if (rawKeys.length !== 2) {
86
+ return { valid: false, reason: 'redis settings support one nested key' };
87
+ }
88
+ const redisKeys = new Set([
89
+ 'enabled',
90
+ 'url',
91
+ 'url_env',
92
+ 'namespace',
93
+ 'tls',
94
+ 'connect_timeout_ms',
95
+ 'command_timeout_ms',
96
+ 'max_retries',
97
+ 'fallback',
98
+ 'cache_default_ttl_ms',
99
+ 'lock_ttl_ms',
100
+ 'stream_max_len',
101
+ ]);
102
+ if (!redisKeys.has(rawKeys[1])) {
103
+ return { valid: false, reason: `Unknown redis key "${rawKeys[1]}"` };
104
+ }
105
+ return { valid: true };
106
+ }
107
+ if (rootKey === 'enterprise') {
108
+ if (rawKeys.length !== 3 || rawKeys[1] !== 'provisioning') {
109
+ return { valid: false, reason: 'enterprise settings use enterprise.provisioning.<key>' };
110
+ }
111
+ const provisioningKeys = new Set([
112
+ 'mode',
113
+ 'project_id',
114
+ 'authority_url',
115
+ 'authority_url_env',
116
+ 'tenant_id',
117
+ 'required_for_numbered_artifacts',
118
+ ]);
119
+ if (!provisioningKeys.has(rawKeys[2])) {
120
+ return { valid: false, reason: `Unknown enterprise provisioning key "${rawKeys[2]}"` };
121
+ }
122
+ return { valid: true };
123
+ }
54
124
  if (rawKeys.length > 1) {
55
125
  return { valid: false, reason: `"${rootKey}" does not support nested keys` };
56
126
  }
@@ -216,22 +286,26 @@ export function isSensitiveConfigPath(path) {
216
286
  .split('.')
217
287
  .map((segment) => segment.trim().toLowerCase())
218
288
  .filter(Boolean);
289
+ if (segments.length >= 2 && segments[0] === 'redis' && segments[segments.length - 1] === 'url') {
290
+ return true;
291
+ }
219
292
  return segments.some((segment) => SENSITIVE_KEY_TOKENS.some((token) => segment.includes(token)));
220
293
  }
221
- export function redactConfigSecrets(value) {
294
+ export function redactConfigSecrets(value, parentPath = '') {
222
295
  if (Array.isArray(value)) {
223
- return value.map((entry) => redactConfigSecrets(entry));
296
+ return value.map((entry) => redactConfigSecrets(entry, parentPath));
224
297
  }
225
298
  if (!value || typeof value !== 'object') {
226
299
  return value;
227
300
  }
228
301
  const redacted = {};
229
302
  for (const [key, entryValue] of Object.entries(value)) {
230
- if (isSensitiveConfigPath(key)) {
303
+ const path = parentPath ? `${parentPath}.${key}` : key;
304
+ if (isSensitiveConfigPath(path)) {
231
305
  redacted[key] = '[REDACTED]';
232
306
  continue;
233
307
  }
234
- redacted[key] = redactConfigSecrets(entryValue);
308
+ redacted[key] = redactConfigSecrets(entryValue, path);
235
309
  }
236
310
  return redacted;
237
311
  }
@@ -13,5 +13,6 @@ export interface AIToolOption {
13
13
  successLabel?: string;
14
14
  skillsDir?: string;
15
15
  }
16
+ export declare function getToolInstallGuidance(toolIds: readonly string[]): string[];
16
17
  export declare const AI_TOOLS: AIToolOption[];
17
18
  //# sourceMappingURL=config.d.ts.map
@@ -3,6 +3,17 @@ export const CODESDD_MARKERS = {
3
3
  start: '<!-- CODESDD:START -->',
4
4
  end: '<!-- CODESDD:END -->'
5
5
  };
6
+ export function getToolInstallGuidance(toolIds) {
7
+ const normalized = new Set(toolIds.map((toolId) => toolId.toLowerCase()));
8
+ const notes = [];
9
+ if (normalized.size > 0) {
10
+ notes.push('Tool scope: generated assistant skills/prompts only; canonical project state stays in .sdd/.');
11
+ }
12
+ if (normalized.has('opencode')) {
13
+ notes.push('OpenCode tool id: use --tools opencode for generated assistant assets; use --provider open-code only for SDD MCP bridge commands.');
14
+ }
15
+ return notes;
16
+ }
6
17
  export const AI_TOOLS = [
7
18
  { name: 'Amazon Q Developer', value: 'amazon-q', available: true, successLabel: 'Amazon Q Developer', skillsDir: '.amazonq' },
8
19
  { name: 'Antigravity', value: 'antigravity', available: true, successLabel: 'Antigravity', skillsDir: '.agent' },
@@ -7,11 +7,40 @@ export declare const LEGACY_GLOBAL_CONFIG_DIR_NAME = "codesdd";
7
7
  export declare const LEGACY_GLOBAL_CONFIG_FILE_NAME = "config.json";
8
8
  export type Profile = 'core' | 'custom';
9
9
  export type Delivery = 'both' | 'skills' | 'commands';
10
+ export type RedisFallbackMode = 'filesystem' | 'none';
11
+ export interface RedisGlobalConfig {
12
+ enabled?: boolean;
13
+ url?: string;
14
+ url_env?: string;
15
+ namespace?: string;
16
+ tls?: boolean;
17
+ connect_timeout_ms?: number;
18
+ command_timeout_ms?: number;
19
+ max_retries?: number;
20
+ fallback?: RedisFallbackMode;
21
+ cache_default_ttl_ms?: number;
22
+ lock_ttl_ms?: number;
23
+ stream_max_len?: number;
24
+ }
25
+ export type EnterpriseProvisioningMode = 'local' | 'enterprise';
26
+ export interface EnterpriseProvisioningGlobalConfig {
27
+ mode?: EnterpriseProvisioningMode;
28
+ project_id?: string;
29
+ authority_url?: string;
30
+ authority_url_env?: string;
31
+ tenant_id?: string;
32
+ required_for_numbered_artifacts?: boolean;
33
+ }
34
+ export interface EnterpriseGlobalConfig {
35
+ provisioning?: EnterpriseProvisioningGlobalConfig;
36
+ }
10
37
  export interface GlobalConfig {
11
38
  featureFlags?: Record<string, boolean>;
12
39
  profile?: Profile;
13
40
  delivery?: Delivery;
14
41
  workflows?: string[];
42
+ redis?: RedisGlobalConfig;
43
+ enterprise?: EnterpriseGlobalConfig;
15
44
  }
16
45
  export declare function parseTomlContent(content: string): Record<string, unknown>;
17
46
  export declare function stringifyTomlContent(value: Record<string, unknown>): string;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Init Command
3
3
  *
4
- * Sets up CodeSDD with Agent Skills and /opsx:* slash commands.
5
- * This is the unified setup command that replaces both the old init and experimental commands.
4
+ * Sets up CodeSDD agent skills and compatibility slash commands.
5
+ * The canonical project lifecycle lives under .sdd and codesdd sdd commands.
6
6
  */
7
7
  type InitCommandOptions = {
8
8
  tools?: string;
package/dist/core/init.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Init Command
3
3
  *
4
- * Sets up CodeSDD with Agent Skills and /opsx:* slash commands.
5
- * This is the unified setup command that replaces both the old init and experimental commands.
4
+ * Sets up CodeSDD agent skills and compatibility slash commands.
5
+ * The canonical project lifecycle lives under .sdd and codesdd sdd commands.
6
6
  */
7
7
  import path from 'path';
8
8
  import chalk from 'chalk';
@@ -11,7 +11,7 @@ import * as fs from 'fs';
11
11
  import { createRequire } from 'module';
12
12
  import { FileSystemUtils } from '../utils/file-system.js';
13
13
  import { transformToHyphenCommands } from '../utils/command-references.js';
14
- import { AI_TOOLS, LEGACY_SPEC_DIR_NAME, } from './config.js';
14
+ import { AI_TOOLS, LEGACY_SPEC_DIR_NAME, getToolInstallGuidance, } from './config.js';
15
15
  import { isInteractive } from '../utils/interactive.js';
16
16
  import { generateCommands, CommandAdapterRegistry, } from './command-generation/index.js';
17
17
  import { CLI_ISSUES_URL, CLI_NAME, CLI_PRODUCT_NAME, CLI_REPOSITORY_URL } from './branding.js';
@@ -515,6 +515,10 @@ export class InitCommand {
515
515
  if (results.removedSkillCount > 0) {
516
516
  this.log(chalk.dim(`Removed: ${results.removedSkillCount} skill directories (delivery: commands)`));
517
517
  }
518
+ const toolNotes = getToolInstallGuidance(successfulTools.map((tool) => tool.value));
519
+ for (const note of toolNotes) {
520
+ this.log(chalk.dim(note));
521
+ }
518
522
  // Config status
519
523
  if (configStatus === 'exists') {
520
524
  // Show actual filename (config.yaml or config.yml)
@@ -528,21 +532,16 @@ export class InitCommand {
528
532
  else {
529
533
  this.log(chalk.dim(`Project config: not created (SDD uses .sdd/config.yaml)`));
530
534
  }
531
- // Getting started (task 7.6: show propose if in profile)
535
+ // Getting started
532
536
  const globalCfg = getGlobalConfig();
533
537
  const activeProfile = this.profileOverride ?? globalCfg.profile ?? 'core';
534
538
  const activeWorkflows = [...getProfileWorkflows(activeProfile, globalCfg.workflows)];
535
539
  this.log();
536
- if (activeWorkflows.includes('propose')) {
537
- this.log(chalk.bold('Getting started:'));
538
- this.log(' Start your first change: /opsx:propose "your idea"');
539
- }
540
- else if (activeWorkflows.includes('new')) {
541
- this.log(chalk.bold('Getting started:'));
542
- this.log(' Start your first change: /opsx:new "your idea"');
543
- }
544
- else {
545
- this.log(`Done. Run '${CLI_NAME} config profile' to configure your workflows.`);
540
+ this.log(chalk.bold('Getting started:'));
541
+ this.log(` Full project bootstrap: ${CLI_NAME} install`);
542
+ this.log(` Canonical first change: ${CLI_NAME} sdd insight "your idea"`);
543
+ if (activeWorkflows.includes('propose') || activeWorkflows.includes('new')) {
544
+ this.log(chalk.dim(' Compatibility slash commands were generated for existing workflows; prefer CodeSDD SDD commands in .sdd-native projects.'));
546
545
  }
547
546
  // Links
548
547
  this.log();
@@ -1,17 +1,17 @@
1
1
  import { z } from 'zod';
2
2
  declare const agentProviderSchema: z.ZodEnum<{
3
- codex: "codex";
4
3
  opencode: "opencode";
4
+ codex: "codex";
5
5
  deepagents: "deepagents";
6
6
  fake: "fake";
7
7
  "claude-code": "claude-code";
8
8
  cloudcode: "cloudcode";
9
9
  }>;
10
10
  declare const agentTaskKindSchema: z.ZodEnum<{
11
+ implementation: "implementation";
11
12
  validation: "validation";
12
13
  planning: "planning";
13
14
  "reverse-engineering": "reverse-engineering";
14
- implementation: "implementation";
15
15
  review: "review";
16
16
  "plugin-execution": "plugin-execution";
17
17
  "adr-governance": "adr-governance";
@@ -32,10 +32,10 @@ declare const riskTierSchema: z.ZodEnum<{
32
32
  }>;
33
33
  export declare const agentBindingCapabilitySchema: z.ZodObject<{
34
34
  task_kind: z.ZodEnum<{
35
+ implementation: "implementation";
35
36
  validation: "validation";
36
37
  planning: "planning";
37
38
  "reverse-engineering": "reverse-engineering";
38
- implementation: "implementation";
39
39
  review: "review";
40
40
  "plugin-execution": "plugin-execution";
41
41
  "adr-governance": "adr-governance";
@@ -61,8 +61,8 @@ export declare const agentBindingAdapterSchema: z.ZodObject<{
61
61
  schema_version: z.ZodDefault<z.ZodLiteral<1>>;
62
62
  id: z.ZodString;
63
63
  provider: z.ZodEnum<{
64
- codex: "codex";
65
64
  opencode: "opencode";
65
+ codex: "codex";
66
66
  deepagents: "deepagents";
67
67
  fake: "fake";
68
68
  "claude-code": "claude-code";
@@ -84,17 +84,17 @@ export declare const agentBindingAdapterSchema: z.ZodObject<{
84
84
  args: z.ZodDefault<z.ZodArray<z.ZodString>>;
85
85
  network: z.ZodDefault<z.ZodEnum<{
86
86
  disabled: "disabled";
87
- restricted: "restricted";
88
87
  enabled: "enabled";
88
+ restricted: "restricted";
89
89
  }>>;
90
90
  evidence_contract: z.ZodDefault<z.ZodString>;
91
91
  }, z.core.$strip>;
92
92
  capabilities: z.ZodArray<z.ZodObject<{
93
93
  task_kind: z.ZodEnum<{
94
+ implementation: "implementation";
94
95
  validation: "validation";
95
96
  planning: "planning";
96
97
  "reverse-engineering": "reverse-engineering";
97
- implementation: "implementation";
98
98
  review: "review";
99
99
  "plugin-execution": "plugin-execution";
100
100
  "adr-governance": "adr-governance";
@@ -137,10 +137,10 @@ export declare const agentBindingResolutionRequestSchema: z.ZodObject<{
137
137
  schema_version: z.ZodDefault<z.ZodLiteral<1>>;
138
138
  feature_ref: z.ZodString;
139
139
  task_kind: z.ZodEnum<{
140
+ implementation: "implementation";
140
141
  validation: "validation";
141
142
  planning: "planning";
142
143
  "reverse-engineering": "reverse-engineering";
143
- implementation: "implementation";
144
144
  review: "review";
145
145
  "plugin-execution": "plugin-execution";
146
146
  "adr-governance": "adr-governance";
@@ -148,16 +148,16 @@ export declare const agentBindingResolutionRequestSchema: z.ZodObject<{
148
148
  "documentation-sync": "documentation-sync";
149
149
  }>;
150
150
  provider: z.ZodOptional<z.ZodEnum<{
151
- codex: "codex";
152
151
  opencode: "opencode";
152
+ codex: "codex";
153
153
  deepagents: "deepagents";
154
154
  fake: "fake";
155
155
  "claude-code": "claude-code";
156
156
  cloudcode: "cloudcode";
157
157
  }>>;
158
158
  allowed_providers: z.ZodDefault<z.ZodArray<z.ZodEnum<{
159
- codex: "codex";
160
159
  opencode: "opencode";
160
+ codex: "codex";
161
161
  deepagents: "deepagents";
162
162
  fake: "fake";
163
163
  "claude-code": "claude-code";
@@ -186,8 +186,8 @@ export declare const agentBindingCandidateSchema: z.ZodObject<{
186
186
  adapter_ref: z.ZodObject<{
187
187
  id: z.ZodString;
188
188
  provider: z.ZodEnum<{
189
- codex: "codex";
190
189
  opencode: "opencode";
190
+ codex: "codex";
191
191
  deepagents: "deepagents";
192
192
  fake: "fake";
193
193
  "claude-code": "claude-code";
@@ -196,10 +196,10 @@ export declare const agentBindingCandidateSchema: z.ZodObject<{
196
196
  label: z.ZodString;
197
197
  }, z.core.$strip>;
198
198
  task_kind: z.ZodEnum<{
199
+ implementation: "implementation";
199
200
  validation: "validation";
200
201
  planning: "planning";
201
202
  "reverse-engineering": "reverse-engineering";
202
- implementation: "implementation";
203
203
  review: "review";
204
204
  "plugin-execution": "plugin-execution";
205
205
  "adr-governance": "adr-governance";
@@ -213,17 +213,17 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
213
213
  schema_version: z.ZodLiteral<1>;
214
214
  created_at: z.ZodString;
215
215
  status: z.ZodEnum<{
216
- resolved: "resolved";
217
216
  fallback: "fallback";
217
+ resolved: "resolved";
218
218
  }>;
219
219
  request: z.ZodObject<{
220
220
  schema_version: z.ZodDefault<z.ZodLiteral<1>>;
221
221
  feature_ref: z.ZodString;
222
222
  task_kind: z.ZodEnum<{
223
+ implementation: "implementation";
223
224
  validation: "validation";
224
225
  planning: "planning";
225
226
  "reverse-engineering": "reverse-engineering";
226
- implementation: "implementation";
227
227
  review: "review";
228
228
  "plugin-execution": "plugin-execution";
229
229
  "adr-governance": "adr-governance";
@@ -231,16 +231,16 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
231
231
  "documentation-sync": "documentation-sync";
232
232
  }>;
233
233
  provider: z.ZodOptional<z.ZodEnum<{
234
- codex: "codex";
235
234
  opencode: "opencode";
235
+ codex: "codex";
236
236
  deepagents: "deepagents";
237
237
  fake: "fake";
238
238
  "claude-code": "claude-code";
239
239
  cloudcode: "cloudcode";
240
240
  }>>;
241
241
  allowed_providers: z.ZodDefault<z.ZodArray<z.ZodEnum<{
242
- codex: "codex";
243
242
  opencode: "opencode";
243
+ codex: "codex";
244
244
  deepagents: "deepagents";
245
245
  fake: "fake";
246
246
  "claude-code": "claude-code";
@@ -269,8 +269,8 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
269
269
  adapter_ref: z.ZodObject<{
270
270
  id: z.ZodString;
271
271
  provider: z.ZodEnum<{
272
- codex: "codex";
273
272
  opencode: "opencode";
273
+ codex: "codex";
274
274
  deepagents: "deepagents";
275
275
  fake: "fake";
276
276
  "claude-code": "claude-code";
@@ -279,10 +279,10 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
279
279
  label: z.ZodString;
280
280
  }, z.core.$strip>;
281
281
  task_kind: z.ZodEnum<{
282
+ implementation: "implementation";
282
283
  validation: "validation";
283
284
  planning: "planning";
284
285
  "reverse-engineering": "reverse-engineering";
285
- implementation: "implementation";
286
286
  review: "review";
287
287
  "plugin-execution": "plugin-execution";
288
288
  "adr-governance": "adr-governance";
@@ -296,8 +296,8 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
296
296
  adapter_ref: z.ZodObject<{
297
297
  id: z.ZodString;
298
298
  provider: z.ZodEnum<{
299
- codex: "codex";
300
299
  opencode: "opencode";
300
+ codex: "codex";
301
301
  deepagents: "deepagents";
302
302
  fake: "fake";
303
303
  "claude-code": "claude-code";
@@ -306,10 +306,10 @@ export declare const agentBindingResolutionSchema: z.ZodObject<{
306
306
  label: z.ZodString;
307
307
  }, z.core.$strip>;
308
308
  task_kind: z.ZodEnum<{
309
+ implementation: "implementation";
309
310
  validation: "validation";
310
311
  planning: "planning";
311
312
  "reverse-engineering": "reverse-engineering";
312
- implementation: "implementation";
313
313
  review: "review";
314
314
  "plugin-execution": "plugin-execution";
315
315
  "adr-governance": "adr-governance";
@@ -0,0 +1,204 @@
1
+ import { z } from 'zod';
2
+ export declare const agentRuntimeProviderSchema: z.ZodEnum<{
3
+ opencode: "opencode";
4
+ codex: "codex";
5
+ deepagents: "deepagents";
6
+ }>;
7
+ export declare const agentRuntimeModeSchema: z.ZodEnum<{
8
+ validate: "validate";
9
+ "read-only": "read-only";
10
+ plan: "plan";
11
+ "apply-sandbox": "apply-sandbox";
12
+ "apply-approved": "apply-approved";
13
+ }>;
14
+ export declare const agentRuntimeSandboxSchema: z.ZodEnum<{
15
+ "read-only": "read-only";
16
+ "workspace-write": "workspace-write";
17
+ "danger-full-access": "danger-full-access";
18
+ }>;
19
+ export declare const agentRuntimeStatusSchema: z.ZodEnum<{
20
+ blocked: "blocked";
21
+ planned: "planned";
22
+ }>;
23
+ export declare const opencodeExecutionStatusSchema: z.ZodEnum<{
24
+ completed: "completed";
25
+ blocked: "blocked";
26
+ planned: "planned";
27
+ failed: "failed";
28
+ skipped: "skipped";
29
+ running: "running";
30
+ }>;
31
+ export declare const agentRuntimeCommandPlanRequestSchema: z.ZodObject<{
32
+ schema_version: z.ZodDefault<z.ZodLiteral<1>>;
33
+ feature_ref: z.ZodString;
34
+ provider: z.ZodEnum<{
35
+ opencode: "opencode";
36
+ codex: "codex";
37
+ deepagents: "deepagents";
38
+ }>;
39
+ mode: z.ZodDefault<z.ZodEnum<{
40
+ validate: "validate";
41
+ "read-only": "read-only";
42
+ plan: "plan";
43
+ "apply-sandbox": "apply-sandbox";
44
+ "apply-approved": "apply-approved";
45
+ }>>;
46
+ instruction: z.ZodString;
47
+ cwd: z.ZodDefault<z.ZodString>;
48
+ model: z.ZodOptional<z.ZodString>;
49
+ sandbox: z.ZodDefault<z.ZodEnum<{
50
+ "read-only": "read-only";
51
+ "workspace-write": "workspace-write";
52
+ "danger-full-access": "danger-full-access";
53
+ }>>;
54
+ output_schema: z.ZodOptional<z.ZodString>;
55
+ output_last_message: z.ZodOptional<z.ZodString>;
56
+ agent: z.ZodOptional<z.ZodString>;
57
+ session: z.ZodOptional<z.ZodString>;
58
+ files: z.ZodDefault<z.ZodArray<z.ZodString>>;
59
+ approval_grants: z.ZodDefault<z.ZodArray<z.ZodEnum<{
60
+ maintainer: "maintainer";
61
+ security: "security";
62
+ "architecture-board": "architecture-board";
63
+ }>>>;
64
+ }, z.core.$strip>;
65
+ export declare const agentRuntimeCommandPlanSchema: z.ZodObject<{
66
+ schema_version: z.ZodLiteral<1>;
67
+ created_at: z.ZodString;
68
+ status: z.ZodEnum<{
69
+ blocked: "blocked";
70
+ planned: "planned";
71
+ }>;
72
+ request: z.ZodObject<{
73
+ schema_version: z.ZodDefault<z.ZodLiteral<1>>;
74
+ feature_ref: z.ZodString;
75
+ provider: z.ZodEnum<{
76
+ opencode: "opencode";
77
+ codex: "codex";
78
+ deepagents: "deepagents";
79
+ }>;
80
+ mode: z.ZodDefault<z.ZodEnum<{
81
+ validate: "validate";
82
+ "read-only": "read-only";
83
+ plan: "plan";
84
+ "apply-sandbox": "apply-sandbox";
85
+ "apply-approved": "apply-approved";
86
+ }>>;
87
+ instruction: z.ZodString;
88
+ cwd: z.ZodDefault<z.ZodString>;
89
+ model: z.ZodOptional<z.ZodString>;
90
+ sandbox: z.ZodDefault<z.ZodEnum<{
91
+ "read-only": "read-only";
92
+ "workspace-write": "workspace-write";
93
+ "danger-full-access": "danger-full-access";
94
+ }>>;
95
+ output_schema: z.ZodOptional<z.ZodString>;
96
+ output_last_message: z.ZodOptional<z.ZodString>;
97
+ agent: z.ZodOptional<z.ZodString>;
98
+ session: z.ZodOptional<z.ZodString>;
99
+ files: z.ZodDefault<z.ZodArray<z.ZodString>>;
100
+ approval_grants: z.ZodDefault<z.ZodArray<z.ZodEnum<{
101
+ maintainer: "maintainer";
102
+ security: "security";
103
+ "architecture-board": "architecture-board";
104
+ }>>>;
105
+ }, z.core.$strip>;
106
+ provider: z.ZodEnum<{
107
+ opencode: "opencode";
108
+ codex: "codex";
109
+ deepagents: "deepagents";
110
+ }>;
111
+ command: z.ZodOptional<z.ZodObject<{
112
+ executable: z.ZodString;
113
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
114
+ stdin: z.ZodOptional<z.ZodString>;
115
+ }, z.core.$strip>>;
116
+ evidence_contract: z.ZodEnum<{
117
+ "agent-runtime-v2/deepagents": "agent-runtime-v2/deepagents";
118
+ "agent-runtime-v2/codex-exec": "agent-runtime-v2/codex-exec";
119
+ "agent-runtime-v2/opencode-run": "agent-runtime-v2/opencode-run";
120
+ }>;
121
+ structured_output: z.ZodBoolean;
122
+ reasons: z.ZodDefault<z.ZodArray<z.ZodString>>;
123
+ policy: z.ZodObject<{
124
+ direct_state_write_allowed: z.ZodLiteral<false>;
125
+ requires_codesdd_finalize: z.ZodLiteral<true>;
126
+ mutating_modes_require_approval: z.ZodLiteral<true>;
127
+ }, z.core.$strip>;
128
+ }, z.core.$strip>;
129
+ export declare const opencodeExecutionEvidenceSchema: z.ZodObject<{
130
+ schema_version: z.ZodLiteral<1>;
131
+ contract: z.ZodLiteral<"agent-runtime-v2/opencode-run">;
132
+ provider: z.ZodLiteral<"opencode">;
133
+ feature_ref: z.ZodString;
134
+ run_id: z.ZodString;
135
+ created_at: z.ZodString;
136
+ mode: z.ZodEnum<{
137
+ validate: "validate";
138
+ "read-only": "read-only";
139
+ plan: "plan";
140
+ "apply-sandbox": "apply-sandbox";
141
+ "apply-approved": "apply-approved";
142
+ }>;
143
+ status: z.ZodEnum<{
144
+ completed: "completed";
145
+ blocked: "blocked";
146
+ planned: "planned";
147
+ failed: "failed";
148
+ skipped: "skipped";
149
+ running: "running";
150
+ }>;
151
+ command: z.ZodObject<{
152
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
153
+ stdin: z.ZodOptional<z.ZodString>;
154
+ executable: z.ZodLiteral<"opencode">;
155
+ }, z.core.$strip>;
156
+ command_plan_ref: z.ZodOptional<z.ZodString>;
157
+ cwd: z.ZodDefault<z.ZodString>;
158
+ exit_code: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
159
+ started_at: z.ZodOptional<z.ZodString>;
160
+ completed_at: z.ZodOptional<z.ZodString>;
161
+ duration_ms: z.ZodOptional<z.ZodNumber>;
162
+ structured_output: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
163
+ stdout_excerpt: z.ZodOptional<z.ZodString>;
164
+ stderr_excerpt: z.ZodOptional<z.ZodString>;
165
+ artifacts: z.ZodDefault<z.ZodArray<z.ZodObject<{
166
+ kind: z.ZodString;
167
+ ref: z.ZodString;
168
+ path: z.ZodOptional<z.ZodString>;
169
+ sha256: z.ZodOptional<z.ZodString>;
170
+ }, z.core.$strip>>>;
171
+ validations: z.ZodDefault<z.ZodArray<z.ZodString>>;
172
+ redactions: z.ZodDefault<z.ZodArray<z.ZodString>>;
173
+ risks: z.ZodDefault<z.ZodArray<z.ZodObject<{
174
+ id: z.ZodString;
175
+ severity: z.ZodEnum<{
176
+ low: "low";
177
+ medium: "medium";
178
+ high: "high";
179
+ critical: "critical";
180
+ }>;
181
+ summary: z.ZodString;
182
+ mitigation: z.ZodOptional<z.ZodString>;
183
+ }, z.core.$strip>>>;
184
+ policy: z.ZodObject<{
185
+ direct_state_write_allowed: z.ZodLiteral<false>;
186
+ requires_codesdd_finalize: z.ZodLiteral<true>;
187
+ raw_secret_output_allowed: z.ZodLiteral<false>;
188
+ transcript_storage: z.ZodDefault<z.ZodEnum<{
189
+ forbidden: "forbidden";
190
+ "redacted-excerpts-only": "redacted-excerpts-only";
191
+ }>>;
192
+ }, z.core.$strip>;
193
+ finalize_intent: z.ZodDefault<z.ZodBoolean>;
194
+ }, z.core.$strip>;
195
+ export type AgentRuntimeProvider = z.infer<typeof agentRuntimeProviderSchema>;
196
+ export type AgentRuntimeMode = z.infer<typeof agentRuntimeModeSchema>;
197
+ export type AgentRuntimeCommandPlanRequest = z.infer<typeof agentRuntimeCommandPlanRequestSchema>;
198
+ export type AgentRuntimeCommandPlan = z.infer<typeof agentRuntimeCommandPlanSchema>;
199
+ export type OpenCodeExecutionEvidence = z.infer<typeof opencodeExecutionEvidenceSchema>;
200
+ export type OpenCodeExecutionEvidenceInput = z.input<typeof opencodeExecutionEvidenceSchema>;
201
+ export declare function buildAgentRuntimeCommandPlan(request: AgentRuntimeCommandPlanRequest, createdAt?: string): AgentRuntimeCommandPlan;
202
+ export declare function buildOpenCodeExecutionEvidence(evidence: OpenCodeExecutionEvidenceInput): OpenCodeExecutionEvidence;
203
+ export declare function buildAgentRuntimeJsonSchemas(): Record<string, unknown>;
204
+ //# sourceMappingURL=agent-runtime-contract.d.ts.map