@webex/contact-center 3.12.0-next.14 → 3.12.0-next.140

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 (317) hide show
  1. package/.sdd/manifest.json +885 -0
  2. package/AGENTS.md +94 -0
  3. package/ai-docs/ARCHITECTURE.md +168 -0
  4. package/ai-docs/CONTRACTS.md +59 -0
  5. package/ai-docs/GETTING_STARTED.md +168 -0
  6. package/ai-docs/GLOSSARY.md +43 -0
  7. package/ai-docs/README.md +138 -0
  8. package/ai-docs/REVIEW_CHECKLIST.md +41 -0
  9. package/ai-docs/RULES.md +444 -0
  10. package/ai-docs/SECURITY.md +52 -0
  11. package/ai-docs/SERVICE_STATE.md +52 -0
  12. package/ai-docs/SPEC_INDEX.md +65 -0
  13. package/ai-docs/adr/0001-spec-source-policy.md +55 -0
  14. package/ai-docs/adr/README.md +8 -0
  15. package/ai-docs/adr/_adr-template.md +31 -0
  16. package/ai-docs/contact-center-spec.md +382 -0
  17. package/ai-docs/features/consult-transfer-list-policy/spec/feature-spec.md +362 -0
  18. package/ai-docs/features/contact-owner-change-refactor.md +78 -0
  19. package/ai-docs/features/generated-spec-conformance-fidelity-remediation/spec/feature-spec.md +117 -0
  20. package/ai-docs/features/residual-warning-coverage-completion/spec/feature-spec.md +203 -0
  21. package/ai-docs/features/validator-code-fidelity-drift-fix/spec/feature-spec.md +315 -0
  22. package/ai-docs/patterns/event-driven-patterns.md +485 -0
  23. package/ai-docs/patterns/testing-patterns.md +480 -0
  24. package/ai-docs/patterns/typescript-patterns.md +365 -0
  25. package/ai-docs/templates/README.md +102 -0
  26. package/ai-docs/templates/documentation/create-agents-md.md +240 -0
  27. package/ai-docs/templates/documentation/create-architecture-md.md +295 -0
  28. package/ai-docs/templates/existing-service/bug-fix.md +254 -0
  29. package/ai-docs/templates/existing-service/feature-enhancement.md +450 -0
  30. package/ai-docs/templates/new-method/00-master.md +80 -0
  31. package/ai-docs/templates/new-method/01-requirements.md +232 -0
  32. package/ai-docs/templates/new-method/02-implementation.md +295 -0
  33. package/ai-docs/templates/new-method/03-tests.md +201 -0
  34. package/ai-docs/templates/new-method/04-validation.md +141 -0
  35. package/ai-docs/templates/new-service/00-master.md +109 -0
  36. package/ai-docs/templates/new-service/01-pre-questions.md +159 -0
  37. package/ai-docs/templates/new-service/02-code-generation.md +346 -0
  38. package/ai-docs/templates/new-service/03-integration.md +178 -0
  39. package/ai-docs/templates/new-service/04-test-generation.md +205 -0
  40. package/ai-docs/templates/new-service/05-validation.md +145 -0
  41. package/dist/cc.js +1004 -43
  42. package/dist/cc.js.map +1 -1
  43. package/dist/config.js +13 -0
  44. package/dist/config.js.map +1 -1
  45. package/dist/constants.js +31 -3
  46. package/dist/constants.js.map +1 -1
  47. package/dist/index.js +45 -15
  48. package/dist/index.js.map +1 -1
  49. package/dist/metrics/MetricsManager.js +16 -0
  50. package/dist/metrics/MetricsManager.js.map +1 -1
  51. package/dist/metrics/behavioral-events.js +211 -0
  52. package/dist/metrics/behavioral-events.js.map +1 -1
  53. package/dist/metrics/constants.js +49 -4
  54. package/dist/metrics/constants.js.map +1 -1
  55. package/dist/services/AddressBook.js +18 -15
  56. package/dist/services/AddressBook.js.map +1 -1
  57. package/dist/services/AnswerCallOnWebexService.js +202 -0
  58. package/dist/services/AnswerCallOnWebexService.js.map +1 -0
  59. package/dist/services/ApiAiAssistant.js +269 -9
  60. package/dist/services/ApiAiAssistant.js.map +1 -1
  61. package/dist/services/EntryPoint.js +46 -68
  62. package/dist/services/EntryPoint.js.map +1 -1
  63. package/dist/services/Queue.js +27 -22
  64. package/dist/services/Queue.js.map +1 -1
  65. package/dist/services/UserPreference.js +427 -0
  66. package/dist/services/UserPreference.js.map +1 -0
  67. package/dist/services/WebexCrossClientService.js +225 -0
  68. package/dist/services/WebexCrossClientService.js.map +1 -0
  69. package/dist/services/WxAppTelephonyMercurySync.js +111 -0
  70. package/dist/services/WxAppTelephonyMercurySync.js.map +1 -0
  71. package/dist/services/config/Util.js +11 -4
  72. package/dist/services/config/Util.js.map +1 -1
  73. package/dist/services/config/constants.js +41 -7
  74. package/dist/services/config/constants.js.map +1 -1
  75. package/dist/services/config/index.js +51 -0
  76. package/dist/services/config/index.js.map +1 -1
  77. package/dist/services/config/types.js +57 -12
  78. package/dist/services/config/types.js.map +1 -1
  79. package/dist/services/core/Err.js.map +1 -1
  80. package/dist/services/core/Utils.js +111 -32
  81. package/dist/services/core/Utils.js.map +1 -1
  82. package/dist/services/core/WebexRequest.js +6 -2
  83. package/dist/services/core/WebexRequest.js.map +1 -1
  84. package/dist/services/core/aqm-reqs.js +28 -14
  85. package/dist/services/core/aqm-reqs.js.map +1 -1
  86. package/dist/services/core/types.js.map +1 -1
  87. package/dist/services/core/websocket/WebSocketManager.js +2 -1
  88. package/dist/services/core/websocket/WebSocketManager.js.map +1 -1
  89. package/dist/services/core/websocket/types.js.map +1 -1
  90. package/dist/services/index.js +1 -1
  91. package/dist/services/index.js.map +1 -1
  92. package/dist/services/task/Task.js +754 -0
  93. package/dist/services/task/Task.js.map +1 -0
  94. package/dist/services/task/TaskFactory.js +50 -0
  95. package/dist/services/task/TaskFactory.js.map +1 -0
  96. package/dist/services/task/TaskManager.js +1183 -521
  97. package/dist/services/task/TaskManager.js.map +1 -1
  98. package/dist/services/task/TaskUtils.js +211 -27
  99. package/dist/services/task/TaskUtils.js.map +1 -1
  100. package/dist/services/task/WebexCallingUtils.js +70 -0
  101. package/dist/services/task/WebexCallingUtils.js.map +1 -0
  102. package/dist/services/task/constants.js +12 -2
  103. package/dist/services/task/constants.js.map +1 -1
  104. package/dist/services/task/contact.js +29 -0
  105. package/dist/services/task/contact.js.map +1 -1
  106. package/dist/services/task/dialer.js +78 -0
  107. package/dist/services/task/dialer.js.map +1 -1
  108. package/dist/services/task/digital/Digital.js +78 -0
  109. package/dist/services/task/digital/Digital.js.map +1 -0
  110. package/dist/services/task/state-machine/TaskStateMachine.js +982 -0
  111. package/dist/services/task/state-machine/TaskStateMachine.js.map +1 -0
  112. package/dist/services/task/state-machine/actions.js +572 -0
  113. package/dist/services/task/state-machine/actions.js.map +1 -0
  114. package/dist/services/task/state-machine/constants.js +161 -0
  115. package/dist/services/task/state-machine/constants.js.map +1 -0
  116. package/dist/services/task/state-machine/guards.js +379 -0
  117. package/dist/services/task/state-machine/guards.js.map +1 -0
  118. package/dist/services/task/state-machine/index.js +53 -0
  119. package/dist/services/task/state-machine/index.js.map +1 -0
  120. package/dist/services/task/state-machine/types.js +54 -0
  121. package/dist/services/task/state-machine/types.js.map +1 -0
  122. package/dist/services/task/state-machine/uiControlsComputer.js +703 -0
  123. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -0
  124. package/dist/services/task/taskDataNormalizer.js +99 -0
  125. package/dist/services/task/taskDataNormalizer.js.map +1 -0
  126. package/dist/services/task/types.js +228 -5
  127. package/dist/services/task/types.js.map +1 -1
  128. package/dist/services/task/voice/Voice.js +1504 -0
  129. package/dist/services/task/voice/Voice.js.map +1 -0
  130. package/dist/services/task/voice/WebRTC.js +152 -0
  131. package/dist/services/task/voice/WebRTC.js.map +1 -0
  132. package/dist/services/task/voice/wxAppOfferObservability.js +145 -0
  133. package/dist/services/task/voice/wxAppOfferObservability.js.map +1 -0
  134. package/dist/services/task/voice/wxAppVoiceMethods.js +395 -0
  135. package/dist/services/task/voice/wxAppVoiceMethods.js.map +1 -0
  136. package/dist/services/wxAppDiagnosticLogging.js +159 -0
  137. package/dist/services/wxAppDiagnosticLogging.js.map +1 -0
  138. package/dist/services/wxAppTelephonyUtils.js +19 -0
  139. package/dist/services/wxAppTelephonyUtils.js.map +1 -0
  140. package/dist/types/cc.d.ts +193 -6
  141. package/dist/types/config.d.ts +13 -0
  142. package/dist/types/constants.d.ts +29 -1
  143. package/dist/types/index.d.ts +35 -8
  144. package/dist/types/metrics/MetricsManager.d.ts +6 -0
  145. package/dist/types/metrics/constants.d.ts +44 -1
  146. package/dist/types/services/AddressBook.d.ts +2 -1
  147. package/dist/types/services/AnswerCallOnWebexService.d.ts +38 -0
  148. package/dist/types/services/ApiAiAssistant.d.ts +56 -5
  149. package/dist/types/services/EntryPoint.d.ts +7 -5
  150. package/dist/types/services/Queue.d.ts +5 -3
  151. package/dist/types/services/UserPreference.d.ts +118 -0
  152. package/dist/types/services/WebexCrossClientService.d.ts +32 -0
  153. package/dist/types/services/WxAppTelephonyMercurySync.d.ts +28 -0
  154. package/dist/types/services/config/constants.d.ts +34 -5
  155. package/dist/types/services/config/types.d.ts +199 -12
  156. package/dist/types/services/core/Err.d.ts +6 -0
  157. package/dist/types/services/core/Utils.d.ts +35 -13
  158. package/dist/types/services/core/WebexRequest.d.ts +1 -0
  159. package/dist/types/services/core/types.d.ts +2 -0
  160. package/dist/types/services/core/websocket/WebSocketManager.d.ts +1 -0
  161. package/dist/types/services/core/websocket/types.d.ts +1 -1
  162. package/dist/types/services/index.d.ts +1 -1
  163. package/dist/types/services/task/Task.d.ts +175 -0
  164. package/dist/types/services/task/TaskFactory.d.ts +13 -0
  165. package/dist/types/services/task/TaskUtils.d.ts +48 -2
  166. package/dist/types/services/task/WebexCallingUtils.d.ts +11 -0
  167. package/dist/types/services/task/constants.d.ts +10 -0
  168. package/dist/types/services/task/contact.d.ts +4 -0
  169. package/dist/types/services/task/dialer.d.ts +30 -0
  170. package/dist/types/services/task/digital/Digital.d.ts +22 -0
  171. package/dist/types/services/task/state-machine/TaskStateMachine.d.ts +1442 -0
  172. package/dist/types/services/task/state-machine/actions.d.ts +10 -0
  173. package/dist/types/services/task/state-machine/constants.d.ts +107 -0
  174. package/dist/types/services/task/state-machine/guards.d.ts +103 -0
  175. package/dist/types/services/task/state-machine/index.d.ts +13 -0
  176. package/dist/types/services/task/state-machine/types.d.ts +277 -0
  177. package/dist/types/services/task/state-machine/uiControlsComputer.d.ts +9 -0
  178. package/dist/types/services/task/taskDataNormalizer.d.ts +10 -0
  179. package/dist/types/services/task/types.d.ts +682 -66
  180. package/dist/types/services/task/voice/Voice.d.ts +240 -0
  181. package/dist/types/services/task/voice/WebRTC.d.ts +53 -0
  182. package/dist/types/services/task/voice/wxAppOfferObservability.d.ts +39 -0
  183. package/dist/types/services/task/voice/wxAppVoiceMethods.d.ts +68 -0
  184. package/dist/types/services/wxAppDiagnosticLogging.d.ts +63 -0
  185. package/dist/types/services/wxAppTelephonyUtils.d.ts +5 -0
  186. package/dist/types/types.d.ts +205 -9
  187. package/dist/types/utils/PageCache.d.ts +20 -3
  188. package/dist/types/webex.d.ts +1 -0
  189. package/dist/types.js +162 -4
  190. package/dist/types.js.map +1 -1
  191. package/dist/utils/PageCache.js +19 -5
  192. package/dist/utils/PageCache.js.map +1 -1
  193. package/dist/webex.js +22 -2
  194. package/dist/webex.js.map +1 -1
  195. package/package.json +16 -12
  196. package/src/cc.ts +1330 -117
  197. package/src/config.ts +13 -0
  198. package/src/constants.ts +29 -1
  199. package/src/index.ts +36 -5
  200. package/src/metrics/MetricsManager.ts +16 -0
  201. package/src/metrics/ai-docs/AGENTS.md +350 -0
  202. package/src/metrics/ai-docs/ARCHITECTURE.md +338 -0
  203. package/src/metrics/ai-docs/metrics-spec.md +963 -0
  204. package/src/metrics/behavioral-events.ts +218 -0
  205. package/src/metrics/constants.ts +53 -4
  206. package/src/services/AddressBook.ts +17 -6
  207. package/src/services/AnswerCallOnWebexService.ts +239 -0
  208. package/src/services/ApiAiAssistant.ts +356 -9
  209. package/src/services/EntryPoint.ts +59 -60
  210. package/src/services/Queue.ts +29 -12
  211. package/src/services/UserPreference.ts +509 -0
  212. package/src/services/WebexCrossClientService.ts +298 -0
  213. package/src/services/WxAppTelephonyMercurySync.ts +142 -0
  214. package/src/services/agent/ai-docs/AGENTS.md +240 -0
  215. package/src/services/agent/ai-docs/ARCHITECTURE.md +304 -0
  216. package/src/services/agent/ai-docs/agent-spec.md +505 -0
  217. package/src/services/ai-docs/AGENTS.md +386 -0
  218. package/src/services/ai-docs/services-spec.md +505 -0
  219. package/src/services/config/Util.ts +12 -3
  220. package/src/services/config/ai-docs/AGENTS.md +255 -0
  221. package/src/services/config/ai-docs/ARCHITECTURE.md +426 -0
  222. package/src/services/config/ai-docs/config-spec.md +686 -0
  223. package/src/services/config/constants.ts +46 -6
  224. package/src/services/config/index.ts +65 -0
  225. package/src/services/config/types.ts +199 -13
  226. package/src/services/core/Err.ts +3 -0
  227. package/src/services/core/Utils.ts +127 -37
  228. package/src/services/core/WebexRequest.ts +3 -1
  229. package/src/services/core/ai-docs/AGENTS.md +381 -0
  230. package/src/services/core/ai-docs/ARCHITECTURE.md +698 -0
  231. package/src/services/core/ai-docs/core-spec.md +787 -0
  232. package/src/services/core/aqm-reqs.ts +30 -15
  233. package/src/services/core/types.ts +2 -0
  234. package/src/services/core/websocket/WebSocketManager.ts +2 -0
  235. package/src/services/core/websocket/types.ts +1 -1
  236. package/src/services/index.ts +1 -1
  237. package/src/services/task/Task.ts +908 -0
  238. package/src/services/task/TaskFactory.ts +61 -0
  239. package/src/services/task/TaskManager.ts +1430 -608
  240. package/src/services/task/TaskUtils.ts +303 -25
  241. package/src/services/task/WebexCallingUtils.ts +136 -0
  242. package/src/services/task/ai-docs/AGENTS.md +457 -0
  243. package/src/services/task/ai-docs/ARCHITECTURE.md +595 -0
  244. package/src/services/task/ai-docs/task-spec.md +1476 -0
  245. package/src/services/task/constants.ts +10 -0
  246. package/src/services/task/contact.ts +30 -0
  247. package/src/services/task/dialer.ts +80 -0
  248. package/src/services/task/digital/Digital.ts +97 -0
  249. package/src/services/task/state-machine/TaskStateMachine.ts +1320 -0
  250. package/src/services/task/state-machine/actions.ts +741 -0
  251. package/src/services/task/state-machine/ai-docs/AGENTS.md +460 -0
  252. package/src/services/task/state-machine/ai-docs/ARCHITECTURE.md +1156 -0
  253. package/src/services/task/state-machine/ai-docs/task-state-machine-spec.md +2247 -0
  254. package/src/services/task/state-machine/constants.ts +172 -0
  255. package/src/services/task/state-machine/guards.ts +442 -0
  256. package/src/services/task/state-machine/index.ts +28 -0
  257. package/src/services/task/state-machine/types.ts +258 -0
  258. package/src/services/task/state-machine/uiControlsComputer.ts +1135 -0
  259. package/src/services/task/taskDataNormalizer.ts +137 -0
  260. package/src/services/task/types.ts +835 -70
  261. package/src/services/task/voice/Voice.ts +1873 -0
  262. package/src/services/task/voice/WebRTC.ts +191 -0
  263. package/src/services/task/voice/wxAppOfferObservability.ts +204 -0
  264. package/src/services/task/voice/wxAppVoiceMethods.ts +575 -0
  265. package/src/services/wxAppDiagnosticLogging.ts +286 -0
  266. package/src/services/wxAppTelephonyUtils.ts +14 -0
  267. package/src/types.ts +264 -11
  268. package/src/utils/AGENTS.md +289 -0
  269. package/src/utils/PageCache.ts +38 -5
  270. package/src/utils/ai-docs/utils-spec.md +391 -0
  271. package/src/webex.js +10 -0
  272. package/test/unit/spec/cc.ts +2371 -98
  273. package/test/unit/spec/logger-proxy.ts +70 -0
  274. package/test/unit/spec/metrics/MetricsManager.ts +25 -0
  275. package/test/unit/spec/metrics/behavioral-events.ts +60 -0
  276. package/test/unit/spec/services/AddressBook.ts +37 -6
  277. package/test/unit/spec/services/AnswerCallOnWebexService.ts +264 -0
  278. package/test/unit/spec/services/ApiAiAssistant.ts +311 -21
  279. package/test/unit/spec/services/EntryPoint.ts +87 -40
  280. package/test/unit/spec/services/Queue.ts +123 -12
  281. package/test/unit/spec/services/UserPreference.ts +401 -0
  282. package/test/unit/spec/services/WebCallingService.ts +7 -1
  283. package/test/unit/spec/services/WebexCrossClientService.ts +509 -0
  284. package/test/unit/spec/services/WxAppTelephonyMercurySync.ts +136 -0
  285. package/test/unit/spec/services/config/Util.ts +129 -0
  286. package/test/unit/spec/services/config/index.ts +97 -29
  287. package/test/unit/spec/services/core/Utils.ts +425 -8
  288. package/test/unit/spec/services/core/WebexRequest.ts +3 -1
  289. package/test/unit/spec/services/core/aqm-reqs.ts +113 -1
  290. package/test/unit/spec/services/core/websocket/WebSocketManager.ts +66 -40
  291. package/test/unit/spec/services/task/AutoWrapup.ts +63 -0
  292. package/test/unit/spec/services/task/Task.ts +745 -0
  293. package/test/unit/spec/services/task/TaskFactory.ts +99 -0
  294. package/test/unit/spec/services/task/TaskManager.ts +2539 -1490
  295. package/test/unit/spec/services/task/TaskUtils.ts +235 -0
  296. package/test/unit/spec/services/task/WebexCallingUtils.ts +153 -0
  297. package/test/unit/spec/services/task/contact.ts +33 -0
  298. package/test/unit/spec/services/task/dialer.ts +190 -0
  299. package/test/unit/spec/services/task/digital/Digital.ts +105 -0
  300. package/test/unit/spec/services/task/state-machine/TaskStateMachine.ts +4060 -0
  301. package/test/unit/spec/services/task/state-machine/guards.ts +839 -0
  302. package/test/unit/spec/services/task/state-machine/types.ts +18 -0
  303. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +3101 -0
  304. package/test/unit/spec/services/task/taskTestUtils.ts +87 -0
  305. package/test/unit/spec/services/task/voice/Voice.ts +2020 -0
  306. package/test/unit/spec/services/task/voice/WebRTC.ts +235 -0
  307. package/test/unit/spec/services/task/voice/wxAppOfferObservability.ts +361 -0
  308. package/test/unit/spec/services/task/voice/wxAppVoiceMethods.ts +719 -0
  309. package/test/unit/spec/services/wxAppDiagnosticLogging.ts +179 -0
  310. package/test/unit/spec/wellnessSampleUtils.ts +288 -0
  311. package/umd/contact-center.min.js +2 -2
  312. package/umd/contact-center.min.js.map +1 -1
  313. package/dist/services/task/index.js +0 -1530
  314. package/dist/services/task/index.js.map +0 -1
  315. package/dist/types/services/task/index.d.ts +0 -650
  316. package/src/services/task/index.ts +0 -1806
  317. package/test/unit/spec/services/task/index.ts +0 -2205
@@ -0,0 +1,885 @@
1
+ {
2
+ "manifest_version": 1,
3
+ "repository": {
4
+ "name": "@webex/contact-center",
5
+ "purpose": "A Webex SDK plugin package that exposes Contact Center agent, task, calling, configuration, realtime event, and telemetry APIs.",
6
+ "category": "cat1-legacy",
7
+ "primary_languages": [
8
+ "TypeScript",
9
+ "JavaScript"
10
+ ]
11
+ },
12
+ "topology": "Orchestrator-plus-components",
13
+ "commands": {
14
+ "compile": {
15
+ "command": "yarn workspace @webex/contact-center compile",
16
+ "source_file": "packages/@webex/contact-center/package.json",
17
+ "verified_at": "2026-08-05T10:53:14Z"
18
+ },
19
+ "build": {
20
+ "command": "yarn workspace @webex/contact-center build:src",
21
+ "source_file": "package.json"
22
+ },
23
+ "unit-test": {
24
+ "command": "yarn workspace @webex/contact-center test:unit",
25
+ "source_file": "packages/@webex/contact-center/package.json",
26
+ "verified_at": "2026-08-05T10:53:14Z"
27
+ },
28
+ "test": {
29
+ "command": "yarn workspace @webex/contact-center test",
30
+ "source_file": "package.json"
31
+ },
32
+ "lint": {
33
+ "command": "yarn workspace @webex/contact-center test:style",
34
+ "source_file": "package.json"
35
+ },
36
+ "docs": {
37
+ "command": "yarn workspace @webex/contact-center build:docs",
38
+ "source_file": "package.json"
39
+ }
40
+ },
41
+ "coverage_status_definitions": {
42
+ "specced": ">=80% public surface specced, drift <5% — spec is authoritative",
43
+ "partial": "40-80% specced — spec is a hint, cross-check code",
44
+ "untracked": "<40% specced — code is the source of truth"
45
+ },
46
+ "modules": [
47
+ {
48
+ "path": "src",
49
+ "coverage_status": "Partial",
50
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
51
+ "canonical_spec": "ai-docs/contact-center-spec.md",
52
+ "contracts": {
53
+ "provides": [
54
+ "Published @webex/contact-center package; ContactCenter WebexPlugin; public SDK methods, events, types, Task with ordered action-specific consult/transfer destination controls, AddressBook, ApiAIAssistant, UserPreference, cc.userPreference, existing getQueues/getEntryPoints methods with consult/transfer defaults, full Queue records, mapped EntryPoint records with optional numbers, exported user-preference request/response types, preview-campaign methods acceptPreviewContact/skipPreviewContact/removePreviewContact, and Agent Wellness Break effective-profile, registered-session Profile projection, exported action constants/types, internally sourced action context, system-code, and primary/RTD notification event APIs",
55
+ "WXCC-6026 wxApp Better Together: enableWxBetterTogether init config, isWxBetterTogetherEnabled read API, unified task telephony (task.accept/decline/toggleMute/transmitDtmf), TASK_WXAPP_MUTE_STATE_UPDATED event, optional main.keypad uiControl, multi-login supported; runtime toggle deferred to Phase 2 (private)",
56
+ "BROWSER stationLogin payload: dialNumber and deviceId are webrtc-{agentId} (contact-center.station-login-browser-dn / AGENT-R-006); public stationLogin({loginOption: 'BROWSER'}) input unchanged"
57
+ ],
58
+ "requires": [
59
+ "Webex SDK host/plugin runtime; Contact Center REST and WebSocket services; internal Webex calling, metrics, support, authorization, logger, and mercury packages"
60
+ ]
61
+ },
62
+ "section_profile": {
63
+ "has_ui": false,
64
+ "crosses_service_boundaries": true,
65
+ "enforces_domain_rules": true,
66
+ "is_concurrent_async": true,
67
+ "owns_persistence": false,
68
+ "returns_caller_errors": true,
69
+ "has_design_tradeoff": true,
70
+ "stateful_transitions": true,
71
+ "exposes_wire_protocol": true,
72
+ "ui_multi_screen": false,
73
+ "large_data_model": false,
74
+ "has_tiers": false,
75
+ "module_specific_conventions": true,
76
+ "published_package": true,
77
+ "embedded_in_host": true,
78
+ "holds_client_state": true,
79
+ "resolved_by": "Codex generator with user-confirmed module map",
80
+ "resolved_at": "2026-07-07T13:41:40Z"
81
+ },
82
+ "source_policy": {
83
+ "mode": "migrate-existing",
84
+ "existing_sources": [
85
+ "AGENTS.md",
86
+ "ai-docs/README.md"
87
+ ],
88
+ "conflict_status": "none",
89
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
90
+ }
91
+ },
92
+ {
93
+ "path": "src/metrics",
94
+ "coverage_status": "Partial",
95
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
96
+ "canonical_spec": "src/metrics/ai-docs/metrics-spec.md",
97
+ "contracts": {
98
+ "provides": [
99
+ "MetricsManager timing, behavioral/operational/business event submission, taxonomy, queues, tracking-field helpers, and operational Agent Wellness Break action/notification/system-code event names",
100
+ "WXAPP_OFFER_PARTICIPANT_FIELDS_MISSING operational/behavioral telemetry event (contract metrics.wxapp-offer-participant-fields-missing; emit site voice/wxAppOfferObservability.ts)"
101
+ ],
102
+ "requires": [
103
+ "Webex internal metrics service; Webex ready lifecycle; LoggerProxy; browser document visibility"
104
+ ]
105
+ },
106
+ "section_profile": {
107
+ "has_ui": false,
108
+ "crosses_service_boundaries": true,
109
+ "enforces_domain_rules": true,
110
+ "is_concurrent_async": true,
111
+ "owns_persistence": false,
112
+ "returns_caller_errors": false,
113
+ "has_design_tradeoff": true,
114
+ "stateful_transitions": true,
115
+ "exposes_wire_protocol": false,
116
+ "ui_multi_screen": false,
117
+ "large_data_model": false,
118
+ "has_tiers": false,
119
+ "module_specific_conventions": true,
120
+ "published_package": false,
121
+ "embedded_in_host": false,
122
+ "holds_client_state": true,
123
+ "resolved_by": "Codex generator with user-confirmed module map",
124
+ "resolved_at": "2026-07-07T13:41:40Z"
125
+ },
126
+ "source_policy": {
127
+ "mode": "migrate-existing",
128
+ "existing_sources": [
129
+ "src/metrics/ai-docs/AGENTS.md",
130
+ "src/metrics/ai-docs/ARCHITECTURE.md"
131
+ ],
132
+ "conflict_status": "none",
133
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
134
+ }
135
+ },
136
+ {
137
+ "path": "src/services",
138
+ "coverage_status": "Partial",
139
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
140
+ "canonical_spec": "src/services/ai-docs/services-spec.md",
141
+ "contracts": {
142
+ "provides": [
143
+ "Services composition root; agent/config/contact/dialer factories; AddressBook, EntryPoint, Queue, UserPreference, ApiAiAssistant, and WebCalling integration; existing Queue/EntryPoint list methods with SDK-owned defaults and compatible existing-parameter overrides; Queue returns full records and EntryPoint maps profile-scoped dial-number rows to typed records with optional numbers; cc.userPreference exposes user-preference CRUD; ApiAiAssistant exposes session-validated direct wellness actions through a read-only context provider supplied at construction"
144
+ ],
145
+ "requires": [
146
+ "Core HTTP/WebSocket/AQM infrastructure; WCC APIs; @webex/calling; MetricsManager; PageCache"
147
+ ]
148
+ },
149
+ "section_profile": {
150
+ "has_ui": false,
151
+ "crosses_service_boundaries": true,
152
+ "enforces_domain_rules": true,
153
+ "is_concurrent_async": true,
154
+ "owns_persistence": false,
155
+ "returns_caller_errors": true,
156
+ "has_design_tradeoff": true,
157
+ "stateful_transitions": true,
158
+ "exposes_wire_protocol": true,
159
+ "ui_multi_screen": false,
160
+ "large_data_model": false,
161
+ "has_tiers": false,
162
+ "module_specific_conventions": true,
163
+ "published_package": false,
164
+ "embedded_in_host": false,
165
+ "holds_client_state": true,
166
+ "resolved_by": "Codex generator with user-confirmed module map",
167
+ "resolved_at": "2026-07-07T13:41:40Z"
168
+ },
169
+ "source_policy": {
170
+ "mode": "migrate-existing",
171
+ "existing_sources": [
172
+ "src/services/ai-docs/AGENTS.md"
173
+ ],
174
+ "conflict_status": "none",
175
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
176
+ }
177
+ },
178
+ {
179
+ "path": "src/services/agent",
180
+ "coverage_status": "Partial",
181
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
182
+ "canonical_spec": "src/services/agent/ai-docs/agent-spec.md",
183
+ "contracts": {
184
+ "provides": [
185
+ "Agent request factory; station login/logout, state changes, buddy-agent and relogin operations; AGENT_EVENTS and agent types; BROWSER station login sends dialNumber and deviceId as webrtc-{agentId} (contact-center.station-login-browser-dn / AGENT-R-006)"
186
+ ],
187
+ "requires": [
188
+ "AqmReqs; WCC API gateway; correlated WebSocket notifications; ContactCenter registration/profile state"
189
+ ]
190
+ },
191
+ "section_profile": {
192
+ "has_ui": false,
193
+ "crosses_service_boundaries": true,
194
+ "enforces_domain_rules": true,
195
+ "is_concurrent_async": true,
196
+ "owns_persistence": false,
197
+ "returns_caller_errors": true,
198
+ "has_design_tradeoff": true,
199
+ "stateful_transitions": false,
200
+ "exposes_wire_protocol": true,
201
+ "ui_multi_screen": false,
202
+ "large_data_model": false,
203
+ "has_tiers": false,
204
+ "module_specific_conventions": true,
205
+ "published_package": false,
206
+ "embedded_in_host": false,
207
+ "holds_client_state": false,
208
+ "resolved_by": "Codex generator with user-confirmed module map",
209
+ "resolved_at": "2026-07-07T13:41:40Z"
210
+ },
211
+ "source_policy": {
212
+ "mode": "migrate-existing",
213
+ "existing_sources": [
214
+ "src/services/agent/ai-docs/AGENTS.md",
215
+ "src/services/agent/ai-docs/ARCHITECTURE.md"
216
+ ],
217
+ "conflict_status": "none",
218
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
219
+ }
220
+ },
221
+ {
222
+ "path": "src/services/config",
223
+ "coverage_status": "Partial",
224
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
225
+ "canonical_spec": "src/services/config/ai-docs/config-spec.md",
226
+ "contracts": {
227
+ "provides": [
228
+ "Agent profile aggregation including fail-closed Agent Wellness Break enablement; config endpoint methods including exact, registration-owned system wellness idle-code lookup; CC event/type contracts; outdial ANI access"
229
+ ],
230
+ "requires": [
231
+ "WebexRequest; WCC organization, team, profile, AI-feature, aux-code, dial-plan, site, tenant, and URL-mapping APIs"
232
+ ]
233
+ },
234
+ "section_profile": {
235
+ "has_ui": false,
236
+ "crosses_service_boundaries": true,
237
+ "enforces_domain_rules": true,
238
+ "is_concurrent_async": true,
239
+ "owns_persistence": false,
240
+ "returns_caller_errors": true,
241
+ "has_design_tradeoff": true,
242
+ "stateful_transitions": false,
243
+ "exposes_wire_protocol": true,
244
+ "ui_multi_screen": false,
245
+ "large_data_model": false,
246
+ "has_tiers": false,
247
+ "module_specific_conventions": true,
248
+ "published_package": false,
249
+ "embedded_in_host": false,
250
+ "holds_client_state": false,
251
+ "resolved_by": "Codex generator with user-confirmed module map",
252
+ "resolved_at": "2026-07-07T13:41:40Z"
253
+ },
254
+ "source_policy": {
255
+ "mode": "migrate-existing",
256
+ "existing_sources": [
257
+ "src/services/config/ai-docs/AGENTS.md",
258
+ "src/services/config/ai-docs/ARCHITECTURE.md"
259
+ ],
260
+ "conflict_status": "none",
261
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
262
+ }
263
+ },
264
+ {
265
+ "path": "src/services/core",
266
+ "coverage_status": "Partial",
267
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
268
+ "canonical_spec": "src/services/core/ai-docs/core-spec.md",
269
+ "contracts": {
270
+ "provides": [
271
+ "WebexRequest; WebSocketManager; ConnectionService; AqmReqs; shared error and request types/utilities"
272
+ ],
273
+ "requires": [
274
+ "Webex SDK authenticated service routing; browser WebSocket/Worker/network APIs; LoggerProxy; metrics/log-upload infrastructure"
275
+ ]
276
+ },
277
+ "section_profile": {
278
+ "has_ui": false,
279
+ "crosses_service_boundaries": true,
280
+ "enforces_domain_rules": true,
281
+ "is_concurrent_async": true,
282
+ "owns_persistence": false,
283
+ "returns_caller_errors": true,
284
+ "has_design_tradeoff": true,
285
+ "stateful_transitions": true,
286
+ "exposes_wire_protocol": true,
287
+ "ui_multi_screen": false,
288
+ "large_data_model": false,
289
+ "has_tiers": false,
290
+ "module_specific_conventions": true,
291
+ "published_package": false,
292
+ "embedded_in_host": false,
293
+ "holds_client_state": true,
294
+ "resolved_by": "Codex generator with user-confirmed module map",
295
+ "resolved_at": "2026-07-07T13:41:40Z"
296
+ },
297
+ "source_policy": {
298
+ "mode": "migrate-existing",
299
+ "existing_sources": [
300
+ "src/services/core/ai-docs/AGENTS.md",
301
+ "src/services/core/ai-docs/ARCHITECTURE.md"
302
+ ],
303
+ "conflict_status": "none",
304
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
305
+ }
306
+ },
307
+ {
308
+ "path": "src/services/task",
309
+ "coverage_status": "Partial",
310
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
311
+ "canonical_spec": "src/services/task/ai-docs/task-spec.md",
312
+ "contracts": {
313
+ "provides": [
314
+ "Task/Voice/WebRTC/Digital lifecycle APIs; TaskManager lifecycle correlation, narrowly scoped backend-authoritative ContactOwnerChanged recovery, and task-event publication, including routing owner-changing ContactUpdated through the existing task:hydrate event; TaskManager/Voice stamp wrapUpRequired on wrap-up ingress so task:wrapup and profile-gated auto wrap-up can start; task events/types; ordered action-specific consult/transfer destination controls; call-control and dialer operations including acceptPreviewContact, skipPreviewContact, and removePreviewContact"
315
+ ],
316
+ "requires": [
317
+ "Contact/dialer AqmReqs; WebSocket managers; @webex/calling; MetricsManager; XState task-state module"
318
+ ]
319
+ },
320
+ "section_profile": {
321
+ "has_ui": false,
322
+ "crosses_service_boundaries": true,
323
+ "enforces_domain_rules": true,
324
+ "is_concurrent_async": true,
325
+ "owns_persistence": false,
326
+ "returns_caller_errors": true,
327
+ "has_design_tradeoff": true,
328
+ "stateful_transitions": true,
329
+ "exposes_wire_protocol": true,
330
+ "ui_multi_screen": false,
331
+ "large_data_model": false,
332
+ "has_tiers": false,
333
+ "module_specific_conventions": true,
334
+ "published_package": false,
335
+ "embedded_in_host": false,
336
+ "holds_client_state": true,
337
+ "resolved_by": "Codex generator with user-confirmed module map",
338
+ "resolved_at": "2026-07-07T13:41:40Z"
339
+ },
340
+ "source_policy": {
341
+ "mode": "migrate-existing",
342
+ "existing_sources": [
343
+ "src/services/task/ai-docs/AGENTS.md",
344
+ "src/services/task/ai-docs/ARCHITECTURE.md"
345
+ ],
346
+ "conflict_status": "none",
347
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
348
+ }
349
+ },
350
+ {
351
+ "path": "src/services/task/state-machine",
352
+ "coverage_status": "Partial",
353
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
354
+ "canonical_spec": "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
355
+ "contracts": {
356
+ "provides": [
357
+ "Task state-machine factory; TaskState/TaskEvent contracts; guards/actions; state/profile/interaction-derived UI-control and ordered consult/transfer destination computation"
358
+ ],
359
+ "requires": [
360
+ "XState; TaskData/task event contracts; Task and TaskManager integration"
361
+ ]
362
+ },
363
+ "section_profile": {
364
+ "has_ui": false,
365
+ "crosses_service_boundaries": false,
366
+ "enforces_domain_rules": true,
367
+ "is_concurrent_async": true,
368
+ "owns_persistence": false,
369
+ "returns_caller_errors": false,
370
+ "has_design_tradeoff": true,
371
+ "stateful_transitions": true,
372
+ "exposes_wire_protocol": false,
373
+ "ui_multi_screen": false,
374
+ "large_data_model": false,
375
+ "has_tiers": false,
376
+ "module_specific_conventions": true,
377
+ "published_package": false,
378
+ "embedded_in_host": false,
379
+ "holds_client_state": true,
380
+ "resolved_by": "Codex generator with user-confirmed module map",
381
+ "resolved_at": "2026-07-07T13:41:40Z"
382
+ },
383
+ "source_policy": {
384
+ "mode": "migrate-existing",
385
+ "existing_sources": [
386
+ "src/services/task/state-machine/ai-docs/AGENTS.md",
387
+ "src/services/task/state-machine/ai-docs/ARCHITECTURE.md"
388
+ ],
389
+ "conflict_status": "none",
390
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
391
+ }
392
+ },
393
+ {
394
+ "path": "src/utils",
395
+ "coverage_status": "Partial",
396
+ "coverage_evidence": "Canonical spec is structurally complete with 15/15 required documentation fields and source/test evidence mapped by requirement. Independent PR #5088 remediation validation completed on claude-code (2026-07-15); coverage remains Partial until post-baseline promotion criteria are satisfied.",
397
+ "canonical_spec": "src/utils/ai-docs/utils-spec.md",
398
+ "contracts": {
399
+ "provides": [
400
+ "PageCache; pagination/search/cache contracts and defaults"
401
+ ],
402
+ "requires": [
403
+ "LoggerProxy; in-memory Map and clock; AddressBook, EntryPoint, and Queue consumers"
404
+ ]
405
+ },
406
+ "section_profile": {
407
+ "has_ui": false,
408
+ "crosses_service_boundaries": false,
409
+ "enforces_domain_rules": true,
410
+ "is_concurrent_async": false,
411
+ "owns_persistence": false,
412
+ "returns_caller_errors": false,
413
+ "has_design_tradeoff": true,
414
+ "stateful_transitions": false,
415
+ "exposes_wire_protocol": false,
416
+ "ui_multi_screen": false,
417
+ "large_data_model": false,
418
+ "has_tiers": false,
419
+ "module_specific_conventions": true,
420
+ "published_package": false,
421
+ "embedded_in_host": false,
422
+ "holds_client_state": true,
423
+ "resolved_by": "Codex generator with user-confirmed module map",
424
+ "resolved_at": "2026-07-07T13:41:40Z"
425
+ },
426
+ "source_policy": {
427
+ "mode": "migrate-existing",
428
+ "existing_sources": [
429
+ "src/utils/AGENTS.md"
430
+ ],
431
+ "conflict_status": "none",
432
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
433
+ }
434
+ }
435
+ ],
436
+ "spec_source_policy": {
437
+ "mode": "migrate-existing",
438
+ "decided_by": "user",
439
+ "decided_at": "2026-07-07T13:27:09Z",
440
+ "decision_record": "ai-docs/adr/0001-spec-source-policy.md"
441
+ },
442
+ "spec_sources": [
443
+ {
444
+ "path": "AGENTS.md",
445
+ "scope": "repo",
446
+ "role": "source-material",
447
+ "canonical": true,
448
+ "use_by_agents": "source-for-migration",
449
+ "canonical_target": "AGENTS.md",
450
+ "notes": "Approved in-place canonical target; source units must be inventoried before rewrite."
451
+ },
452
+ {
453
+ "path": "ai-docs/README.md",
454
+ "scope": "repo",
455
+ "role": "source-material",
456
+ "canonical": false,
457
+ "use_by_agents": "source-for-migration",
458
+ "canonical_target": "ai-docs/GETTING_STARTED.md",
459
+ "notes": "Package purpose, technologies, navigation, commands, and architecture overview migrate by meaning."
460
+ },
461
+ {
462
+ "path": "ai-docs/RULES.md",
463
+ "scope": "repo",
464
+ "role": "source-material",
465
+ "canonical": true,
466
+ "use_by_agents": "source-for-migration",
467
+ "canonical_target": "ai-docs/RULES.md",
468
+ "notes": "Approved in-place canonical standing document; source units must be inventoried before rewrite."
469
+ },
470
+ {
471
+ "path": "ai-docs/patterns/event-driven-patterns.md",
472
+ "scope": "reference",
473
+ "role": "source-material",
474
+ "canonical": false,
475
+ "use_by_agents": "source-for-migration",
476
+ "canonical_target": "ai-docs/RULES.md",
477
+ "notes": "Event and WebSocket rules remain in place and feed canonical rules/module specs."
478
+ },
479
+ {
480
+ "path": "ai-docs/patterns/testing-patterns.md",
481
+ "scope": "reference",
482
+ "role": "source-material",
483
+ "canonical": false,
484
+ "use_by_agents": "source-for-migration",
485
+ "canonical_target": "ai-docs/RULES.md",
486
+ "notes": "Testing conventions remain in place and feed canonical rules/module specs."
487
+ },
488
+ {
489
+ "path": "ai-docs/patterns/typescript-patterns.md",
490
+ "scope": "reference",
491
+ "role": "source-material",
492
+ "canonical": false,
493
+ "use_by_agents": "source-for-migration",
494
+ "canonical_target": "ai-docs/RULES.md",
495
+ "notes": "TypeScript/JSDoc conventions remain in place and feed canonical rules/module specs."
496
+ },
497
+ {
498
+ "path": "src/metrics/ai-docs/AGENTS.md",
499
+ "scope": "module",
500
+ "role": "source-material",
501
+ "canonical": false,
502
+ "use_by_agents": "source-for-migration",
503
+ "module": "src/metrics",
504
+ "canonical_target": "src/metrics/ai-docs/metrics-spec.md",
505
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
506
+ },
507
+ {
508
+ "path": "src/metrics/ai-docs/ARCHITECTURE.md",
509
+ "scope": "module",
510
+ "role": "source-material",
511
+ "canonical": false,
512
+ "use_by_agents": "source-for-migration",
513
+ "module": "src/metrics",
514
+ "canonical_target": "src/metrics/ai-docs/metrics-spec.md",
515
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
516
+ },
517
+ {
518
+ "path": "src/services/ai-docs/AGENTS.md",
519
+ "scope": "module",
520
+ "role": "source-material",
521
+ "canonical": false,
522
+ "use_by_agents": "source-for-migration",
523
+ "module": "src/services",
524
+ "canonical_target": "src/services/ai-docs/services-spec.md",
525
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
526
+ },
527
+ {
528
+ "path": "src/services/agent/ai-docs/AGENTS.md",
529
+ "scope": "module",
530
+ "role": "source-material",
531
+ "canonical": false,
532
+ "use_by_agents": "source-for-migration",
533
+ "module": "src/services/agent",
534
+ "canonical_target": "src/services/agent/ai-docs/agent-spec.md",
535
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
536
+ },
537
+ {
538
+ "path": "src/services/agent/ai-docs/ARCHITECTURE.md",
539
+ "scope": "module",
540
+ "role": "source-material",
541
+ "canonical": false,
542
+ "use_by_agents": "source-for-migration",
543
+ "module": "src/services/agent",
544
+ "canonical_target": "src/services/agent/ai-docs/agent-spec.md",
545
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
546
+ },
547
+ {
548
+ "path": "src/services/config/ai-docs/AGENTS.md",
549
+ "scope": "module",
550
+ "role": "source-material",
551
+ "canonical": false,
552
+ "use_by_agents": "source-for-migration",
553
+ "module": "src/services/config",
554
+ "canonical_target": "src/services/config/ai-docs/config-spec.md",
555
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
556
+ },
557
+ {
558
+ "path": "src/services/config/ai-docs/ARCHITECTURE.md",
559
+ "scope": "module",
560
+ "role": "source-material",
561
+ "canonical": false,
562
+ "use_by_agents": "source-for-migration",
563
+ "module": "src/services/config",
564
+ "canonical_target": "src/services/config/ai-docs/config-spec.md",
565
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
566
+ },
567
+ {
568
+ "path": "src/services/core/ai-docs/AGENTS.md",
569
+ "scope": "module",
570
+ "role": "source-material",
571
+ "canonical": false,
572
+ "use_by_agents": "source-for-migration",
573
+ "module": "src/services/core",
574
+ "canonical_target": "src/services/core/ai-docs/core-spec.md",
575
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
576
+ },
577
+ {
578
+ "path": "src/services/core/ai-docs/ARCHITECTURE.md",
579
+ "scope": "module",
580
+ "role": "source-material",
581
+ "canonical": false,
582
+ "use_by_agents": "source-for-migration",
583
+ "module": "src/services/core",
584
+ "canonical_target": "src/services/core/ai-docs/core-spec.md",
585
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
586
+ },
587
+ {
588
+ "path": "src/services/task/ai-docs/AGENTS.md",
589
+ "scope": "module",
590
+ "role": "source-material",
591
+ "canonical": false,
592
+ "use_by_agents": "source-for-migration",
593
+ "module": "src/services/task",
594
+ "canonical_target": "src/services/task/ai-docs/task-spec.md",
595
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
596
+ },
597
+ {
598
+ "path": "src/services/task/ai-docs/ARCHITECTURE.md",
599
+ "scope": "module",
600
+ "role": "source-material",
601
+ "canonical": false,
602
+ "use_by_agents": "source-for-migration",
603
+ "module": "src/services/task",
604
+ "canonical_target": "src/services/task/ai-docs/task-spec.md",
605
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
606
+ },
607
+ {
608
+ "path": "src/services/task/state-machine/ai-docs/AGENTS.md",
609
+ "scope": "module",
610
+ "role": "source-material",
611
+ "canonical": false,
612
+ "use_by_agents": "source-for-migration",
613
+ "module": "src/services/task/state-machine",
614
+ "canonical_target": "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
615
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
616
+ },
617
+ {
618
+ "path": "src/services/task/state-machine/ai-docs/ARCHITECTURE.md",
619
+ "scope": "module",
620
+ "role": "source-material",
621
+ "canonical": false,
622
+ "use_by_agents": "source-for-migration",
623
+ "module": "src/services/task/state-machine",
624
+ "canonical_target": "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
625
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
626
+ },
627
+ {
628
+ "path": "src/utils/AGENTS.md",
629
+ "scope": "module",
630
+ "role": "source-material",
631
+ "canonical": false,
632
+ "use_by_agents": "source-for-migration",
633
+ "module": "src/utils",
634
+ "canonical_target": "src/utils/ai-docs/utils-spec.md",
635
+ "notes": "Retained in place; becomes a superseded migration source only after source-fidelity and canonical generation pass."
636
+ },
637
+ {
638
+ "path": "ai-docs/templates/README.md",
639
+ "scope": "reference",
640
+ "role": "reference-only",
641
+ "canonical": false,
642
+ "use_by_agents": "context-only",
643
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
644
+ },
645
+ {
646
+ "path": "ai-docs/templates/documentation/create-agents-md.md",
647
+ "scope": "reference",
648
+ "role": "reference-only",
649
+ "canonical": false,
650
+ "use_by_agents": "context-only",
651
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
652
+ },
653
+ {
654
+ "path": "ai-docs/templates/documentation/create-architecture-md.md",
655
+ "scope": "reference",
656
+ "role": "reference-only",
657
+ "canonical": false,
658
+ "use_by_agents": "context-only",
659
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
660
+ },
661
+ {
662
+ "path": "ai-docs/templates/existing-service/bug-fix.md",
663
+ "scope": "reference",
664
+ "role": "reference-only",
665
+ "canonical": false,
666
+ "use_by_agents": "context-only",
667
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
668
+ },
669
+ {
670
+ "path": "ai-docs/templates/existing-service/feature-enhancement.md",
671
+ "scope": "reference",
672
+ "role": "reference-only",
673
+ "canonical": false,
674
+ "use_by_agents": "context-only",
675
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
676
+ },
677
+ {
678
+ "path": "ai-docs/templates/new-method/00-master.md",
679
+ "scope": "reference",
680
+ "role": "reference-only",
681
+ "canonical": false,
682
+ "use_by_agents": "context-only",
683
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
684
+ },
685
+ {
686
+ "path": "ai-docs/templates/new-method/01-requirements.md",
687
+ "scope": "reference",
688
+ "role": "reference-only",
689
+ "canonical": false,
690
+ "use_by_agents": "context-only",
691
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
692
+ },
693
+ {
694
+ "path": "ai-docs/templates/new-method/02-implementation.md",
695
+ "scope": "reference",
696
+ "role": "reference-only",
697
+ "canonical": false,
698
+ "use_by_agents": "context-only",
699
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
700
+ },
701
+ {
702
+ "path": "ai-docs/templates/new-method/03-tests.md",
703
+ "scope": "reference",
704
+ "role": "reference-only",
705
+ "canonical": false,
706
+ "use_by_agents": "context-only",
707
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
708
+ },
709
+ {
710
+ "path": "ai-docs/templates/new-method/04-validation.md",
711
+ "scope": "reference",
712
+ "role": "reference-only",
713
+ "canonical": false,
714
+ "use_by_agents": "context-only",
715
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
716
+ },
717
+ {
718
+ "path": "ai-docs/templates/new-service/00-master.md",
719
+ "scope": "reference",
720
+ "role": "reference-only",
721
+ "canonical": false,
722
+ "use_by_agents": "context-only",
723
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
724
+ },
725
+ {
726
+ "path": "ai-docs/templates/new-service/01-pre-questions.md",
727
+ "scope": "reference",
728
+ "role": "reference-only",
729
+ "canonical": false,
730
+ "use_by_agents": "context-only",
731
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
732
+ },
733
+ {
734
+ "path": "ai-docs/templates/new-service/02-code-generation.md",
735
+ "scope": "reference",
736
+ "role": "reference-only",
737
+ "canonical": false,
738
+ "use_by_agents": "context-only",
739
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
740
+ },
741
+ {
742
+ "path": "ai-docs/templates/new-service/03-integration.md",
743
+ "scope": "reference",
744
+ "role": "reference-only",
745
+ "canonical": false,
746
+ "use_by_agents": "context-only",
747
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
748
+ },
749
+ {
750
+ "path": "ai-docs/templates/new-service/04-test-generation.md",
751
+ "scope": "reference",
752
+ "role": "reference-only",
753
+ "canonical": false,
754
+ "use_by_agents": "context-only",
755
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
756
+ },
757
+ {
758
+ "path": "ai-docs/templates/new-service/05-validation.md",
759
+ "scope": "reference",
760
+ "role": "reference-only",
761
+ "canonical": false,
762
+ "use_by_agents": "context-only",
763
+ "notes": "Legacy package workflow template retained unchanged; not a product intent/design source for canonical SDD specs."
764
+ }
765
+ ],
766
+ "spec_policy": {
767
+ "delta_grammar": {
768
+ "added": "## ADDED Requirements",
769
+ "modified": "## MODIFIED Requirements",
770
+ "removed": "## REMOVED Requirements"
771
+ },
772
+ "require_what_and_why": true,
773
+ "require_provenance": true,
774
+ "protected_specs": [
775
+ "ai-docs/contact-center-spec.md",
776
+ "src/metrics/ai-docs/metrics-spec.md",
777
+ "src/services/ai-docs/services-spec.md",
778
+ "src/services/agent/ai-docs/agent-spec.md",
779
+ "src/services/config/ai-docs/config-spec.md",
780
+ "src/services/core/ai-docs/core-spec.md",
781
+ "src/services/task/ai-docs/task-spec.md",
782
+ "src/services/task/state-machine/ai-docs/task-state-machine-spec.md",
783
+ "src/utils/ai-docs/utils-spec.md",
784
+ "AGENTS.md",
785
+ "ai-docs/ARCHITECTURE.md",
786
+ "ai-docs/RULES.md",
787
+ "ai-docs/CONTRACTS.md",
788
+ "ai-docs/SPEC_INDEX.md"
789
+ ],
790
+ "required_sections_by_change_class": {
791
+ "core_always": [
792
+ "Intent (WHAT)",
793
+ "Rationale (WHY)",
794
+ "Scope/Out-of-scope",
795
+ "Acceptance criteria",
796
+ "Contracts delta"
797
+ ],
798
+ "security_or_contract_or_perf_critical": [
799
+ "Data",
800
+ "Error Matrix",
801
+ "Resilience",
802
+ "Observability",
803
+ "Operations"
804
+ ]
805
+ }
806
+ },
807
+ "validation": {
808
+ "generator_runtime": "codex",
809
+ "validator_runtime": "claude-code",
810
+ "must_differ": true,
811
+ "blocking_severities": [
812
+ "Blocking"
813
+ ],
814
+ "generator_run_id": "contact-center-bootstrap-20260707",
815
+ "source_commit": "382831a838c34fb1520320654beaf12d4afdfacb",
816
+ "runtime_family": "openai-codex"
817
+ },
818
+ "layout": {
819
+ "sdd_root": ".sdd",
820
+ "docs_root": "ai-docs",
821
+ "agent_entry_path": "AGENTS.md",
822
+ "standing_docs_root": "ai-docs",
823
+ "spec_index_path": "ai-docs/SPEC_INDEX.md",
824
+ "module_docs_strategy": "source-local",
825
+ "module_docs_folder_name": "ai-docs",
826
+ "template_roots": {
827
+ "canonical": "../../../.sdd/templates",
828
+ "extensions": [
829
+ "../../../.sdd/templates/extensions"
830
+ ],
831
+ "legacy_compat": "ai-docs/templates"
832
+ },
833
+ "repo_skills_root": "../../../.agents/skills",
834
+ "runtime_skill_entrypoints": {
835
+ "codex": "../../../.agents/skills",
836
+ "cursor": "../../../.cursor/skills"
837
+ },
838
+ "contracts_strategy": "root-index-module-detail"
839
+ },
840
+ "tooling": {
841
+ "sdlc_skills": {
842
+ "source_repo": "repo-installed SDLC skills",
843
+ "source_ref": "brownfield-onboarding@0.1.6+codex.20260706172001",
844
+ "install_mode": "copy",
845
+ "installed_at": "2026-07-06T17:20:01Z",
846
+ "plugins": [
847
+ "brownfield-onboarding@0.1.6+codex.20260706172001",
848
+ "sdlc-lifecycle@0.1.1+codex.20260630150003"
849
+ ]
850
+ }
851
+ },
852
+ "coverage_ratchet": {
853
+ "enabled": true,
854
+ "waivers": []
855
+ },
856
+ "substrate": {
857
+ "source": "webex-js-sdk repository standards",
858
+ "consumed": [
859
+ "root lint/format configs (.eslintrc.js, .prettierrc, .editorconfig)",
860
+ "standard files (README.md, CONTRIBUTING.md, .github/CODEOWNERS)",
861
+ "workspace build/test tooling"
862
+ ],
863
+ "compliance_tier": "legacy"
864
+ },
865
+ "section_profiles": {
866
+ "repo": {
867
+ "owns_datastore": false,
868
+ "holds_client_state": true,
869
+ "components_interact": true,
870
+ "domain_data_across_components": true,
871
+ "caches_data": true,
872
+ "observability_convention": true,
873
+ "deploys_to_infra": true,
874
+ "shared_base_libs": true,
875
+ "is_monorepo": true,
876
+ "multi_platform": false,
877
+ "published_package": true,
878
+ "embedded_in_host": true,
879
+ "cross_repo_deps_material": true,
880
+ "security_arch_warranted": true
881
+ },
882
+ "resolved_by": "Codex generator with user-confirmed scope/module boundaries",
883
+ "resolved_at": "2026-07-07T13:41:40Z"
884
+ }
885
+ }