@indexnetwork/protocol 13.1.0-rc.465.1 → 13.2.1-rc.467.1
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/CHANGELOG.md +49 -0
- package/dist/communities/public/index.d.ts +2 -2
- package/dist/communities/public/index.js +2 -2
- package/dist/contacts/public/index.d.ts +1 -1
- package/dist/contacts/public/index.js +1 -1
- package/dist/integrations/public/index.d.ts +1 -1
- package/dist/integrations/public/index.js +1 -1
- package/dist/mcp/mcp.server.d.ts +1 -1
- package/dist/mcp/mcp.server.js +1 -1
- package/dist/negotiation/public/index.d.ts +1 -1
- package/dist/negotiation/public/index.js +1 -1
- package/dist/participant-agents/public/index.d.ts +1 -1
- package/dist/participant-agents/public/index.js +1 -1
- package/dist/participant-context/application/index.js +1 -1
- package/dist/participant-context/domain/index.d.ts +1 -1
- package/dist/participant-context/domain/index.js +1 -1
- package/dist/participant-context/public/index.d.ts +2 -2
- package/dist/participant-context/public/index.js +2 -2
- package/dist/questions/domain/question.schema.d.ts +6 -6
- package/dist/questions/domain/question.schema.js +4 -0
- package/dist/questions/public/index.d.ts +1 -1
- package/dist/questions/public/index.js +1 -1
- package/dist/shared/agent/tool.factory.d.ts +15 -4
- package/dist/shared/agent/tool.factory.js +233 -4
- package/dist/shared/agent/tool.registry.d.ts +21 -9
- package/dist/shared/agent/tool.registry.js +80 -12
- package/dist/signals/application/index.d.ts +1 -1
- package/dist/signals/application/index.js +1 -1
- package/dist/signals/public/index.d.ts +2 -2
- package/dist/signals/public/index.js +2 -2
- package/package.json +1 -1
- package/dist/communities/index.d.ts +0 -14
- package/dist/communities/index.js +0 -14
- package/dist/contacts/index.d.ts +0 -18
- package/dist/contacts/index.js +0 -18
- package/dist/integrations/index.d.ts +0 -22
- package/dist/integrations/index.js +0 -22
- package/dist/negotiation/index.d.ts +0 -25
- package/dist/negotiation/index.js +0 -25
- package/dist/opportunity/index.d.ts +0 -29
- package/dist/opportunity/index.js +0 -29
- package/dist/participant-agents/index.d.ts +0 -17
- package/dist/participant-agents/index.js +0 -17
- package/dist/platform/index.d.ts +0 -19
- package/dist/platform/index.js +0 -23
- package/dist/public/index.d.ts +0 -17
- package/dist/public/index.js +0 -17
- package/dist/questions/index.d.ts +0 -15
- package/dist/questions/index.js +0 -15
- package/dist/runtime/background/index.d.ts +0 -14
- package/dist/runtime/background/index.js +0 -14
- package/dist/runtime/foreground/composition/tool.factory.d.ts +0 -17
- package/dist/runtime/foreground/composition/tool.factory.js +0 -235
- package/dist/runtime/foreground/composition/tool.registry.d.ts +0 -24
- package/dist/runtime/foreground/composition/tool.registry.js +0 -80
- package/dist/runtime/foreground/index.d.ts +0 -13
- package/dist/runtime/foreground/index.js +0 -13
- package/dist/runtime/foreground/signals/intent.tools.d.ts +0 -13
- package/dist/runtime/foreground/signals/intent.tools.js +0 -13
- package/dist/signals/index.d.ts +0 -13
- package/dist/signals/index.js +0 -13
package/CHANGELOG.md
CHANGED
|
@@ -20,6 +20,55 @@ went 6.7.1 → 8.0.2 with no 7.x in between because the whole 7.x line shipped a
|
|
|
20
20
|
prereleases between the two promotions. To track every change, read `rc`; to
|
|
21
21
|
pin a supported release, use `latest`.
|
|
22
22
|
|
|
23
|
+
## 13.2.1 - 2026-08-16
|
|
24
|
+
|
|
25
|
+
No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
26
|
+
`src/index.ts` is untouched. This is internal structure only.
|
|
27
|
+
|
|
28
|
+
### Removed
|
|
29
|
+
|
|
30
|
+
- Removed the IND-543 outer shells — `src/public/`, `src/platform/`,
|
|
31
|
+
`src/runtime/foreground/`, and `src/runtime/background/`. All four were
|
|
32
|
+
declaration-only placeholders with zero inbound imports; `runtime/background`
|
|
33
|
+
and `public` consisted of nothing but a header comment. The only thing
|
|
34
|
+
referencing them was a spec asserting that they existed.
|
|
35
|
+
- Removed eight unused capability barrels (`signals/index.ts`,
|
|
36
|
+
`communities/index.ts`, `contacts/index.ts`, `questions/index.ts`,
|
|
37
|
+
`opportunity/index.ts`, `negotiation/index.ts`, `integrations/index.ts`,
|
|
38
|
+
`participant-agents/index.ts`). Each was `export * from "./public/index.js"`
|
|
39
|
+
with no importers — every real consumer already went to `public/` directly.
|
|
40
|
+
- Removed `src/shared/ui/`, which contained no source, only a `tests/tsconfig.json`.
|
|
41
|
+
- Removed the `ambient-background`, `neutral-platform`, and
|
|
42
|
+
`public-compatibility` capability classifications, which existed solely to
|
|
43
|
+
describe the deleted shells.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- Resolved the tool-composition shim inversion. `tool.registry.ts` and
|
|
48
|
+
`tool.factory.ts` were implemented in `runtime/foreground/composition/` and
|
|
49
|
+
re-exported from `shared/agent/` through modules marked `@deprecated` — but
|
|
50
|
+
all 25 importers used the deprecated path. The implementations now live at
|
|
51
|
+
`shared/agent/tool.registry.ts` and `shared/agent/tool.factory.ts`, and the
|
|
52
|
+
indirection is gone. `mcp.server.ts` was the one direct consumer of the old
|
|
53
|
+
location and now resolves to the same single home.
|
|
54
|
+
- `signals/application/intent.tools.ts` is imported directly by the tool
|
|
55
|
+
factory; the `runtime/foreground/signals/intent.tools.ts` pass-through
|
|
56
|
+
re-export that sat between them is removed.
|
|
57
|
+
- Replaced `architecture/tests/runtime-shells.spec.ts` with
|
|
58
|
+
`architecture/tests/package-entry.spec.ts`, which asserts the invariants that
|
|
59
|
+
outlived the shells: `src/index.ts` is the sole `package.json` export, and the
|
|
60
|
+
tool composition root has exactly one implementation.
|
|
61
|
+
|
|
62
|
+
## 13.2.0 - 2026-08-16
|
|
63
|
+
|
|
64
|
+
### Added
|
|
65
|
+
|
|
66
|
+
- `retired_mode` to `QuestionVoidedReasonSchema`, marking rows whose generating
|
|
67
|
+
mode was removed. Written only by the one-time
|
|
68
|
+
`0127_dismiss_retired_discovery_questions` migration — no runtime path emits
|
|
69
|
+
it, since a retired mode produces nothing by definition. The marker makes the
|
|
70
|
+
cleanup auditable and exactly reversible.
|
|
71
|
+
|
|
23
72
|
## 13.0.0 - 2026-08-13
|
|
24
73
|
|
|
25
74
|
### Removed
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* Re-exports the stable contracts from domain, application, and ports.
|
|
5
5
|
* Runtime adapter creation (graph factories, tool factories) is accessible
|
|
6
6
|
* via capabilities/communities.facade.ts for package consumers and via the
|
|
7
|
-
*
|
|
7
|
+
* tool composition root (shared/agent) for internal registries.
|
|
8
8
|
*
|
|
9
9
|
* Boundary: public-compatibility. References only communities/domain,
|
|
10
|
-
* communities/application, and communities/ports — never
|
|
10
|
+
* communities/application, and communities/ports — never the tool composition root (shared/agent)
|
|
11
11
|
* or host implementations.
|
|
12
12
|
*
|
|
13
13
|
* ## Intentionally excluded from public surface
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* Re-exports the stable contracts from domain, application, and ports.
|
|
5
5
|
* Runtime adapter creation (graph factories, tool factories) is accessible
|
|
6
6
|
* via capabilities/communities.facade.ts for package consumers and via the
|
|
7
|
-
*
|
|
7
|
+
* tool composition root (shared/agent) for internal registries.
|
|
8
8
|
*
|
|
9
9
|
* Boundary: public-compatibility. References only communities/domain,
|
|
10
|
-
* communities/application, and communities/ports — never
|
|
10
|
+
* communities/application, and communities/ports — never the tool composition root (shared/agent)
|
|
11
11
|
* or host implementations.
|
|
12
12
|
*
|
|
13
13
|
* ## Intentionally excluded from public surface
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* ## Boundary
|
|
9
9
|
*
|
|
10
10
|
* References only contacts/domain, contacts/application, and contacts/ports.
|
|
11
|
-
* Never imports from
|
|
11
|
+
* Never imports from the tool composition root (shared/agent), host implementations, or other
|
|
12
12
|
* capability internals.
|
|
13
13
|
*
|
|
14
14
|
* ## Intentionally excluded from public surface
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* ## Boundary
|
|
9
9
|
*
|
|
10
10
|
* References only contacts/domain, contacts/application, and contacts/ports.
|
|
11
|
-
* Never imports from
|
|
11
|
+
* Never imports from the tool composition root (shared/agent), host implementations, or other
|
|
12
12
|
* capability internals.
|
|
13
13
|
*
|
|
14
14
|
* ## Intentionally excluded from public surface
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* ## Boundary
|
|
9
9
|
*
|
|
10
10
|
* References only integrations/domain, integrations/application, and
|
|
11
|
-
* integrations/ports. Never imports from
|
|
11
|
+
* integrations/ports. Never imports from the tool composition root (shared/agent), host
|
|
12
12
|
* implementations, or other capability internals.
|
|
13
13
|
*
|
|
14
14
|
* ## Intentionally excluded from public surface
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* ## Boundary
|
|
9
9
|
*
|
|
10
10
|
* References only integrations/domain, integrations/application, and
|
|
11
|
-
* integrations/ports. Never imports from
|
|
11
|
+
* integrations/ports. Never imports from the tool composition root (shared/agent), host
|
|
12
12
|
* implementations, or other capability internals.
|
|
13
13
|
*
|
|
14
14
|
* ## Intentionally excluded from public surface
|
package/dist/mcp/mcp.server.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { McpServer, fromJsonSchema } from '@modelcontextprotocol/server';
|
|
|
8
8
|
import type { JsonSchemaType } from '@modelcontextprotocol/server';
|
|
9
9
|
import type { McpAuthResolver } from '../shared/interfaces/auth.interface.js';
|
|
10
10
|
import type { ToolDeps, ResolvedToolContext, RawToolDefinition } from '../shared/agent/tool.helpers.js';
|
|
11
|
-
import type { ToolRegistryDeps } from '../
|
|
11
|
+
import type { ToolRegistryDeps } from '../shared/agent/tool.registry.js';
|
|
12
12
|
import type { McpAuthorizationObserver, McpCapabilityPolicyOptions } from './mcp.authorization-policy.js';
|
|
13
13
|
/**
|
|
14
14
|
* Static registration metadata for one MCP tool — schema conversion artifacts
|
package/dist/mcp/mcp.server.js
CHANGED
|
@@ -10,7 +10,7 @@ import { McpResolvedIdentitySchema } from '../shared/schemas/mcp-auth.schema.js'
|
|
|
10
10
|
import { CANONICAL_GUIDANCE_SUMMARY } from '../shared/agent/canonical-guidance.js';
|
|
11
11
|
import { resolveChatContext } from '../shared/agent/tool.helpers.js';
|
|
12
12
|
import { deriveAllowedNetworkIds, scopeFromNetworkId } from '../shared/agent/tool.scope.js';
|
|
13
|
-
import { createToolRegistry } from '../
|
|
13
|
+
import { createToolRegistry } from '../shared/agent/tool.registry.js';
|
|
14
14
|
import { bindOwnerApprovalProvenance } from '../opportunity/application/opportunity.owner-provenance.js';
|
|
15
15
|
import { ToolRuntimeError, invokeToolRuntime, toolRuntimeErrorToResult } from '../shared/agent/tool.runtime.js';
|
|
16
16
|
import { protocolLogger } from '../shared/observability/protocol.logger.js';
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* ## Boundary
|
|
7
7
|
*
|
|
8
8
|
* References only negotiation/domain, negotiation/application, and
|
|
9
|
-
* negotiation/ports. Never imports from
|
|
9
|
+
* negotiation/ports. Never imports from the tool composition root (shared/agent), host
|
|
10
10
|
* implementations, or other capability internals.
|
|
11
11
|
*
|
|
12
12
|
* ## Intentionally excluded from public surface
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* ## Boundary
|
|
7
7
|
*
|
|
8
8
|
* References only negotiation/domain, negotiation/application, and
|
|
9
|
-
* negotiation/ports. Never imports from
|
|
9
|
+
* negotiation/ports. Never imports from the tool composition root (shared/agent), host
|
|
10
10
|
* implementations, or other capability internals.
|
|
11
11
|
*
|
|
12
12
|
* ## Intentionally excluded from public surface
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* ## Boundary
|
|
10
10
|
*
|
|
11
11
|
* References only participant-agents/domain, participant-agents/application,
|
|
12
|
-
* and participant-agents/ports. Never imports from
|
|
12
|
+
* and participant-agents/ports. Never imports from the tool composition root (shared/agent), host
|
|
13
13
|
* implementations, or other capability internals.
|
|
14
14
|
*
|
|
15
15
|
* ## Intentionally excluded from public surface
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* ## Boundary
|
|
10
10
|
*
|
|
11
11
|
* References only participant-agents/domain, participant-agents/application,
|
|
12
|
-
* and participant-agents/ports. Never imports from
|
|
12
|
+
* and participant-agents/ports. Never imports from the tool composition root (shared/agent), host
|
|
13
13
|
* implementations, or other capability internals.
|
|
14
14
|
*
|
|
15
15
|
* ## Intentionally excluded from public surface
|
|
@@ -64,7 +64,7 @@ export { EnrichmentGraphFactory, } from "../../enrichment/enrichment.graph.js";
|
|
|
64
64
|
export { EnrichmentGenerator } from "../../enrichment/enrichment.generator.js";
|
|
65
65
|
export { shouldEnrichGhostDisplayNameFromParallel, isEnrichedNameMeaningful, } from "../../enrichment/enrichment.enricher.js";
|
|
66
66
|
// ── Tool factories (foreground adapters) ──────────────────────────────────────
|
|
67
|
-
// These are foreground adapter entry points consumed by
|
|
67
|
+
// These are foreground adapter entry points consumed by the tool composition root (shared/agent)
|
|
68
68
|
// composition. They accept compiled graphs and host deps through the tool-dep
|
|
69
69
|
// ports and produce LangChain-compatible tool arrays.
|
|
70
70
|
export { createEnrichmentTools } from "../../enrichment/enrichment.tools.js";
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
* ## Policy separation
|
|
47
47
|
*
|
|
48
48
|
* - **Foreground adapters** (onboarding preview/confirm, explicit enrichment):
|
|
49
|
-
* managed by the
|
|
49
|
+
* managed by the tool composition root (shared/agent). They compose the
|
|
50
50
|
* EnrichmentGraphFactory and PremiseGraphFactory and pass the compiled graphs
|
|
51
51
|
* through the tool-dependency ports.
|
|
52
52
|
* - **Ambient adapters** (scrape/decompose, regeneration, indexing, representation
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
* ## Policy separation
|
|
47
47
|
*
|
|
48
48
|
* - **Foreground adapters** (onboarding preview/confirm, explicit enrichment):
|
|
49
|
-
* managed by the
|
|
49
|
+
* managed by the tool composition root (shared/agent). They compose the
|
|
50
50
|
* EnrichmentGraphFactory and PremiseGraphFactory and pass the compiled graphs
|
|
51
51
|
* through the tool-dependency ports.
|
|
52
52
|
* - **Ambient adapters** (scrape/decompose, regeneration, indexing, representation
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Re-exports the stable contracts from domain, application, and ports.
|
|
5
5
|
* Runtime adapter creation (graph factories, tool factories) is accessible via
|
|
6
6
|
* capabilities/participant-context.facade for package consumers and via
|
|
7
|
-
* the
|
|
7
|
+
* the tool composition root (shared/agent) for internal registries.
|
|
8
8
|
*
|
|
9
9
|
* Boundary: public-compatibility. References only participant-context/domain,
|
|
10
10
|
* participant-context/application, and participant-context/ports — never
|
|
11
|
-
*
|
|
11
|
+
* the tool composition root (shared/agent) or host implementations.
|
|
12
12
|
*
|
|
13
13
|
* ## Intentionally excluded from public surface
|
|
14
14
|
*
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Re-exports the stable contracts from domain, application, and ports.
|
|
5
5
|
* Runtime adapter creation (graph factories, tool factories) is accessible via
|
|
6
6
|
* capabilities/participant-context.facade for package consumers and via
|
|
7
|
-
* the
|
|
7
|
+
* the tool composition root (shared/agent) for internal registries.
|
|
8
8
|
*
|
|
9
9
|
* Boundary: public-compatibility. References only participant-context/domain,
|
|
10
10
|
* participant-context/application, and participant-context/ports — never
|
|
11
|
-
*
|
|
11
|
+
* the tool composition root (shared/agent) or host implementations.
|
|
12
12
|
*
|
|
13
13
|
* ## Intentionally excluded from public surface
|
|
14
14
|
*
|
|
@@ -730,7 +730,7 @@ export declare const QuestionRecoverySnapshotSchema: z.ZodObject<{
|
|
|
730
730
|
rejectedNegotiationCount?: number | undefined;
|
|
731
731
|
}>;
|
|
732
732
|
/** Internal reason a pending question was voided. */
|
|
733
|
-
export declare const QuestionVoidedReasonSchema: z.ZodEnum<["pool_drift", "intent_edit", "recovery_drift", "negotiation_stale"]>;
|
|
733
|
+
export declare const QuestionVoidedReasonSchema: z.ZodEnum<["pool_drift", "intent_edit", "recovery_drift", "negotiation_stale", "retired_mode"]>;
|
|
734
734
|
/** Permanent reasons that terminalize an unclaimed proactive push request. */
|
|
735
735
|
export declare const QuestionPoolPushRequestReasonSchema: z.ZodEnum<["question_lifecycle", "intent_lifecycle", "malformed_source", "malformed_actor", "malformed_pool", "malformed_cycle", "visited", "pool_size", "voi", "cycle_budget"]>;
|
|
736
736
|
export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
@@ -1117,7 +1117,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1117
1117
|
failure?: string | undefined;
|
|
1118
1118
|
}>>;
|
|
1119
1119
|
/** Internal reason this question was voided after pool or intent drift. */
|
|
1120
|
-
voidedReason: z.ZodOptional<z.ZodEnum<["pool_drift", "intent_edit", "recovery_drift", "negotiation_stale"]>>;
|
|
1120
|
+
voidedReason: z.ZodOptional<z.ZodEnum<["pool_drift", "intent_edit", "recovery_drift", "negotiation_stale", "retired_mode"]>>;
|
|
1121
1121
|
/** Authoritative successful-delivery ledger timestamp. Internal only. */
|
|
1122
1122
|
pushedAt: z.ZodOptional<z.ZodString>;
|
|
1123
1123
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -1212,7 +1212,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1212
1212
|
pushRequestStatus?: "suppressed" | "requested" | undefined;
|
|
1213
1213
|
pushRequestReason?: "voi" | "question_lifecycle" | "intent_lifecycle" | "malformed_source" | "malformed_actor" | "malformed_pool" | "malformed_cycle" | "visited" | "pool_size" | "cycle_budget" | undefined;
|
|
1214
1214
|
pushRequestSuppressedAt?: string | undefined;
|
|
1215
|
-
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | undefined;
|
|
1215
|
+
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | "retired_mode" | undefined;
|
|
1216
1216
|
pushedAt?: string | undefined;
|
|
1217
1217
|
}, {
|
|
1218
1218
|
mode: "chat" | "intent" | "negotiation" | "negotiation_inflight" | "pool_discovery";
|
|
@@ -1306,7 +1306,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1306
1306
|
pushRequestStatus?: "suppressed" | "requested" | undefined;
|
|
1307
1307
|
pushRequestReason?: "voi" | "question_lifecycle" | "intent_lifecycle" | "malformed_source" | "malformed_actor" | "malformed_pool" | "malformed_cycle" | "visited" | "pool_size" | "cycle_budget" | undefined;
|
|
1308
1308
|
pushRequestSuppressedAt?: string | undefined;
|
|
1309
|
-
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | undefined;
|
|
1309
|
+
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | "retired_mode" | undefined;
|
|
1310
1310
|
pushedAt?: string | undefined;
|
|
1311
1311
|
}>, {
|
|
1312
1312
|
mode: "chat" | "intent" | "negotiation" | "negotiation_inflight" | "pool_discovery";
|
|
@@ -1400,7 +1400,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1400
1400
|
pushRequestStatus?: "suppressed" | "requested" | undefined;
|
|
1401
1401
|
pushRequestReason?: "voi" | "question_lifecycle" | "intent_lifecycle" | "malformed_source" | "malformed_actor" | "malformed_pool" | "malformed_cycle" | "visited" | "pool_size" | "cycle_budget" | undefined;
|
|
1402
1402
|
pushRequestSuppressedAt?: string | undefined;
|
|
1403
|
-
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | undefined;
|
|
1403
|
+
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | "retired_mode" | undefined;
|
|
1404
1404
|
pushedAt?: string | undefined;
|
|
1405
1405
|
}, {
|
|
1406
1406
|
mode: "chat" | "intent" | "negotiation" | "negotiation_inflight" | "pool_discovery";
|
|
@@ -1494,7 +1494,7 @@ export declare const QuestionDetectionSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1494
1494
|
pushRequestStatus?: "suppressed" | "requested" | undefined;
|
|
1495
1495
|
pushRequestReason?: "voi" | "question_lifecycle" | "intent_lifecycle" | "malformed_source" | "malformed_actor" | "malformed_pool" | "malformed_cycle" | "visited" | "pool_size" | "cycle_budget" | undefined;
|
|
1496
1496
|
pushRequestSuppressedAt?: string | undefined;
|
|
1497
|
-
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | undefined;
|
|
1497
|
+
voidedReason?: "pool_drift" | "intent_edit" | "recovery_drift" | "negotiation_stale" | "retired_mode" | undefined;
|
|
1498
1498
|
pushedAt?: string | undefined;
|
|
1499
1499
|
}>;
|
|
1500
1500
|
export declare const QuestionActorSchema: z.ZodObject<{
|
|
@@ -262,6 +262,10 @@ export const QuestionVoidedReasonSchema = z.enum([
|
|
|
262
262
|
"intent_edit",
|
|
263
263
|
"recovery_drift",
|
|
264
264
|
"negotiation_stale",
|
|
265
|
+
// The generator that produced the row was retired, so the question can no
|
|
266
|
+
// longer lead anywhere. Written once by a one-time migration, never by
|
|
267
|
+
// runtime code — nothing produces a retired mode by definition.
|
|
268
|
+
"retired_mode",
|
|
265
269
|
]);
|
|
266
270
|
/** Permanent reasons that terminalize an unclaimed proactive push request. */
|
|
267
271
|
export const QuestionPoolPushRequestReasonSchema = z.enum([
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* ## Boundary
|
|
10
10
|
*
|
|
11
11
|
* References only questions/domain, questions/application, and questions/ports.
|
|
12
|
-
* Never imports from
|
|
12
|
+
* Never imports from the tool composition root (shared/agent), host implementations, or other
|
|
13
13
|
* capability internals.
|
|
14
14
|
*
|
|
15
15
|
* ## Intentionally excluded from public surface
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* ## Boundary
|
|
10
10
|
*
|
|
11
11
|
* References only questions/domain, questions/application, and questions/ports.
|
|
12
|
-
* Never imports from
|
|
12
|
+
* Never imports from the tool composition root (shared/agent), host implementations, or other
|
|
13
13
|
* capability internals.
|
|
14
14
|
*
|
|
15
15
|
* ## Intentionally excluded from public surface
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
import { type ToolContext, type ResolvedToolContext } from "./tool.helpers.js";
|
|
2
|
+
import type { OpportunityOwnerApprovalDeps } from "../../opportunity/ports/opportunity.tools.port.js";
|
|
3
|
+
export type { ToolContext, ResolvedToolContext, ProtocolDeps } from "./tool.helpers.js";
|
|
4
|
+
export type { ToolDeps } from "./tool.helpers.js";
|
|
1
5
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
6
|
+
* Creates all chat tools bound to a specific user context.
|
|
7
|
+
* Resolves user/network identity from DB at init time.
|
|
8
|
+
* Tools are created fresh for each user session to ensure proper isolation.
|
|
9
|
+
*
|
|
10
|
+
* All external dependencies (cache, integration, queue, etc.) are provided
|
|
11
|
+
* via the `deps` parameter — the protocol lib never imports concrete adapters.
|
|
5
12
|
*/
|
|
6
|
-
export
|
|
13
|
+
export declare function createChatTools(deps: ToolContext & OpportunityOwnerApprovalDeps, preResolvedContext?: ResolvedToolContext): Promise<any[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Type for the tools array returned by createChatTools.
|
|
16
|
+
*/
|
|
17
|
+
export type ChatTools = Awaited<ReturnType<typeof createChatTools>>;
|
|
@@ -1,6 +1,235 @@
|
|
|
1
|
+
import { tool } from "@langchain/core/tools";
|
|
2
|
+
import { IntentGraphFactory } from "../../signals/application/intent.graph.js";
|
|
3
|
+
import { EnrichmentGraphFactory } from "../../enrichment/enrichment.graph.js";
|
|
4
|
+
import { OpportunityGraphFactory } from "../../capabilities/opportunities.facade.js";
|
|
5
|
+
import { HydeGraphFactory } from "../hyde/hyde.graph.js";
|
|
6
|
+
import { HydeGenerator } from "../hyde/hyde.generator.js";
|
|
7
|
+
import { LensInferrer } from "../hyde/lens.inferrer.js";
|
|
8
|
+
import { NetworkGraphFactory, NetworkMembershipGraphFactory, IntentNetworkGraphFactory } from "../../capabilities/communities.facade.js";
|
|
9
|
+
import { IntentIndexer } from "../../signals/application/intent.indexer.js";
|
|
10
|
+
import { NegotiationGraphFactory } from "../../capabilities/negotiation.facade.js";
|
|
11
|
+
import { PremiseGraphFactory } from "../../premise/premise.graph.js";
|
|
12
|
+
import { protocolLogger } from "../observability/protocol.logger.js";
|
|
13
|
+
import { resolveChatContext, error, redactSensitiveFields } from "./tool.helpers.js";
|
|
14
|
+
import { deriveAllowedNetworkIds, focusedIntentId, scopeFromNetworkId } from "./tool.scope.js";
|
|
15
|
+
import { invokeToolRuntime, toolRuntimeErrorToResult } from "./tool.runtime.js";
|
|
16
|
+
import { createEnrichmentTools } from "../../enrichment/enrichment.tools.js";
|
|
17
|
+
import { createIntentTools } from "../../signals/application/intent.tools.js";
|
|
18
|
+
import { createNetworkTools } from "../../capabilities/communities.facade.js";
|
|
19
|
+
import { createOpportunityTools } from "../../capabilities/opportunities.facade.js";
|
|
20
|
+
import { createUtilityTools } from "./utility.tools.js";
|
|
21
|
+
import { createIntegrationTools } from "../../capabilities/integrations.facade.js";
|
|
22
|
+
import { createContactTools } from "../../capabilities/contacts.facade.js";
|
|
23
|
+
import { createAgentTools } from "../../capabilities/participant-agents.tools.facade.js";
|
|
24
|
+
import { createNegotiationTools } from "../../capabilities/negotiation.facade.js";
|
|
25
|
+
import { createPremiseTools } from "../../premise/premise.tools.js";
|
|
26
|
+
import { createQuestionerTools, createAskUserQuestionTools } from "../../capabilities/questions.facade.js";
|
|
27
|
+
import { bindOwnerApprovalProvenance } from "../../opportunity/application/opportunity.owner-provenance.js";
|
|
28
|
+
const logger = protocolLogger("ChatTools");
|
|
29
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
30
|
+
// TOOL FACTORY
|
|
31
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
1
32
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
33
|
+
* Creates all chat tools bound to a specific user context.
|
|
34
|
+
* Resolves user/network identity from DB at init time.
|
|
35
|
+
* Tools are created fresh for each user session to ensure proper isolation.
|
|
36
|
+
*
|
|
37
|
+
* All external dependencies (cache, integration, queue, etc.) are provided
|
|
38
|
+
* via the `deps` parameter — the protocol lib never imports concrete adapters.
|
|
5
39
|
*/
|
|
6
|
-
export
|
|
40
|
+
export async function createChatTools(deps, preResolvedContext) {
|
|
41
|
+
const { database, embedder, scraper } = deps;
|
|
42
|
+
const explicitScope = deps.scopeType && deps.scopeId
|
|
43
|
+
? { scopeType: deps.scopeType, scopeId: deps.scopeId }
|
|
44
|
+
: scopeFromNetworkId(deps.networkId);
|
|
45
|
+
// ─── Resolve context from DB ───────────────────────────────────────────────
|
|
46
|
+
// resolveChatContext still accepts a networkId because it loads scoped index
|
|
47
|
+
// presentation metadata; the canonical request scope is explicitScope.
|
|
48
|
+
const resolvedContext = preResolvedContext ??
|
|
49
|
+
(await resolveChatContext({
|
|
50
|
+
database,
|
|
51
|
+
userId: deps.userId,
|
|
52
|
+
networkId: explicitScope.scopeType === 'network' ? explicitScope.scopeId : deps.networkId,
|
|
53
|
+
sessionId: deps.sessionId,
|
|
54
|
+
contactsEnabled: deps.contactsEnabled,
|
|
55
|
+
actionToolsEnabled: deps.actionToolsEnabled,
|
|
56
|
+
}));
|
|
57
|
+
if (!preResolvedContext && explicitScope.scopeType && explicitScope.scopeId) {
|
|
58
|
+
resolvedContext.scopeType = explicitScope.scopeType;
|
|
59
|
+
resolvedContext.scopeId = explicitScope.scopeId;
|
|
60
|
+
}
|
|
61
|
+
// This factory is an orchestrated chat surface, never a direct owner request.
|
|
62
|
+
// Bind that fact at composition time rather than inferring it from a session
|
|
63
|
+
// id or a caller-controlled tool argument inside the opportunity handler.
|
|
64
|
+
bindOwnerApprovalProvenance(resolvedContext, {
|
|
65
|
+
surface: 'chat',
|
|
66
|
+
sessionAuthenticated: false,
|
|
67
|
+
});
|
|
68
|
+
const allowedNetworkIds = deriveAllowedNetworkIds({
|
|
69
|
+
memberships: resolvedContext.userNetworks,
|
|
70
|
+
...(resolvedContext.scopeType && resolvedContext.scopeId
|
|
71
|
+
? { scopeType: resolvedContext.scopeType, scopeId: resolvedContext.scopeId }
|
|
72
|
+
: {}),
|
|
73
|
+
});
|
|
74
|
+
// ─── Tool wrapper ──────────────────────────────────────────────────────────
|
|
75
|
+
/**
|
|
76
|
+
* Standardized tool factory. Auto-injects resolved context and
|
|
77
|
+
* provides uniform logging / error handling for every tool.
|
|
78
|
+
*/
|
|
79
|
+
function defineTool(opts) {
|
|
80
|
+
return tool(async (query) => {
|
|
81
|
+
logger.info('Tool invoked', {
|
|
82
|
+
toolName: opts.name,
|
|
83
|
+
context: { userId: resolvedContext.userId, scopeType: resolvedContext.scopeType, scopeId: resolvedContext.scopeId },
|
|
84
|
+
query: redactSensitiveFields(query),
|
|
85
|
+
});
|
|
86
|
+
try {
|
|
87
|
+
return await invokeToolRuntime({
|
|
88
|
+
toolName: opts.name,
|
|
89
|
+
tool: { handler: async ({ context, query }) => opts.handler({ context, query: query }) },
|
|
90
|
+
context: resolvedContext,
|
|
91
|
+
query,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
logger.error('Tool failed', {
|
|
96
|
+
toolName: opts.name,
|
|
97
|
+
error: err instanceof Error ? err.message : String(err),
|
|
98
|
+
});
|
|
99
|
+
const runtimeResult = toolRuntimeErrorToResult(err);
|
|
100
|
+
if (runtimeResult)
|
|
101
|
+
return runtimeResult;
|
|
102
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
103
|
+
return error(`Failed to execute ${opts.name}: ${reason}`);
|
|
104
|
+
}
|
|
105
|
+
}, { name: opts.name, description: opts.description, schema: opts.querySchema });
|
|
106
|
+
}
|
|
107
|
+
// ─── Compile subgraphs ─────────────────────────────────────────────────────
|
|
108
|
+
// Wrap questionerEnqueue to include scoped/session context when available.
|
|
109
|
+
const sessionAwareEnqueue = deps.questionerEnqueue
|
|
110
|
+
? (input) => deps.questionerEnqueue({
|
|
111
|
+
...input,
|
|
112
|
+
...(resolvedContext.scopeType && resolvedContext.scopeId && !input.scopeId
|
|
113
|
+
? { scopeType: resolvedContext.scopeType, scopeId: resolvedContext.scopeId }
|
|
114
|
+
: {}),
|
|
115
|
+
...(resolvedContext.sessionId && !input.conversationId ? { conversationId: resolvedContext.sessionId } : {}),
|
|
116
|
+
})
|
|
117
|
+
: undefined;
|
|
118
|
+
const intentGraph = new IntentGraphFactory(database, embedder, deps.intentQueue, sessionAwareEnqueue).createGraph();
|
|
119
|
+
const premiseGraph = new PremiseGraphFactory(database, embedder).createGraph();
|
|
120
|
+
const profileGraph = new EnrichmentGraphFactory(database, scraper, deps.enricher, premiseGraph).createGraph();
|
|
121
|
+
const hydeCache = deps.hydeCache;
|
|
122
|
+
const lensInferrer = new LensInferrer();
|
|
123
|
+
const hydeGenerator = new HydeGenerator();
|
|
124
|
+
const compiledHydeGraph = new HydeGraphFactory(database, embedder, hydeCache, lensInferrer, hydeGenerator).createGraph();
|
|
125
|
+
const negotiationGraph = deps.agentDispatcher
|
|
126
|
+
? new NegotiationGraphFactory(deps.negotiationDatabase, deps.agentDispatcher, deps.negotiationTimeoutQueue, sessionAwareEnqueue).createGraph()
|
|
127
|
+
: undefined;
|
|
128
|
+
const opportunityGraph = new OpportunityGraphFactory(database, embedder, compiledHydeGraph, undefined, // evaluator (default)
|
|
129
|
+
undefined, // queueNotification
|
|
130
|
+
negotiationGraph, deps.agentDispatcher, deps.queueNegotiateExisting, deps.stampNewbornOpportunities).createGraph();
|
|
131
|
+
const networkGraph = new NetworkGraphFactory(database).createGraph();
|
|
132
|
+
const networkMembershipGraph = new NetworkMembershipGraphFactory(database).createGraph();
|
|
133
|
+
const intentNetworkGraph = new IntentNetworkGraphFactory(database, new IntentIndexer()).createGraph();
|
|
134
|
+
// ─── Create context-bound databases ────────────────────────────────────────
|
|
135
|
+
// Use injected instances when provided (e.g. tests). Otherwise create from the same
|
|
136
|
+
// database used for graphs so that scope checks (e.g. ensureScopedMembership, opportunity
|
|
137
|
+
// update) use the same adapter as the rest of the tool pipeline.
|
|
138
|
+
//
|
|
139
|
+
// The systemDb's DB-level clamp derives concrete allowed network IDs from the
|
|
140
|
+
// focused scope envelope plus memberships, rather than consuming a transported
|
|
141
|
+
// legacy indexScope array.
|
|
142
|
+
const userDb = deps.userDb ?? deps.createUserDatabase(database, resolvedContext.userId);
|
|
143
|
+
const systemDb = deps.systemDb ?? deps.createSystemDatabase(database, resolvedContext.userId, allowedNetworkIds, embedder);
|
|
144
|
+
// ─── Assemble dependencies ─────────────────────────────────────────────────
|
|
145
|
+
const cache = deps.cache;
|
|
146
|
+
const integration = deps.integration;
|
|
147
|
+
const toolDeps = {
|
|
148
|
+
database,
|
|
149
|
+
userDb,
|
|
150
|
+
systemDb,
|
|
151
|
+
scraper,
|
|
152
|
+
embedder,
|
|
153
|
+
cache,
|
|
154
|
+
integration,
|
|
155
|
+
contactService: deps.contactService,
|
|
156
|
+
contactsEnabled: deps.contactsEnabled,
|
|
157
|
+
integrationImporter: deps.integrationImporter,
|
|
158
|
+
enricher: deps.enricher,
|
|
159
|
+
negotiationDatabase: deps.negotiationDatabase,
|
|
160
|
+
negotiationTimeoutQueue: deps.negotiationTimeoutQueue,
|
|
161
|
+
agentDatabase: deps.agentDatabase,
|
|
162
|
+
grantDefaultSystemPermissions: deps.grantDefaultSystemPermissions,
|
|
163
|
+
agentDispatcher: deps.agentDispatcher,
|
|
164
|
+
stampNewbornOpportunities: deps.stampNewbornOpportunities,
|
|
165
|
+
deliveryLedger: deps.deliveryLedger,
|
|
166
|
+
...(deps.opportunityOwnerApproval && { opportunityOwnerApproval: deps.opportunityOwnerApproval }),
|
|
167
|
+
enrichmentRuns: deps.enrichmentRuns,
|
|
168
|
+
enrichmentRunQueue: deps.enrichmentRunQueue,
|
|
169
|
+
frontendUrl: deps.frontendUrl,
|
|
170
|
+
apiBaseUrl: deps.apiBaseUrl,
|
|
171
|
+
...(deps.chatSummary && { chatSummary: deps.chatSummary }),
|
|
172
|
+
...(sessionAwareEnqueue && { questionerEnqueue: sessionAwareEnqueue }),
|
|
173
|
+
...(deps.findPendingQuestions && { findPendingQuestions: deps.findPendingQuestions }),
|
|
174
|
+
...(deps.answerPendingQuestion && { answerPendingQuestion: deps.answerPendingQuestion }),
|
|
175
|
+
...(deps.negotiationSummary && { negotiationSummary: deps.negotiationSummary }),
|
|
176
|
+
...(deps.chatQuestions && { chatQuestions: deps.chatQuestions }),
|
|
177
|
+
...(deps.chatSession && { chatSession: deps.chatSession }),
|
|
178
|
+
...(deps.getUserContextText && { getUserContextText: deps.getUserContextText }),
|
|
179
|
+
...(deps.intentProposalStore && { intentProposalStore: deps.intentProposalStore }),
|
|
180
|
+
graphs: {
|
|
181
|
+
profile: profileGraph,
|
|
182
|
+
intent: intentGraph,
|
|
183
|
+
index: networkGraph,
|
|
184
|
+
networkMembership: networkMembershipGraph,
|
|
185
|
+
intentIndex: intentNetworkGraph,
|
|
186
|
+
opportunity: opportunityGraph,
|
|
187
|
+
premise: premiseGraph,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
// ─── Create domain tools ──────────────────────────────────────────────────
|
|
191
|
+
const profileTools = createEnrichmentTools(defineTool, toolDeps);
|
|
192
|
+
const intentTools = createIntentTools(defineTool, toolDeps);
|
|
193
|
+
// An intent-scoped conversation exists to refine its selected signal. Keep
|
|
194
|
+
// creation out of the model-visible registry; the update handler separately
|
|
195
|
+
// clamps writes to the exact scoped intent as a runtime backstop.
|
|
196
|
+
const intentToolsForChat = focusedIntentId(resolvedContext)
|
|
197
|
+
? intentTools.filter((candidate) => candidate.name !== "create_intent")
|
|
198
|
+
: intentTools;
|
|
199
|
+
const networkTools = createNetworkTools(defineTool, toolDeps);
|
|
200
|
+
const opportunityTools = createOpportunityTools(defineTool, toolDeps);
|
|
201
|
+
const utilityTools = createUtilityTools(defineTool, toolDeps);
|
|
202
|
+
const contactTools = createContactTools(defineTool, toolDeps);
|
|
203
|
+
const agentTools = createAgentTools(defineTool, toolDeps);
|
|
204
|
+
const integrationTools = createIntegrationTools(defineTool, toolDeps);
|
|
205
|
+
const negotiationTools = deps.agentDispatcher
|
|
206
|
+
? createNegotiationTools(defineTool, toolDeps)
|
|
207
|
+
: [];
|
|
208
|
+
const premiseTools = createPremiseTools(defineTool, toolDeps);
|
|
209
|
+
const questionerTools = createQuestionerTools(defineTool, toolDeps);
|
|
210
|
+
// Blocking mid-conversation questions — chat-only (never in the MCP registry),
|
|
211
|
+
// and only when the host provides the ChatQuestionsHost bridge.
|
|
212
|
+
const askUserQuestionTools = deps.chatQuestions
|
|
213
|
+
? createAskUserQuestionTools(defineTool, toolDeps)
|
|
214
|
+
: [];
|
|
215
|
+
// confirm_opportunity_delivery is an OpenClaw-delivery ledger write and must not be
|
|
216
|
+
// callable from regular chat sessions.
|
|
217
|
+
const chatOpportunityToolExclusions = new Set([
|
|
218
|
+
"confirm_opportunity_delivery",
|
|
219
|
+
]);
|
|
220
|
+
const opportunityToolsForChat = opportunityTools.filter((t) => !chatOpportunityToolExclusions.has(t.name));
|
|
221
|
+
return [
|
|
222
|
+
...profileTools,
|
|
223
|
+
...intentToolsForChat,
|
|
224
|
+
...networkTools,
|
|
225
|
+
...opportunityToolsForChat,
|
|
226
|
+
...utilityTools,
|
|
227
|
+
...integrationTools,
|
|
228
|
+
...contactTools,
|
|
229
|
+
...agentTools,
|
|
230
|
+
...negotiationTools,
|
|
231
|
+
...premiseTools,
|
|
232
|
+
...questionerTools,
|
|
233
|
+
...askUserQuestionTools,
|
|
234
|
+
];
|
|
235
|
+
}
|