@bpmsoftwaresolutions/ai-engine-client 1.1.98 → 1.1.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/client.js +14 -910
- package/src/compat/aliases.js +160 -0
- package/src/domains/agent-communications.js +576 -1
- package/src/domains/communication-tickets.js +379 -0
- package/src/domains/database.js +6 -0
- package/src/domains/external-audio.js +30 -0
- package/src/domains/external-projects.js +29 -0
- package/src/domains/external-workflow-artifacts.js +14 -0
- package/src/domains/message-watch.js +35 -0
- package/src/domains/refactoring-transfers.js +405 -0
- package/src/index.js +1 -1
package/src/compat/aliases.js
CHANGED
|
@@ -38,6 +38,67 @@ export const COMPATIBILITY_ALIAS_GROUPS = [
|
|
|
38
38
|
'closeTransferChannel',
|
|
39
39
|
],
|
|
40
40
|
},
|
|
41
|
+
{
|
|
42
|
+
namespace: 'agentCommunications',
|
|
43
|
+
aliases: [
|
|
44
|
+
'bootstrapCommunication',
|
|
45
|
+
'negotiateCommunicationTransfer',
|
|
46
|
+
'resolveCommunicationTarget',
|
|
47
|
+
'createCommunicationEvidencePacket',
|
|
48
|
+
'listCommunicationFrictionTaxonomy',
|
|
49
|
+
'recordCommunicationFrictionEvent',
|
|
50
|
+
'openCommunicationThread',
|
|
51
|
+
'getCommunicationThread',
|
|
52
|
+
'listCommunicationInbox',
|
|
53
|
+
'getMyInbox',
|
|
54
|
+
'verifyMessageSent',
|
|
55
|
+
'verifyMessageReceived',
|
|
56
|
+
'getMessageDeliveryReceipt',
|
|
57
|
+
'_sendAgentCommsMessage',
|
|
58
|
+
'sendCommunicationMessage',
|
|
59
|
+
'acceptCommunicationTransferPacket',
|
|
60
|
+
'closeCommunicationTransferPacket',
|
|
61
|
+
'getCommunicationTransferHealth',
|
|
62
|
+
'acceptCommunicationMessage',
|
|
63
|
+
'respondToCommunicationMessage',
|
|
64
|
+
'attachCommunicationMessageEvidence',
|
|
65
|
+
'createCommunicationHandoff',
|
|
66
|
+
'acceptCommunicationHandoff',
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
namespace: 'communicationTickets',
|
|
71
|
+
aliases: ['createCrossAgentRemediationTicket'],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
namespace: 'refactoringTransfers',
|
|
75
|
+
aliases: ['transferRefactoringBundle'],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
namespace: 'externalProjects',
|
|
79
|
+
aliases: [
|
|
80
|
+
'getExternalProjectStatus',
|
|
81
|
+
'getExternalProjectRoadmapSummary',
|
|
82
|
+
'getExternalProjectRoadmapActiveItem',
|
|
83
|
+
'listExternalProjectOpenTasks',
|
|
84
|
+
'getExternalProjectStatusBundle',
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
namespace: 'externalAudio',
|
|
89
|
+
aliases: [
|
|
90
|
+
'createExternalAudioRender',
|
|
91
|
+
'getExternalAudioRender',
|
|
92
|
+
'downloadExternalAudioRender',
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
namespace: 'externalWorkflowArtifacts',
|
|
97
|
+
aliases: [
|
|
98
|
+
'listExternalWorkflowRunArtifacts',
|
|
99
|
+
'downloadExternalWorkflowRunArtifact',
|
|
100
|
+
],
|
|
101
|
+
},
|
|
41
102
|
{
|
|
42
103
|
namespace: 'collaboration',
|
|
43
104
|
aliases: [
|
|
@@ -56,3 +117,102 @@ export function listCompatibilityAliases() {
|
|
|
56
117
|
aliases: [...group.aliases],
|
|
57
118
|
}));
|
|
58
119
|
}
|
|
120
|
+
|
|
121
|
+
function defineCompatibilityMethods(proto, targetName, methodNames) {
|
|
122
|
+
for (const methodName of methodNames) {
|
|
123
|
+
if (Object.prototype.hasOwnProperty.call(proto, methodName)) continue;
|
|
124
|
+
Object.defineProperty(proto, methodName, {
|
|
125
|
+
value: function delegatedClientMethod(...args) {
|
|
126
|
+
return this[targetName][methodName](...args);
|
|
127
|
+
},
|
|
128
|
+
configurable: true,
|
|
129
|
+
writable: true,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function defineCompatibilityAliases(proto, targetName, methodMap) {
|
|
135
|
+
for (const [methodName, targetMethodName] of Object.entries(methodMap)) {
|
|
136
|
+
if (Object.prototype.hasOwnProperty.call(proto, methodName)) continue;
|
|
137
|
+
Object.defineProperty(proto, methodName, {
|
|
138
|
+
value: function delegatedClientMethod(...args) {
|
|
139
|
+
return this[targetName][targetMethodName](...args);
|
|
140
|
+
},
|
|
141
|
+
configurable: true,
|
|
142
|
+
writable: true,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function installClientCompatibilityDelegates(ClientClass) {
|
|
148
|
+
const proto = ClientClass.prototype;
|
|
149
|
+
defineCompatibilityMethods(proto, 'health', ['ping']);
|
|
150
|
+
defineCompatibilityMethods(proto, 'operatorStatus', ['currentWorkflowStatus', 'getCurrentWorkflowStatus', 'currentArchitectureIntegrityStatus', 'getCurrentArchitectureIntegrityStatus', 'currentSecurityGovernanceStatus', 'getCurrentSecurityGovernanceStatus', 'getExecutionTelemetryCurrent', 'listExecutionProcessRuns', 'getExecutionProcessRun', 'getGeneratedExecutionUsability', 'getLogaGeneratedExecutionUsabilityProjection', 'getAntiPatternRules', 'currentCodebaseShapeStatus', 'getLatestMemoryProjection', 'currentProjectStatus', 'getDashboard', 'getCommunicationCapabilities', 'getCollaborationCapabilities', 'getDeploymentCapabilities']);
|
|
151
|
+
defineCompatibilityMethods(proto, 'database', ['query', 'createDatabaseBackup', 'listDatabaseBackups', 'getDatabaseBackup', 'listDatabaseBackupOperations', 'runAzureSqlBacpacBackup', 'listAzureSqlBacpacBackups', 'listAzureSqlBacpacBackupOperations']);
|
|
152
|
+
defineCompatibilityMethods(proto, 'database', ['describeDatabaseCatalog', 'listDatabaseSchemas', 'listDatabaseTables', 'listDatabaseColumns', 'listDatabaseIndexes', 'describeDatabaseTable']);
|
|
153
|
+
defineCompatibilityMethods(proto, 'reports', ['runReport', 'runReportDefinition']);
|
|
154
|
+
defineCompatibilityMethods(proto, 'retrievalWrapper', ['getCommandCard', 'resolveOperatingProcedure', 'getSymbolDefinition', 'getRelatedCode']);
|
|
155
|
+
defineCompatibilityMethods(proto, 'repo', ['listRepositories', 'getRepository', 'listCodeFiles', 'getCodeFile', 'getCodeFileContentWindow', 'listCodeSymbolsByFile', 'getCodeSymbol', 'searchSymbols', 'getSymbolRelationships', 'listCodeRelationships', 'listActionObservations', 'listCodebaseShapeFindings', 'listObjectFlowObservations', 'getChangeAnalysis', 'listRefactorCandidates', 'analyzeRefactorCandidate', 'getRepoRetrievalPacket', 'getRepoRetrievalPacketFragments', 'evaluateProposalScope']);
|
|
156
|
+
defineCompatibilityMethods(proto, 'retrievalManagement', ['getRetrievalStatus', 'getRetrievalProfileMetrics', 'getRetrievalFeedbackMetrics', 'getRetrievalQuery', 'getRetrievalPacket', 'generateRetrievalCandidates', 'selectRetrievalPacket', 'recordRetrievalFeedback', 'deriveRetrievalOptimizationCandidates', 'validatePromptAssembly']);
|
|
157
|
+
defineCompatibilityMethods(proto, 'workflows', ['listWorkflows', 'createWorkflow', 'getWorkflow', 'replaceWorkflowSteps', 'publishWorkflow', 'cloneWorkflow', 'evaluateWorkflowGovernance', 'listWorkflowGovernanceDecisions', 'getWorkflowGovernanceSimulation', 'listWorkflowGovernanceBundles', 'listWorkflowGovernanceApprovals', 'listWorkflowGovernanceEvents', 'getWorkflowGovernanceReview', 'createWorkflowGovernanceReviewDecision', 'createWorkflowRun', 'getWorkflowRun', 'listWorkflowArtifacts', 'getWorkflowRunSubstrate', 'getWorkflowPlayback', 'resumeWorkflowRun', 'listRecentInspectorRuns', 'inspectWorkflowRun']);
|
|
158
|
+
defineCompatibilityMethods(proto, 'projects', ['listProjects', 'getProject', 'listProjectWorkflowRuns', 'closeProject', 'closeActiveProject', 'getProjectBundle', 'listProjectOpenTasks', 'closeRoadmapItemWorkflow']);
|
|
159
|
+
defineCompatibilityMethods(proto, 'projectChartering', ['createProjectCharter', 'createProjectDelivery', 'approveProjectCharterIntent', 'approveImplementationRoadmap', 'runProjectCharter', 'beginImplementationRoadmap', 'routeImplementationItem']);
|
|
160
|
+
defineCompatibilityMethods(proto, 'projectReports', ['getProjectCharterReport', 'createProjectMarkdownDownload', 'downloadProjectMarkdownReport', 'downloadProjectCharterReportMarkdown']);
|
|
161
|
+
defineCompatibilityMethods(proto, 'projectResume', ['resumeProjectWork']);
|
|
162
|
+
defineCompatibilityMethods(proto, 'roadmaps', ['listProjectRoadmaps', 'getProjectRoadmap', 'getProjectRoadmapSummary', 'getProjectRoadmapActiveItem', 'listProjectOpenTasks', 'getProjectPerformanceMetrics', 'ensureProjectRoadmapTaskSurface']);
|
|
163
|
+
defineCompatibilityMethods(proto, 'roadmapReports', ['getProjectImplementationRoadmapReport', 'downloadProjectImplementationRoadmapReportMarkdown']);
|
|
164
|
+
defineCompatibilityMethods(proto, 'implementationTasks', ['createImplementationTask', 'listImplementationTasks', 'listImplementationSubtasks', 'updateImplementationTask', 'assignImplementationTask', 'completeImplementationTask']);
|
|
165
|
+
defineCompatibilityMethods(proto, 'implementationPackets', ['importImplementationPacket', 'listImplementationPackets', 'getImplementationPacket', 'bindImplementationPacketToWorkflow', 'getWorkflowImplementationRoadmap', 'getWorkflowResumeContext', 'importImplementationPacketAndMaterializeRoadmap']);
|
|
166
|
+
defineCompatibilityMethods(proto, 'implementationChecks', ['getImplementationItemAcceptanceChecks', 'updateAcceptanceCheckStatus', 'updateAcceptanceCheckStatusVerified']);
|
|
167
|
+
defineCompatibilityMethods(proto, 'implementationArtifacts', ['getArtifactManifest', 'getDecisionPacket', 'verifyImplementationItemArtifacts']);
|
|
168
|
+
defineCompatibilityMethods(proto, 'implementationItems', ['updateImplementationItemStatus', 'updateImplementationItemStatusVerified']);
|
|
169
|
+
defineCompatibilityMethods(proto, 'implementationEvidence', ['addImplementationItemEvidence', 'addImplementationItemActivity', 'listImplementationItemActivity']);
|
|
170
|
+
defineCompatibilityMethods(proto, 'implementationGates', ['createImplementationPacketGateDecision']);
|
|
171
|
+
defineCompatibilityMethods(proto, 'workflowTurns', ['completeTurn', 'persistAssistantTurn']);
|
|
172
|
+
defineCompatibilityMethods(proto, 'claims', ['getClaim', 'claimIsValid', 'signoffClaim', 'promoteClaimSurface']);
|
|
173
|
+
defineCompatibilityMethods(proto, 'sessionGovernance', ['startSessionGovernance', 'startReviewGovernance', 'evaluateTurnCompliance', 'blockIfNonCompliant']);
|
|
174
|
+
defineCompatibilityMethods(proto, 'workStart', ['startWork', 'startClaimedWork', 'claimWorkItem', 'bindClaimedWorkItem']);
|
|
175
|
+
defineCompatibilityMethods(proto, 'executionEligibility', ['getExecutionEligibility', '_assertExecutionEligibility']);
|
|
176
|
+
defineCompatibilityMethods(proto, 'toolBindingApprovals', ['createWorkflowToolBindingApprovalLane', 'recordWorkflowToolBindingApprovalDecision', 'executeWorkflowToolBindingApprovalBinding', 'revalidateWorkflowToolBindingStartup']);
|
|
177
|
+
defineCompatibilityMethods(proto, 'verifiedMutations', ['executeVerifiedMutation']);
|
|
178
|
+
defineCompatibilityMethods(proto, 'charters', ['runCharter']);
|
|
179
|
+
defineCompatibilityMethods(proto, 'pingPong', ['checkCoordinationPingPongPreflight', 'startCoordinationPingPong', 'sendCoordinationPing', 'sendCoordinationPong', 'getCoordinationPingPongStatus', 'stopCoordinationPingPong']);
|
|
180
|
+
defineCompatibilityAliases(proto, 'pingPong', { pingAgentCommunicationPeer: 'sendCoordinationPing', pongAgentCommunicationPeer: 'sendCoordinationPong' });
|
|
181
|
+
defineCompatibilityMethods(proto, 'transferChannels', ['listCommunicationChannels', 'listOpenCommunicationChannels', 'getCommunicationChannelStatus', 'getCommunicationChannelParticipants', 'openTransferChannel', 'joinTransferChannel', 'resumeTransferChannel', 'replyToTransferChannel', 'closeTransferChannel', 'requestTransferClosure', 'openAgentChannel', 'connectToTransferChannel', 'startAgentConnection', 'postAgentHeartbeat', 'closeAgentChannel']);
|
|
182
|
+
defineCompatibilityMethods(proto, 'messageWatch', ['startMessageWatch', 'acknowledgeExpectedMessage', 'expireMessageWatch', 'respondToMessageWatch', 'acceptAgentChannel', 'resolveMessageWatchId']);
|
|
183
|
+
defineCompatibilityMethods(proto, 'messageWatch', ['acknowledgeAgentMessage']);
|
|
184
|
+
defineCompatibilityMethods(proto, 'presence', ['getPresenceBoard', 'getChannelPresence', 'markParticipantOnline', 'markParticipantOffline', 'whoIsOnline', 'findOnlineParticipant', 'sendToParticipant', 'sendToRole', 'postPresenceHeartbeat']);
|
|
185
|
+
defineCompatibilityMethods(proto, 'collaborationDomain', ['reviewCollaborationProposal', 'reviseCollaborationProposal', 'postCollaborationProposal', 'acceptCollaborationProposal', 'assignCollaborationOwnership', 'raiseCollaborationBlocker', 'resolveCollaborationBlocker', 'postCollaborationHeartbeat', 'beginCollaborationImplementation', 'requestCollaborationClosure']);
|
|
186
|
+
defineCompatibilityMethods(proto, 'transferBundles', ['transferWorkPacket', 'getTransferBundle', 'listTransferBundles', 'createTransferReceipt', 'listTransferReceipts', 'createCommunicationBundle', 'getCommunicationBundle', 'listCommunicationBundles', 'addCommunicationBundleItem', 'uploadCommunicationBundle', 'attachCommunicationBundleToMessage', 'recordCommunicationBundleReceipt', 'recordCommunicationBundleCleanupEvent', 'claimCommunicationBundle', 'recordCommunicationTransferReceipt']);
|
|
187
|
+
defineCompatibilityMethods(proto, 'workflowComposition', ['registerModernizationAsset', 'classifyModernizationAsset', 'discoverSalvageCandidates', 'createModernizationWorkPacket', 'requestModernizationWrapperExecution', 'getModernizationWrapperEvidence', 'decideModernizationGate']);
|
|
188
|
+
defineCompatibilityMethods(proto, 'currentProject', ['currentProjectStatus']);
|
|
189
|
+
defineCompatibilityMethods(proto, 'projections', ['renderProjection', 'getLogaOperatorHomeProjection', 'getLogaProjectCatalogProjection', 'getLogaProjectPortfolioProjection', 'getLogaProjectRoadmapProjection', 'getLogaRoadmapItemProjection', 'getLogaWorkflowRunProjection', 'getLogaEvidencePacketProjection', 'getLogaTransferHomeProjection', 'getLogaTransferInboxProjection', 'getLogaTransferPacketProjection', 'getLogaTransferNegotiationEventsProjection', 'getLogaTransferFrictionLaneProjection', 'getLogaTransferReceiptsProjection', 'getLogaTransferClosureReviewProjection', 'getTransferChannelProjection']);
|
|
190
|
+
defineCompatibilityAliases(proto, 'projections', { getLogaTransferChannelThreadProjection: 'getTransferChannelProjection' });
|
|
191
|
+
defineCompatibilityMethods(proto, 'loga', ['submitUxGateRemediation', 'listUxGateRemediations', 'getUxGateRemediation', 'appendUxRemediationTicketNote', 'listUxRemediationTicketNotes', 'promoteUxGateRemediationImplementationCandidate', 'getLogaUxGateRemediationProjection', 'getUxGateRemediationProjection']);
|
|
192
|
+
defineCompatibilityMethods(proto, 'actions', ['submitActionIntent']);
|
|
193
|
+
defineCompatibilityMethods(proto, 'executionTelemetry', ['getExecutionTelemetryCurrent', 'listExecutionProcessRuns', 'getExecutionProcessRun', 'getGeneratedExecutionUsability', 'getLogaGeneratedExecutionUsabilityProjection']);
|
|
194
|
+
defineCompatibilityMethods(proto, 'scripts', ['generateScript', 'renderScript', 'submitScriptArtifact', 'getScriptRunEvidence']);
|
|
195
|
+
defineCompatibilityMethods(proto, 'capabilities', ['listCapabilities', 'createCapability', 'testCapability']);
|
|
196
|
+
defineCompatibilityMethods(proto, 'skills', ['currentSkillRegistryStatus', 'getSkillContract', 'getSkillGovernance', 'createSkillContractDraft', 'recordSkillPatternReview', 'approveSkillContract', 'createWorkflowSkillContract', 'listWorkflowSkillBindings', 'seedFrequentOperationSkills']);
|
|
197
|
+
defineCompatibilityMethods(proto, 'skillGovernance', ['createSkillGovernanceChange', 'listSkillGovernanceChanges', 'getSkillGovernanceChange']);
|
|
198
|
+
defineCompatibilityMethods(proto, 'toolRegistry', ['currentToolRegistryStatus', 'getWorkflowToolRegistry', 'currentAssistantToolContext', 'getTool', 'getToolHistory', 'getToolInvocations', 'getToolEventReplayBundle', 'getToolGovernance', 'createToolReviewDecision', 'createToolGateDecision']);
|
|
199
|
+
defineCompatibilityMethods(proto, 'contextAssembly', ['getContextAssemblyContract', 'getContextAssemblyStatus', 'getOperatorContext', 'getContextFragments', 'getContextReuse', 'listPromptAssemblies']);
|
|
200
|
+
defineCompatibilityMethods(proto, 'performance', ['getSessionPerformanceMetrics', 'captureBenchmarkSnapshot', 'listBenchmarks', 'getBenchmarkMetrics', 'getBenchmarkDelta', 'getBenchmarkTrend', 'getPerformanceDashboard']);
|
|
201
|
+
defineCompatibilityMethods(proto, 'selfLearning', ['getSelfLearningPosture', 'listLearningRecords', 'getLearningRecord', 'listPromotionCandidates', 'getPromotionCandidate', 'listPromotionFlows']);
|
|
202
|
+
defineCompatibilityMethods(proto, 'selfOptimization', ['getSelfOptimizationDashboard', 'getSelfOptimizationCandidateQueue', 'getSelfOptimizationBacklogPosture', 'getSelfOptimizationPendingHandoffs']);
|
|
203
|
+
defineCompatibilityMethods(proto, 'designIntelligence', ['getDesignIntelligenceDashboard', 'listDesignDecisions', 'getDesignDecision', 'getDesignDecisionVariants', 'getDesignDecisionCritique', 'getDesignDecisionLineage', 'listDesignPatterns', 'getDecisionLabCanvas', 'getDesignRecommendations', 'getDesignPromotions', 'previewDesignPromotion', 'getDesignIntelligenceMetrics']);
|
|
204
|
+
defineCompatibilityMethods(proto, 'scriptDiscovery', ['scanScripts', 'listDiscoveredScriptAssets', 'listDiscoveredCapabilities', 'listWorkflowCandidates', 'promoteWorkflowCandidate']);
|
|
205
|
+
defineCompatibilityMethods(proto, 'notesLab', ['getNotesLabConfig', 'submitNote', 'approveNoteReview']);
|
|
206
|
+
defineCompatibilityMethods(proto, 'searchContacts', ['search', 'getOrganization', 'getContact']);
|
|
207
|
+
defineCompatibilityMethods(proto, 'benchmarks', ['listRecentBenchmarkRuns', 'getBenchmarkRun']);
|
|
208
|
+
defineCompatibilityMethods(proto, 'commitGovernance', ['evaluateCommitGovernance', 'checkGitShipReadiness', 'getCommitGovernanceEvaluation', 'listCommitGovernanceEvaluationsByClaim']);
|
|
209
|
+
defineCompatibilityMethods(proto, 'contextSessions', ['openContextSession', 'getOrientationWindow', 'acknowledgeReminder', 'completeOrientation', 'lockContextSessionClaim', 'getContextSessionGateStatus']);
|
|
210
|
+
defineCompatibilityMethods(proto, 'contextOrientation', ['conductOrientation']);
|
|
211
|
+
defineCompatibilityMethods(proto, 'portfolio', ['getPortfolioStatus', 'getPortfolioBundle', 'getPortfolioClosureReadiness']);
|
|
212
|
+
defineCompatibilityMethods(proto, 'agentCommunications', ['bootstrapCommunication', 'negotiateCommunicationTransfer', 'resolveCommunicationTarget', 'createCommunicationEvidencePacket', 'listCommunicationFrictionTaxonomy', 'recordCommunicationFrictionEvent', 'openCommunicationThread', 'getCommunicationThread', 'listCommunicationInbox', 'getMyInbox', 'verifyMessageSent', 'verifyMessageReceived', 'getMessageDeliveryReceipt', '_sendAgentCommsMessage', 'sendCommunicationMessage', 'acceptCommunicationTransferPacket', 'closeCommunicationTransferPacket', 'getCommunicationTransferHealth', 'acceptCommunicationMessage', 'respondToCommunicationMessage', 'attachCommunicationMessageEvidence', 'createCommunicationHandoff', 'acceptCommunicationHandoff']);
|
|
213
|
+
defineCompatibilityMethods(proto, 'communicationTickets', ['createCrossAgentRemediationTicket']);
|
|
214
|
+
defineCompatibilityMethods(proto, 'refactoringTransfers', ['transferRefactoringBundle']);
|
|
215
|
+
defineCompatibilityMethods(proto, 'externalProjects', ['getExternalProjectStatus', 'getExternalProjectRoadmapSummary', 'getExternalProjectRoadmapActiveItem', 'listExternalProjectOpenTasks', 'getExternalProjectStatusBundle']);
|
|
216
|
+
defineCompatibilityMethods(proto, 'externalAudio', ['createExternalAudioRender', 'getExternalAudioRender', 'downloadExternalAudioRender']);
|
|
217
|
+
defineCompatibilityMethods(proto, 'externalWorkflowArtifacts', ['listExternalWorkflowRunArtifacts', 'downloadExternalWorkflowRunArtifact']);
|
|
218
|
+
}
|