@bpmsoftwaresolutions/ai-engine-client 1.1.88 → 1.1.90

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 (37) hide show
  1. package/package.json +1 -1
  2. package/src/client.js +282 -2369
  3. package/src/domains/actions.js +19 -1
  4. package/src/domains/benchmarks.js +9 -9
  5. package/src/domains/capabilities.js +3 -3
  6. package/src/domains/charters.js +5 -0
  7. package/src/domains/claims.js +58 -0
  8. package/src/domains/commit-governance.js +68 -0
  9. package/src/domains/context-assembly.js +16 -6
  10. package/src/domains/context-orientation.js +48 -0
  11. package/src/domains/context-sessions.js +46 -0
  12. package/src/domains/database.js +136 -7
  13. package/src/domains/design-intelligence.js +12 -12
  14. package/src/domains/execution-eligibility.js +44 -0
  15. package/src/domains/execution-telemetry.js +14 -4
  16. package/src/domains/governed-implementation.js +7 -0
  17. package/src/domains/health.js +12 -1
  18. package/src/domains/loga.js +54 -9
  19. package/src/domains/notes-lab.js +3 -3
  20. package/src/domains/operator-status.js +31 -11
  21. package/src/domains/performance.js +15 -4
  22. package/src/domains/projections.js +65 -9
  23. package/src/domains/reports.js +16 -1
  24. package/src/domains/script-discovery.js +8 -5
  25. package/src/domains/scripts.js +45 -4
  26. package/src/domains/search-contacts.js +3 -3
  27. package/src/domains/self-learning.js +29 -6
  28. package/src/domains/self-optimization.js +15 -4
  29. package/src/domains/session-governance.js +64 -0
  30. package/src/domains/skill-governance.js +5 -3
  31. package/src/domains/skills.js +22 -9
  32. package/src/domains/tool-binding-approvals.js +102 -0
  33. package/src/domains/tool-registry.js +18 -10
  34. package/src/domains/verified-mutations.js +7 -0
  35. package/src/domains/work-start.js +192 -0
  36. package/src/domains/workflow-turns.js +6 -0
  37. package/src/index.js +1 -1
@@ -1,14 +1,22 @@
1
1
  export function createToolRegistryDomain(client) {
2
2
  return {
3
- currentToolRegistryStatus: () => client.currentToolRegistryStatus(),
4
- getWorkflowToolRegistry: (request) => client.getWorkflowToolRegistry(request),
5
- currentAssistantToolContext: () => client.currentAssistantToolContext(),
6
- getTool: (toolKey) => client.getTool(toolKey),
7
- getToolHistory: (toolKey) => client.getToolHistory(toolKey),
8
- getToolInvocations: (toolKey) => client.getToolInvocations(toolKey),
9
- getToolGovernance: (toolKey) => client.getToolGovernance(toolKey),
10
- getToolEventReplayBundle: (toolEventSummaryId) => client.getToolEventReplayBundle(toolEventSummaryId),
11
- createToolReviewDecision: (toolKey, body) => client.createToolReviewDecision(toolKey, body),
12
- createToolGateDecision: (toolKey, body) => client.createToolGateDecision(toolKey, body),
3
+ currentToolRegistryStatus: () => client._request('/api/operator/current-tool-registry-status'),
4
+ getWorkflowToolRegistry: ({ workflowId, workflowSlug } = {}) => client._request('/api/operator/workflow-tool-registry', {
5
+ query: { workflow_id: workflowId, workflow_slug: workflowSlug },
6
+ }),
7
+ currentAssistantToolContext: () => client._request('/api/operator/current-assistant-tool-context'),
8
+ getTool: (toolKey) => client._request(`/api/tools/${toolKey}`),
9
+ getToolHistory: (toolKey) => client._request(`/api/tools/${toolKey}/history`),
10
+ getToolInvocations: (toolKey) => client._request(`/api/tools/${toolKey}/invocations`),
11
+ getToolGovernance: (toolKey) => client._request(`/api/tools/${toolKey}/governance`),
12
+ getToolEventReplayBundle: (toolEventSummaryId) => client._request(`/api/operator/tool-events/${toolEventSummaryId}/replay-bundle`),
13
+ createToolReviewDecision: (toolKey, body) => client._request(`/api/governance/tools/${toolKey}/review-decisions`, {
14
+ method: 'POST',
15
+ body,
16
+ }),
17
+ createToolGateDecision: (toolKey, body) => client._request(`/api/governance/tools/${toolKey}/gate-decisions`, {
18
+ method: 'POST',
19
+ body,
20
+ }),
13
21
  };
14
22
  }
@@ -0,0 +1,7 @@
1
+ import { executeVerifiedMutation as executeVerifiedMutationHelper } from '../utils/verified-mutations.js';
2
+
3
+ export function createVerifiedMutationsDomain(client) {
4
+ return {
5
+ executeVerifiedMutation: (request = {}) => executeVerifiedMutationHelper(request),
6
+ };
7
+ }
@@ -0,0 +1,192 @@
1
+ import { cleanList, cleanText, isPlainObject } from '../utils/text.js';
2
+ import { normalizeMetadataTaskBinding, normalizeTaskBindingPolicy } from '../utils/task-binding.js';
3
+ import { contextSessionIdFromInput } from './context-sessions.js';
4
+
5
+ function isActiveBinding(binding) {
6
+ return binding !== null && typeof binding === 'object' && !Array.isArray(binding) && (
7
+ binding.is_active === true ||
8
+ binding.is_active === 1 ||
9
+ binding.is_active === 'true' ||
10
+ binding.is_active === 'True'
11
+ );
12
+ }
13
+
14
+ function activeToolKeysFromRegistry(registry) {
15
+ const bindings = Array.isArray(registry?.bindings) ? registry.bindings : [];
16
+ const seen = new Set();
17
+ const keys = [];
18
+ for (const binding of bindings) {
19
+ if (!isActiveBinding(binding)) continue;
20
+ const key = cleanText(binding.tool_key);
21
+ if (!key || seen.has(key)) continue;
22
+ seen.add(key);
23
+ keys.push(key);
24
+ }
25
+ return keys;
26
+ }
27
+
28
+ function reminderTokens(reminders) {
29
+ const tokens = [];
30
+ for (const reminder of Array.isArray(reminders) ? reminders : []) {
31
+ if (reminder === null || typeof reminder !== 'object' || Array.isArray(reminder)) continue;
32
+ for (const value of [reminder.reminder_key, reminder.reminder_id]) {
33
+ const token = cleanText(value);
34
+ if (token && !tokens.includes(token)) tokens.push(token);
35
+ }
36
+ }
37
+ return tokens;
38
+ }
39
+
40
+ export function createWorkStartDomain(client) {
41
+ return {
42
+ startWork: (body = {}) => client._request('/api/work/start', { method: 'POST', body }),
43
+ startClaimedWork: ({
44
+ claimName,
45
+ actorId,
46
+ intentId,
47
+ declaredScopeFiles,
48
+ allowedMutationSurfaces,
49
+ runtimeSessionId,
50
+ executionPurpose,
51
+ successCriteria,
52
+ mutationAllowed,
53
+ metadata,
54
+ ...rest
55
+ } = {}) => client._request('/api/governance/claims/start-claimed-work', {
56
+ method: 'POST',
57
+ body: {
58
+ ...rest,
59
+ claim_name: claimName,
60
+ actor_id: actorId,
61
+ intent_id: intentId,
62
+ declared_scope_files: declaredScopeFiles,
63
+ allowed_mutation_surfaces: allowedMutationSurfaces,
64
+ runtime_session_id: runtimeSessionId,
65
+ execution_purpose: executionPurpose,
66
+ success_criteria: successCriteria,
67
+ mutation_allowed: mutationAllowed,
68
+ metadata: normalizeMetadataTaskBinding(metadata),
69
+ },
70
+ }),
71
+ claimWorkItem: (body = {}) => {
72
+ const normalizedBody = body !== null && typeof body === 'object' && !Array.isArray(body)
73
+ ? {
74
+ ...body,
75
+ ...(body.task_binding !== null && typeof body.task_binding === 'object' && !Array.isArray(body.task_binding)
76
+ ? { task_binding: normalizeTaskBindingPolicy(body.task_binding) }
77
+ : {}),
78
+ metadata: normalizeMetadataTaskBinding(body.metadata),
79
+ }
80
+ : body;
81
+ return client._request('/api/governance/claims/claim-work-item', { method: 'POST', body: normalizedBody });
82
+ },
83
+ bindClaimedWorkItem: async ({
84
+ claimId,
85
+ contextSessionId,
86
+ workflowRunId,
87
+ agentSessionId,
88
+ claimedItemId,
89
+ claimedItemKey,
90
+ claimName,
91
+ actorId,
92
+ workflowId,
93
+ workflowSlug,
94
+ requiredToolKeys,
95
+ declaredScopeFiles,
96
+ allowedMutationSurfaces,
97
+ successCriteria,
98
+ acknowledgedReminders,
99
+ intentConfirmation,
100
+ actorSignature,
101
+ autoSignoff = true,
102
+ metadata,
103
+ } = {}) => {
104
+ const normalizedContextSessionId = contextSessionIdFromInput({
105
+ contextSessionId,
106
+ context_session_id: contextSessionId,
107
+ claim: { context_session_id: contextSessionId },
108
+ });
109
+ const normalizedClaimId = cleanText(claimId);
110
+ const normalizedWorkflowRunId = cleanText(workflowRunId);
111
+ const normalizedAgentSessionId = cleanText(agentSessionId);
112
+ const normalizedClaimedItemId = cleanText(claimedItemId);
113
+ const normalizedClaimedItemKey = cleanText(claimedItemKey);
114
+ const normalizedClaimedItemRef = normalizedClaimedItemId || normalizedClaimedItemKey;
115
+ if (!normalizedContextSessionId) throw new Error('contextSessionId is required.');
116
+ if (!normalizedWorkflowRunId) throw new Error('workflowRunId is required.');
117
+ if (!normalizedAgentSessionId) throw new Error('agentSessionId is required.');
118
+ if (!normalizedClaimedItemRef) throw new Error('claimedItemId or claimedItemKey is required.');
119
+
120
+ const normalizedWorkflowId = cleanText(workflowId);
121
+ const normalizedWorkflowSlug = cleanText(workflowSlug);
122
+ let normalizedRequiredToolKeys = cleanList(requiredToolKeys);
123
+ let workflowRegistry = null;
124
+ if (normalizedRequiredToolKeys.length === 0 && (normalizedWorkflowId || normalizedWorkflowSlug)) {
125
+ workflowRegistry = await client.getWorkflowToolRegistry({
126
+ workflowId: normalizedWorkflowId,
127
+ workflowSlug: normalizedWorkflowSlug,
128
+ });
129
+ normalizedRequiredToolKeys = activeToolKeysFromRegistry(workflowRegistry);
130
+ }
131
+
132
+ const lockClaimResult = await client.contextSessions.lockContextSessionClaim(normalizedContextSessionId);
133
+ const lockedContextSession = lockClaimResult?.context_session || lockClaimResult;
134
+ const lockedContextSessionId = contextSessionIdFromInput(lockedContextSession) || normalizedContextSessionId;
135
+
136
+ const claimWorkItemResult = await client.claimWorkItem({
137
+ context_session_id: lockedContextSessionId,
138
+ workflow_run_id: normalizedWorkflowRunId,
139
+ agent_session_id: normalizedAgentSessionId,
140
+ claimed_item_id: normalizedClaimedItemId,
141
+ claimed_item_key: normalizedClaimedItemKey,
142
+ claim_name: claimName,
143
+ actor_id: actorId,
144
+ workflow_id: normalizedWorkflowId,
145
+ workflow_slug: normalizedWorkflowSlug,
146
+ required_tool_keys: normalizedRequiredToolKeys,
147
+ declared_scope_files: cleanList(declaredScopeFiles).length > 0
148
+ ? cleanList(declaredScopeFiles)
149
+ : [normalizedClaimedItemRef],
150
+ allowed_mutation_surfaces: cleanList(allowedMutationSurfaces).length > 0
151
+ ? cleanList(allowedMutationSurfaces)
152
+ : ['project_roadmap_task'],
153
+ success_criteria: successCriteria,
154
+ metadata,
155
+ });
156
+
157
+ let signedClaim = null;
158
+ const resolvedClaimId = cleanText(claimWorkItemResult?.claim_id) || normalizedClaimId;
159
+ if (autoSignoff && resolvedClaimId) {
160
+ const claimEnvelope = isPlainObject(claimWorkItemResult?.claim) ? claimWorkItemResult.claim : claimWorkItemResult;
161
+ const reminders = cleanList(acknowledgedReminders).length > 0
162
+ ? cleanList(acknowledgedReminders)
163
+ : reminderTokens(claimEnvelope?.required_reminders);
164
+ if (reminders.length > 0) {
165
+ signedClaim = await client.signoffClaim(resolvedClaimId, {
166
+ acknowledged_reminders: reminders,
167
+ intent_confirmation: cleanText(intentConfirmation) || 'I confirm this governed execution intent and scope.',
168
+ actor_signature: cleanText(actorSignature) || cleanText(actorId) || client.actorId,
169
+ });
170
+ }
171
+ }
172
+
173
+ return {
174
+ claim_id: resolvedClaimId,
175
+ context_session_id: lockedContextSessionId,
176
+ workflow_run_id: normalizedWorkflowRunId,
177
+ agent_session_id: normalizedAgentSessionId,
178
+ required_tool_keys: normalizedRequiredToolKeys,
179
+ workflow_registry: workflowRegistry,
180
+ lock_claim_result: lockClaimResult,
181
+ claim_work_item_result: claimWorkItemResult,
182
+ signed_claim: signedClaim,
183
+ approved_tool_keys: cleanList(
184
+ signedClaim?.approved_tool_keys ||
185
+ signedClaim?.claim?.approved_tool_keys ||
186
+ claimWorkItemResult?.approved_tool_keys ||
187
+ claimWorkItemResult?.claim?.approved_tool_keys
188
+ ),
189
+ };
190
+ },
191
+ };
192
+ }
@@ -0,0 +1,6 @@
1
+ export function createWorkflowTurnsDomain(client) {
2
+ return {
3
+ completeTurn: (body = {}) => client._request('/api/turns/complete', { method: 'POST', body }),
4
+ persistAssistantTurn: (body) => client._request('/api/v1/assistant-turns', { method: 'POST', body }),
5
+ };
6
+ }
package/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export { AIEngineClient, createAIEngineClient } from './client.js';
2
- export const AI_ENGINE_CLIENT_VERSION = '1.1.88';
2
+ export const AI_ENGINE_CLIENT_VERSION = '1.1.90';
3
3
  export { GOVERNED_MUTATION_REQUIRED_CAPABILITIES, AI_ENGINE_CLIENT_CAPABILITIES, TASK_BOUND_SUBSTRATE_EXECUTION_POLICY } from './constants/governance.js';
4
4
  export { LOGA_CONTRACT, LOGA_INTERACTION_CONTRACT, LOGA_NAVIGATION_CONTRACT, LOGA_PROJECTION_WORKFLOW } from './constants/loga.js';
5
5
  export {