@indexnetwork/protocol 66.0.0-rc.637.1 → 66.0.0-rc.639.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 +75 -74
- package/IMPLEMENTATION.md +8 -8
- package/README.md +31 -31
- package/STABILITY.md +1 -1
- package/dist/capabilities/intents.d.ts +4 -4
- package/dist/capabilities/intents.js +2 -2
- package/dist/capabilities/networks.d.ts +2 -2
- package/dist/capabilities/networks.js +3 -3
- package/dist/index.js +1 -1
- package/dist/internal/intents/graph/intent.graph.reconcile.d.ts +1 -1
- package/dist/internal/intents/graph/intent.graph.reconcile.js +1 -1
- package/dist/internal/intents/intent.admission.js +1 -1
- package/dist/internal/intents/intent.preparer.js +2 -2
- package/dist/internal/networks/indexer.graph.d.ts +1 -1
- package/dist/internal/networks/indexer.graph.js +2 -2
- package/dist/internal/networks/indexer.state.d.ts +1 -1
- package/dist/internal/networks/indexer.state.js +1 -1
- package/dist/internal/networks/network.pulse-summarizer.d.ts +4 -4
- package/dist/internal/networks/network.pulse-summarizer.js +10 -10
- package/dist/internal/opportunities/opportunity.actor.js +1 -1
- package/dist/internal/opportunities/opportunity.graph.modes.js +1 -1
- package/dist/internal/opportunities/opportunity.presentation.d.ts +3 -3
- package/dist/internal/opportunities/opportunity.presentation.js +10 -10
- package/dist/internal/shared/agent/model.config.js +4 -1
- package/dist/platform/database/entities.d.ts +5 -5
- package/dist/protocol/negotiation.rules.d.ts +1 -1
- package/dist/protocol/negotiation.rules.js +1 -1
- package/dist/protocol/protocol.prompt.d.ts +2 -2
- package/dist/protocol/protocol.prompt.js +37 -37
- package/dist/protocol/schemas/chat-context.schema.d.ts +1 -1
- package/dist/protocol/schemas/chat-context.schema.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
### Added
|
|
6
6
|
|
|
7
7
|
- `OpportunityDetection.source` gains `'introducer'`, stamped on opportunities a third party opens.
|
|
8
|
+
- Protocol agent requests to OpenRouter carry `HTTP-Referer` and `X-Title` headers, so their spend is attributed apart from the hosted agent's, and a `trace` named by the agent key (for example `intentInferrer` or `chat`).
|
|
8
9
|
|
|
9
10
|
## 66.0.0
|
|
10
11
|
|
|
@@ -339,7 +340,7 @@ pin a supported release, use `latest`.
|
|
|
339
340
|
- Agent-facing tool descriptions, scope-refusal messages, and `read_docs`
|
|
340
341
|
guidance now say "network" or "community" wherever they said "index".
|
|
341
342
|
- The intent assignment pipeline keeps its verb naming (`getIntentForIndexing`,
|
|
342
|
-
`indexer.graph.ts`, `IndexedIntent`): those describe assigning
|
|
343
|
+
`indexer.graph.ts`, `IndexedIntent`): those describe assigning an intent, not
|
|
343
344
|
the community noun.
|
|
344
345
|
|
|
345
346
|
## 48.1.0 - 2026-09-04
|
|
@@ -359,7 +360,7 @@ pin a supported release, use `latest`.
|
|
|
359
360
|
### Added
|
|
360
361
|
|
|
361
362
|
- **`Intents.clarify({ payload, answers? })` → `{ payload, questions }`.** One
|
|
362
|
-
stateless round of
|
|
363
|
+
stateless round of intent clarification: with no answers it returns the payload
|
|
363
364
|
untouched plus the questions worth asking; with answers it rewrites the payload
|
|
364
365
|
so those answers are stated in it and returns whatever is still open. Nothing
|
|
365
366
|
is stored, so skipping is always valid. `ClarifyAnswer`, `ClarifyInput`,
|
|
@@ -372,14 +373,14 @@ pin a supported release, use `latest`.
|
|
|
372
373
|
`FollowUpPlan`, `SynthesisInput` and `SynthesisResult` are removed along with
|
|
373
374
|
the pack generator and intake orchestrator. Clarification is `clarify` now, and
|
|
374
375
|
it holds no run state — hosts can drop their intake pack and run storage.
|
|
375
|
-
- **BREAKING:
|
|
376
|
+
- **BREAKING: intents are no longer proposed before they are created.** The
|
|
376
377
|
dry-run branch of `create_intent`, the `intent_proposal` fence it emitted and
|
|
377
378
|
the `autoApprove` argument are gone. `create_intent({ description, networkIds })`
|
|
378
379
|
persists directly, so hosts can drop their proposal storage and their confirm
|
|
379
380
|
and reject endpoints.
|
|
380
381
|
- **BREAKING: networks are no longer assigned by a model.** `IntentNetworkIndexer`,
|
|
381
382
|
`IntentIndexingResult`, `Intents.indexIntent` and the evaluated branch of the
|
|
382
|
-
indexer graph are removed, and so is the threshold scoring behind them.
|
|
383
|
+
indexer graph are removed, and so is the threshold scoring behind them. An intent
|
|
383
384
|
reaches exactly the networks its owner names on create or links afterwards with
|
|
384
385
|
`create_intent_index`.
|
|
385
386
|
- **BREAKING: agents no longer have transports.** `AgentTransportRecord`,
|
|
@@ -517,7 +518,7 @@ No aliases or compatibility shims: hosts must drop the deleted ports.
|
|
|
517
518
|
refs and the `personal-agent.e2e` spec — are deleted. Index no longer runs an
|
|
518
519
|
agent; a host that wants one builds it as a client over REST/MCP.
|
|
519
520
|
- **BREAKING: `ChatGraph` and the whole chat capability are gone.**
|
|
520
|
-
`ChatGraphFactory`, `ChatAgent`, the personas (`
|
|
521
|
+
`ChatGraphFactory`, `ChatAgent`, the personas (`INTENT_PERSONA`,
|
|
521
522
|
`ONBOARDING_PERSONA`, `withPersona`), the streamer, suggester, summarizer,
|
|
522
523
|
title generator, interrupt classifier, question-dedup, chat state/tools/utils
|
|
523
524
|
and the chat-streaming types no longer exist. There is no H2A chat runtime in
|
|
@@ -727,14 +728,14 @@ remains.
|
|
|
727
728
|
|
|
728
729
|
- **`NegotiationGraph` refuses to open an opportunity whose introducers have
|
|
729
730
|
not all approved it.** The gate now lives on the write, not only where
|
|
730
|
-
discovery decides which
|
|
731
|
+
discovery decides which intents to wake, so no caller can reach past it.
|
|
731
732
|
- **New negotiation pause reason `open_failed`.** `NEGOTIATION_PAUSE_REASONS`
|
|
732
733
|
gains it, and `{ negotiationId, pause }` now accepts
|
|
733
734
|
`NegotiationSystemPauseReason` (`'counterparty_silent' | 'open_failed'`)
|
|
734
735
|
rather than the single literal. A kickoff whose open failed after `init`
|
|
735
736
|
created the task compensates it into this pause, so the round's active count
|
|
736
737
|
can still reach zero. Unlike `turn_cap` it stays re-kickable.
|
|
737
|
-
- **A negotiation binds
|
|
738
|
+
- **A negotiation binds an intent PER SEAT.** `NegotiationTaskMetadata.intentId`
|
|
738
739
|
and `.round` are replaced by `seats: Record<string, NegotiationSeatBinding>`
|
|
739
740
|
keyed by intent id (`{ userId, round }`), and `setNegotiationRound` becomes
|
|
740
741
|
`bindNegotiationSeat(taskId, intentId, binding)`. Both sides' IS-A can now
|
|
@@ -750,7 +751,7 @@ remains.
|
|
|
750
751
|
the caller's own brief only. The `brief` on the graph's open/resume inputs is
|
|
751
752
|
the INITIATING seat's, never the counterparty's.
|
|
752
753
|
- **`NegotiationGraphDatabase` gains `getPausedNegotiationTasksForIntent`** —
|
|
753
|
-
the
|
|
754
|
+
the intent-scoped read of every paused, unresolved negotiation. Reflect
|
|
754
755
|
reasons over that, not over one round: a negotiation a later kickoff left
|
|
755
756
|
behind keeps its old round, and a round-scoped read hid it from every future
|
|
756
757
|
verdict.
|
|
@@ -765,11 +766,11 @@ remains.
|
|
|
765
766
|
`END` without it, so a chat- or MCP-run discovery persists matches nobody is
|
|
766
767
|
woken for.
|
|
767
768
|
- **`PersonalAgentDeps` gains `wakeForMatches`** — the agent wakes its own
|
|
768
|
-
|
|
769
|
+
intent again for a discovery batch that landed after the turn read its match
|
|
769
770
|
list.
|
|
770
771
|
- **The retired `queueNegotiateExisting` host callback is removed** from
|
|
771
772
|
`ToolDeps` and `OpportunityGraphFactory`. Approving the final introducer
|
|
772
|
-
gate emits `matches_ready` for the source participant's bound
|
|
773
|
+
gate emits `matches_ready` for the source participant's bound intent; it
|
|
773
774
|
never directly opens or resumes a negotiation.
|
|
774
775
|
|
|
775
776
|
- **AgentGraph: one PersonalAgent, routed on the shape of its input.** New
|
|
@@ -781,7 +782,7 @@ remains.
|
|
|
781
782
|
what ACT does. IS-A's verbs are `message_user`, `ask`, `kickoff`, `promote`,
|
|
782
783
|
`reject`, `note_dossier`, `retire_dossier`, `accept_opportunity`; there is
|
|
783
784
|
no `wait`. Asking BLOCKS acting: a turn that asks executes no verdicts and
|
|
784
|
-
starts no negotiations. The host implements the ports (
|
|
785
|
+
starts no negotiations. The host implements the ports (intent DM, dossier,
|
|
785
786
|
act ledger, reply transport, the owner's accept path, matches list).
|
|
786
787
|
- **The interim `NegotiationAuthor` is deleted.** `NegotiationGraphDeps.author`
|
|
787
788
|
is now a required `NegotiationTurnAuthor` port taking ids only
|
|
@@ -790,15 +791,15 @@ remains.
|
|
|
790
791
|
Removed exports: `NegotiationAuthor`, `NegotiationAuthorInput`.
|
|
791
792
|
- **Discovery no longer opens negotiations.** The opportunity graph's
|
|
792
793
|
`negotiate` node is replaced by a `matches_ready` node that emits ONE event
|
|
793
|
-
per
|
|
794
|
-
callback; the
|
|
794
|
+
per intent per persisted batch through the new `MatchesReadyFn` host
|
|
795
|
+
callback; the intent's PersonalAgent decides whether to reach out at all.
|
|
795
796
|
`OpportunityGraphFactory`'s sixth constructor argument changes from
|
|
796
797
|
`negotiationGraph` to `matchesReady`, and `ToolFactory`/`ToolDeps` gain
|
|
797
798
|
`matchesReady`. The tool factory no longer builds a second, reflect-less
|
|
798
799
|
negotiation graph: without the host's own composition there is no
|
|
799
800
|
negotiation graph in that context at all.
|
|
800
801
|
- **The all-paused → reflect trigger is gated on a round-size stamp.**
|
|
801
|
-
`NegotiationRoundReflectJobData` gains `userId` (the
|
|
802
|
+
`NegotiationRoundReflectJobData` gains `userId` (the intent's owner, so the
|
|
802
803
|
consumer can invoke the PersonalAgent). `NegotiationGraphDatabase` gains
|
|
803
804
|
`getNegotiationTasksForIntentRound`, `getIntentNegotiationRound` and
|
|
804
805
|
`stampIntentNegotiationRoundSize`, and `bumpIntentNegotiationRound` must now
|
|
@@ -835,13 +836,13 @@ remains.
|
|
|
835
836
|
|
|
836
837
|
### Changed
|
|
837
838
|
|
|
838
|
-
- **One PersonalAgent persona.** The
|
|
839
|
+
- **One PersonalAgent persona.** The intent, onboarding, and negotiator chat
|
|
839
840
|
personas collapse into a single `createPersonalAgentPersona(identity)`
|
|
840
841
|
factory with `PERSONAL_AGENT_PERSONA_ID = 'personal'`. What a turn may do is
|
|
841
842
|
derived from the session's resolved scope context, never from a persona id;
|
|
842
843
|
the onboarding prompt/toolset is a fragment selected by incomplete-onboarding
|
|
843
844
|
session state on truly unscoped sessions only. Removed exports:
|
|
844
|
-
`
|
|
845
|
+
`INTENT_PERSONA_ID`, `createIntentPersona`, `ONBOARDING_PERSONA_ID`,
|
|
845
846
|
`createOnboardingPersona`, `NEGOTIATOR_PERSONA_ID`, `PersonalAgentChat`,
|
|
846
847
|
`PersonalAgentChatDeps`. The negotiator persona (prompt, chat toolset, and
|
|
847
848
|
its `remember`/`forget` chat tools plus the `negotiatorMemoryTools` host
|
|
@@ -923,7 +924,7 @@ remains.
|
|
|
923
924
|
client answered the one question the initiator paused to ask, the resumed
|
|
924
925
|
turn-0 decision was entirely re-drafted: an agent that still held a
|
|
925
926
|
withdraw-worthy concern it never asked the client about (e.g. a location
|
|
926
|
-
preference read from the profile rather than the
|
|
927
|
+
preference read from the profile rather than the intent) could withdraw
|
|
927
928
|
anyway, seconds after the client answered the thing it did ask, with the
|
|
928
929
|
counterparty never contacted. Now, if the resumed turn drafts `withdraw`
|
|
929
930
|
and the dimension actually asked about reconciled to `ok`, the graph
|
|
@@ -1005,7 +1006,7 @@ remains.
|
|
|
1005
1006
|
|
|
1006
1007
|
- **BREAKING: the intent graph routes on the shape of its input, not an
|
|
1007
1008
|
`operationMode` flag.** `operationMode` is gone from the graph's invoke
|
|
1008
|
-
input. Callers now
|
|
1009
|
+
input. Callers now express intent by which fields they set:
|
|
1009
1010
|
`inputContent` alone creates; `inputContent` + `targetIntentIds` is an
|
|
1010
1011
|
explicit update; `targetIntentIds` + `archive: true` expires; `targetIntentIds`
|
|
1011
1012
|
+ `status` pauses/resumes; `proposalId` (+ `description`, `networkId`)
|
|
@@ -1077,7 +1078,7 @@ remains.
|
|
|
1077
1078
|
the deterministic consultation policy are on; deadlock-shift is on; the
|
|
1078
1079
|
negotiator drafts in the `skeptic` stance (`advocate` and `evaluator`, and the
|
|
1079
1080
|
`stance*` predicates that distinguished them, are gone); negotiators receive
|
|
1080
|
-
only each participant's exact opportunity-bound
|
|
1081
|
+
only each participant's exact opportunity-bound intent; HyDE generates under
|
|
1081
1082
|
`frame-v1`; candidate evaluation runs in parallel; retrieval floor is `0.20`
|
|
1082
1083
|
and the evaluator score floor is `40`; the two question miners are pinned to
|
|
1083
1084
|
`shadow`.
|
|
@@ -1163,7 +1164,7 @@ remains.
|
|
|
1163
1164
|
- **Persona identity + create_intent scope rule (#1479) — the version stamp
|
|
1164
1165
|
the change shipped without.** Every chat persona now introduces itself as
|
|
1165
1166
|
the user's own agent: `buildAgentSelfIntroduction`, plus
|
|
1166
|
-
`
|
|
1167
|
+
`createIntentPersona` / `createOnboardingPersona` factories taking
|
|
1167
1168
|
`agentName` the way the negotiator already did. Tool registration gained
|
|
1168
1169
|
the scope rule (`isToolAllowedInScope`, `filterToolsForScope`). #1479
|
|
1169
1170
|
merged these exports without bumping, so two different export surfaces
|
|
@@ -1203,11 +1204,11 @@ remains.
|
|
|
1203
1204
|
- **An answer beats staleness — drift is logged, never fatal.** Observed live:
|
|
1204
1205
|
a client answered her own parked question ("Timing: This week") through the
|
|
1205
1206
|
new MCP answer lane, routing succeeded, consumption ran — and the settle
|
|
1206
|
-
returned `lost`, because the
|
|
1207
|
+
returned `lost`, because the intent had been edited twice since the park and
|
|
1207
1208
|
the revalidation fence required the world to look exactly as it did at park
|
|
1208
1209
|
time. The park became a zombie: still `input_required`, still rendered as
|
|
1209
1210
|
"waiting on YOUR answer" by every surface, structurally unanswerable. The
|
|
1210
|
-
design law is explicit:
|
|
1211
|
+
design law is explicit: intent edits cascade nothing, and a stale negotiation
|
|
1211
1212
|
is solved by ANSWERING its question — the user's answer is the freshest
|
|
1212
1213
|
commitment there is, and the resumed turn rebuilds its context from current
|
|
1213
1214
|
data anyway.
|
|
@@ -1215,16 +1216,16 @@ remains.
|
|
|
1215
1216
|
The settle's one fence is now two. Coherence stays hard: an answer that does
|
|
1216
1217
|
not belong to its park (settlement mismatch, wrong recipient, task no longer
|
|
1217
1218
|
parked, a dismiss/timeout settlement won the race) is still refused. Drift
|
|
1218
|
-
stops losing: within a live opportunity and an active
|
|
1219
|
+
stops losing: within a live opportunity and an active intent, the answer
|
|
1219
1220
|
settles and resumes regardless of what moved since the park.
|
|
1220
1221
|
|
|
1221
1222
|
- **The unresumable tail is an explicit proposal, not a silent drop.** When
|
|
1222
1223
|
current reality genuinely cannot continue — terminal opportunity or archived
|
|
1223
|
-
|
|
1224
|
+
intent — the answer is still recorded as heard: settlement result and resume
|
|
1224
1225
|
outcome `recorded_unresumable` (additive), the block-consumption result
|
|
1225
1226
|
counts it in its own `recorded` array so a `skipped` count can never again
|
|
1226
1227
|
hide it, and the implementation retires the park and tells the client the
|
|
1227
|
-
truth, proposing re-discovery under the updated
|
|
1228
|
+
truth, proposing re-discovery under the updated intent — an offer, never an
|
|
1228
1229
|
automatic act.
|
|
1229
1230
|
|
|
1230
1231
|
## 23.6.0 - 2026-08-20
|
|
@@ -1370,14 +1371,14 @@ remains.
|
|
|
1370
1371
|
### Added
|
|
1371
1372
|
|
|
1372
1373
|
- **The owner's verdict has a lane in their own DM.** Observed live: in the
|
|
1373
|
-
negotiator DM for one
|
|
1374
|
+
negotiator DM for one intent, a client told their agent to reject the
|
|
1374
1375
|
counterparty — a pairing parked `input_required`. The agent could not comply.
|
|
1375
1376
|
The owner makes exactly three kinds of decision in that room. They ANSWER a
|
|
1376
1377
|
question a parked negotiation asked, which `answer_pending_question` gave a
|
|
1377
|
-
lane. They EDIT the
|
|
1378
|
+
lane. They EDIT the intent, which `update_intent` always covered.
|
|
1378
1379
|
And they pass a VERDICT on a counterparty, which had no lever at all. So on
|
|
1379
1380
|
"reject them" the persona's whole repertoire was to say something back, or to
|
|
1380
|
-
edit the
|
|
1381
|
+
edit the intent instead; the pairing stayed parked and the counterparty
|
|
1381
1382
|
stayed live.
|
|
1382
1383
|
|
|
1383
1384
|
`update_opportunity` is in the negotiator toolset and cannot substitute for
|
|
@@ -1397,7 +1398,7 @@ remains.
|
|
|
1397
1398
|
cannot see them. `NegotiatorVerdictToolsHost` is the whole surface the package
|
|
1398
1399
|
knows; the composition root owns everything behind it.
|
|
1399
1400
|
|
|
1400
|
-
- **Numbered refs, never ids.** The prompt renders this
|
|
1401
|
+
- **Numbered refs, never ids.** The prompt renders this intent's actionable
|
|
1401
1402
|
counterparties as `N. {name} — {state}`, and the tool takes the number. The
|
|
1402
1403
|
schema offers no place to put an id and no result string carries one. The rule
|
|
1403
1404
|
is `answer_pending_question`'s, for a sharper reason: a ref the model can name
|
|
@@ -1412,18 +1413,18 @@ remains.
|
|
|
1412
1413
|
|
|
1413
1414
|
### Changed
|
|
1414
1415
|
|
|
1415
|
-
- **The pinned-
|
|
1416
|
+
- **The pinned-intent prompt gains a verdict section, and only where the tools
|
|
1416
1417
|
exist.** `NegotiatorPromptOptions.actionableCounterparties` renders
|
|
1417
1418
|
`## Verdicts {userName} can pass here` plus two tool-reference rows. It says
|
|
1418
1419
|
the tool call IS the decision — not the sentence about it, and not an edit of
|
|
1419
|
-
the
|
|
1420
|
+
the intent; that a verdict the client did not pass must never be passed for
|
|
1420
1421
|
them; that `update_opportunity` is not this lever; and that an accept is one
|
|
1421
1422
|
side of two and never a connection. Rendered only in an intent-pinned session
|
|
1422
1423
|
with a non-empty list, since that is the only place the tools are registered.
|
|
1423
1424
|
Absent or empty leaves the prompt byte-identical to 23.4.0.
|
|
1424
1425
|
|
|
1425
1426
|
- **Result copy is honest at every status.** `executed` names the counterparty
|
|
1426
|
-
and forbids also editing the
|
|
1427
|
+
and forbids also editing the intent; `none_actionable` forbids implying a
|
|
1427
1428
|
decision was recorded; `unknown_counterparty` states plainly that nothing was
|
|
1428
1429
|
decided and re-lists the current set; `already_decided` says whose move it is;
|
|
1429
1430
|
`error` forbids describing the pairing as decided. A host that throws is
|
|
@@ -1592,7 +1593,7 @@ remains.
|
|
|
1592
1593
|
### Changed
|
|
1593
1594
|
|
|
1594
1595
|
- **A verdict has a floor under it: an askable unknown outranks a conclusion.**
|
|
1595
|
-
Every stage of the flow —
|
|
1596
|
+
Every stage of the flow — intent, discovery, agents talking, match, meet — was
|
|
1596
1597
|
verified working except one arrow: the agent asking its own client something
|
|
1597
1598
|
only that client can settle. In a week of live traffic it fired zero times,
|
|
1598
1599
|
against 23 policy-recognized consultation moments. The reason is structural
|
|
@@ -1664,7 +1665,7 @@ remains.
|
|
|
1664
1665
|
settle, so an open dimension on turn 0 is the shape the protocol asked for, not
|
|
1665
1666
|
a dodge — and a floor that bound there would park every negotiation before it
|
|
1666
1667
|
ever made contact. Turn 0 already has its own designed consult, the pre-contact
|
|
1667
|
-
verdict, bounded per
|
|
1668
|
+
verdict, bounded per intent.
|
|
1668
1669
|
|
|
1669
1670
|
- **The verdict prompt's escape hatch is now conditional.** "What remains unknown
|
|
1670
1671
|
is the kind of thing two people settle in a first conversation" waved verdicts
|
|
@@ -1682,7 +1683,7 @@ remains.
|
|
|
1682
1683
|
### Fixed
|
|
1683
1684
|
|
|
1684
1685
|
- **No turn may repeat a message already on the record.** A counterparty asked what
|
|
1685
|
-
a phrase in the client's own
|
|
1686
|
+
a phrase in the client's own intent meant; the answering agent could not consult
|
|
1686
1687
|
its (unreachable) principal and its record did not settle the phrase, so with no
|
|
1687
1688
|
legal move left it copied the question back word for word. Both models then
|
|
1688
1689
|
locked — reproducing text already in context is close to deterministic — and the
|
|
@@ -1702,7 +1703,7 @@ remains.
|
|
|
1702
1703
|
`PRINCIPAL_UNREACHABLE_RULE` said never stall and never route the client's
|
|
1703
1704
|
question to the other side, but named no move for the case that occurred: the
|
|
1704
1705
|
COUNTERPARTY asks something client-authoritative that the record does not
|
|
1705
|
-
settle. The rule now says to state the limit of the record — "X's
|
|
1706
|
+
settle. The rule now says to state the limit of the record — "X's intent says
|
|
1706
1707
|
Y; it does not specify further" is a complete answer — and to let the
|
|
1707
1708
|
counterparty score that dimension unknown, never repeating or mirroring their
|
|
1708
1709
|
question and never inventing an answer the record does not hold.
|
|
@@ -1757,7 +1758,7 @@ remains.
|
|
|
1757
1758
|
|
|
1758
1759
|
### Fixed
|
|
1759
1760
|
|
|
1760
|
-
- **Retrieval scores no longer clamp at a flat ceiling.** The multi-
|
|
1761
|
+
- **Retrieval scores no longer clamp at a flat ceiling.** The multi-intent bonus in
|
|
1761
1762
|
`mergeStrategyCandidates` was added to the raw similarity and then clamped
|
|
1762
1763
|
(`Math.min(raw + boost, 1)`), so candidates found by enough strategies all landed
|
|
1763
1764
|
on exactly 1.0. Candidates enter evaluation strictly by rank, so a head cluster of
|
|
@@ -1847,7 +1848,7 @@ remains.
|
|
|
1847
1848
|
|
|
1848
1849
|
- **The QuestionerAgent generation half** (conversational-questions plan,
|
|
1849
1850
|
"Retirements"). Questions are conversation: the parked negotiation is the
|
|
1850
|
-
durable record and the question-message in the
|
|
1851
|
+
durable record and the question-message in the intent's DM is its
|
|
1851
1852
|
rendering, so the card generators go. Removed: `QuestionerAgent`,
|
|
1852
1853
|
`question.presets`, the blocking chat `ask_user_question` tool and its
|
|
1853
1854
|
`ChatQuestionsHost` bridge (with the `user_question` stream event and the
|
|
@@ -1862,8 +1863,8 @@ remains.
|
|
|
1862
1863
|
|
|
1863
1864
|
### Changed
|
|
1864
1865
|
|
|
1865
|
-
- The
|
|
1866
|
-
guided New
|
|
1866
|
+
- The intent and onboarding personas interview in plain conversation: the
|
|
1867
|
+
guided New Intent intake drops its blocking question-card rounds, and its
|
|
1867
1868
|
stage machine reduces to interview → complete (`create_intent` is the only
|
|
1868
1869
|
remaining stage marker).
|
|
1869
1870
|
|
|
@@ -1996,7 +1997,7 @@ same 44 names as before. Only paths private to the capability moved.
|
|
|
1996
1997
|
|
|
1997
1998
|
- **BREAKING**: The `intents` capability now ships as a single class. `Intents`
|
|
1998
1999
|
replaces `IntentGraphFactory`, `SemanticVerifier`, `IntentIndexer`,
|
|
1999
|
-
`
|
|
2000
|
+
`IntentIntakePackGenerator`, `IntentIntakeOrchestrator`,
|
|
2000
2001
|
`normalizeIntentDescription`, and `FALLBACK_WHO_QUESTION`, all of which are
|
|
2001
2002
|
no longer exported. Dependencies move from positional constructor arguments
|
|
2002
2003
|
to a named `IntentsDeps` bag, and every field is optional — a host that wants
|
|
@@ -2007,9 +2008,9 @@ same 44 names as before. Only paths private to the capability moved.
|
|
|
2007
2008
|
| `new IntentGraphFactory(db, embedder, queue, enqueue).createGraph()` | `new Intents({ database, embedder, queue, questionerEnqueue }).createGraph()` |
|
|
2008
2009
|
| `new SemanticVerifier().invoke(content, context)` | `new Intents().verifyIntent(content, context)` |
|
|
2009
2010
|
| `new IntentIndexer().invoke(...)` / `.evaluate(...)` | `new Intents().indexIntent(...)` |
|
|
2010
|
-
| `new
|
|
2011
|
-
| `new
|
|
2012
|
-
| `new
|
|
2011
|
+
| `new IntentIntakePackGenerator().generate(input)` | `new Intents().generateIntakePack(input)` |
|
|
2012
|
+
| `new IntentIntakeOrchestrator().generateFollowUps(input)` | `new Intents().generateIntakeFollowUps(input)` |
|
|
2013
|
+
| `new IntentIntakeOrchestrator().synthesize(input)` | `new Intents().synthesizeIntake(input)` |
|
|
2013
2014
|
| `normalizeIntentDescription(text)` | `Intents.normalizeDescription(text)` |
|
|
2014
2015
|
| `FALLBACK_WHO_QUESTION` | `Intents.FALLBACK_INTAKE_QUESTION` |
|
|
2015
2016
|
|
|
@@ -2075,7 +2076,7 @@ same 44 names as before. Only paths private to the capability moved.
|
|
|
2075
2076
|
- `ContactServiceAdapter` narrows to `listContacts` / `removeContact` /
|
|
2076
2077
|
`searchContacts`; `importContacts` and `addContact` are gone, along with the
|
|
2077
2078
|
`ContactInput`, `ContactResult` and `ContactImportResult` domain types.
|
|
2078
|
-
- Orchestrator, negotiator,
|
|
2079
|
+
- Orchestrator, negotiator, intent and onboarding prompt surfaces no longer
|
|
2079
2080
|
advertise contact import or Gmail import.
|
|
2080
2081
|
|
|
2081
2082
|
## 16.1.0 - 2026-08-17
|
|
@@ -2142,7 +2143,7 @@ from the package root.
|
|
|
2142
2143
|
(`projectActivitySummary`, `ActivitySummaryResponseSchema`,
|
|
2143
2144
|
`QUESTION_MODE_TO_DOMAIN`, `READ_ACTIVITY_SUMMARY_TOOL_NAME`, …).
|
|
2144
2145
|
- **Persona helpers** — the `filter*Tools` / `narrow*Tools` helpers, the
|
|
2145
|
-
`*_TOOL_NAMES` constants, and the `
|
|
2146
|
+
`*_TOOL_NAMES` constants, and the `INTENT_NEW_INTENT_KICKOFF` /
|
|
2146
2147
|
`ONBOARDING_PROFILE_KICKOFF` constants. The persona IDs, the prompt
|
|
2147
2148
|
constants, and `REPORTER_BRIEFING_KICKOFF` stay — `apps/web` imports the
|
|
2148
2149
|
latter.
|
|
@@ -2154,7 +2155,7 @@ from the package root.
|
|
|
2154
2155
|
slated for removal with the eval harnesses, and this accessor should be
|
|
2155
2156
|
pruned in the same change. These back live Railway configuration and are
|
|
2156
2157
|
unchanged in behaviour; only the re-export is gone.
|
|
2157
|
-
- **
|
|
2158
|
+
- **Intent-intake types** — `IntakePack`, `IntakePackInput`, `SynthesisInput`,
|
|
2158
2159
|
`SynthesisResult`, `FollowUpPlan`, `answerLabel`, `normalizeIntakePack`, …
|
|
2159
2160
|
|
|
2160
2161
|
Two of the removed symbols (`createAgentTools` and
|
|
@@ -2359,7 +2360,7 @@ Directory names only.
|
|
|
2359
2360
|
|
|
2360
2361
|
| before | after |
|
|
2361
2362
|
|---|---|
|
|
2362
|
-
| `
|
|
2363
|
+
| `intents/` | `intents/` |
|
|
2363
2364
|
| `communities/` | `networks/` |
|
|
2364
2365
|
| `opportunity/` | `opportunities/` |
|
|
2365
2366
|
| `negotiation/` | `negotiations/` |
|
|
@@ -2395,7 +2396,7 @@ This is internal structure only.
|
|
|
2395
2396
|
were `*.tools.port.ts` port definitions misfiled into a facade directory. The
|
|
2396
2397
|
ports moved into their capability's `ports/`.
|
|
2397
2398
|
- Removed the nine per-capability `public/index.ts` barrels. Three of them
|
|
2398
|
-
(`
|
|
2399
|
+
(`intents`, `communities`, `opportunity`) already had zero importers.
|
|
2399
2400
|
|
|
2400
2401
|
### Changed
|
|
2401
2402
|
|
|
@@ -2426,7 +2427,7 @@ This is internal structure only.
|
|
|
2426
2427
|
(three pure text predicates, no imports of its own). `negotiation` and
|
|
2427
2428
|
`contacts` needed it and were pulling the whole opportunity capability.
|
|
2428
2429
|
- `UnderspecificationTypeSchema` → `shared/schemas/underspecification.schema.ts`.
|
|
2429
|
-
The
|
|
2430
|
+
The intents clarifier was importing the entire questions capability — LLM
|
|
2430
2431
|
agents and tools included — to reach a three-value enum.
|
|
2431
2432
|
|
|
2432
2433
|
- `CAPABILITY_DIRECTORIES` mapped `questioner` but not `questions`, so every
|
|
@@ -2467,7 +2468,7 @@ commit (`225425371d`) rather than from memory.
|
|
|
2467
2468
|
|
|
2468
2469
|
Production evidence at the time: the orchestrator had written no new session
|
|
2469
2470
|
since 2026-08-04, and the presence of `onboarding`-persona rows showed the
|
|
2470
|
-
|
|
2471
|
+
Intent cutover flag was already on. The 9,464 historical orchestrator
|
|
2471
2472
|
conversations remain readable.
|
|
2472
2473
|
|
|
2473
2474
|
## 13.2.1 - 2026-08-16
|
|
@@ -2482,7 +2483,7 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2482
2483
|
declaration-only placeholders with zero inbound imports; `runtime/background`
|
|
2483
2484
|
and `public` consisted of nothing but a header comment. The only thing
|
|
2484
2485
|
referencing them was a spec asserting that they existed.
|
|
2485
|
-
- Removed eight unused capability barrels (`
|
|
2486
|
+
- Removed eight unused capability barrels (`intents/index.ts`,
|
|
2486
2487
|
`communities/index.ts`, `contacts/index.ts`, `questions/index.ts`,
|
|
2487
2488
|
`opportunity/index.ts`, `negotiation/index.ts`, `integrations/index.ts`,
|
|
2488
2489
|
`participant-agents/index.ts`). Each was `export * from "./public/index.js"`
|
|
@@ -2501,8 +2502,8 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2501
2502
|
`shared/agent/tool.registry.ts` and `shared/agent/tool.factory.ts`, and the
|
|
2502
2503
|
indirection is gone. `mcp.server.ts` was the one direct consumer of the old
|
|
2503
2504
|
location and now resolves to the same single home.
|
|
2504
|
-
- `
|
|
2505
|
-
factory; the `runtime/foreground/
|
|
2505
|
+
- `intents/application/intent.tools.ts` is imported directly by the tool
|
|
2506
|
+
factory; the `runtime/foreground/intents/intent.tools.ts` pass-through
|
|
2506
2507
|
re-export that sat between them is removed.
|
|
2507
2508
|
- Replaced `architecture/tests/runtime-shells.spec.ts` with
|
|
2508
2509
|
`architecture/tests/package-entry.spec.ts`, which asserts the invariants that
|
|
@@ -2631,7 +2632,7 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2631
2632
|
|
|
2632
2633
|
### Removed
|
|
2633
2634
|
|
|
2634
|
-
- **Breaking (14.0.0):** remove the `orchestrator` chat persona. `ORCHESTRATOR_PERSONA_ID` and `ORCHESTRATOR_PERSONA` are gone from the public API, and the orchestrator system prompt (`buildSystemContent`) and its conditional prompt-module registry are deleted. `ChatPersonaLoopBehaviors.hallucinationRecovery` is retained — it is opted into by the onboarding,
|
|
2635
|
+
- **Breaking (14.0.0):** remove the `orchestrator` chat persona. `ORCHESTRATOR_PERSONA_ID` and `ORCHESTRATOR_PERSONA` are gone from the public API, and the orchestrator system prompt (`buildSystemContent`) and its conditional prompt-module registry are deleted. `ChatPersonaLoopBehaviors.hallucinationRecovery` is retained — it is opted into by the onboarding, intent and negotiator personas, not just the removed one.
|
|
2635
2636
|
- Remove the never-emitted `question_generator_start` / `question_generator_end` stream events and the `DebugMetaDiscoveryQuestions` debug payload, which had no producer.
|
|
2636
2637
|
|
|
2637
2638
|
### Changed
|
|
@@ -2685,26 +2686,26 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2685
2686
|
|
|
2686
2687
|
### Added
|
|
2687
2688
|
- Add the Personal Agent Hermes negotiation-runtime contract (11.1.0). The public negotiation facade now exports `configuredAskUserEnabled` and `askUserAnswerWindowMs` for host-side owner-consultation admission, with regenerated consumer/export inventories. The generated Hermes negotiator skill receives a privacy-minimal structural envelope: server-provided seat, protocol version, deadlines, closed allowed actions, consultation eligibility, opportunity identifiers/status, and message-free history. Owner memory, private context, consultation text, evaluator reasoning, actor prose, and shared-message prose are excluded; each scheduled pass permits at most one response or owner consultation and treats all pickup prose as untrusted data.
|
|
2688
|
-
- Add a live answer-first
|
|
2689
|
+
- Add a live answer-first intent-intake eval with unrelated, relevant, and no-bridge profile cases plus provider-free corpus, runner, and scorer checks.
|
|
2689
2690
|
- Add the protocol-only Guided Atlas, deterministic architecture inventory
|
|
2690
2691
|
generator, and source-evidenced Configuration Lab. The atlas explains
|
|
2691
2692
|
normative concepts, the current `packages/protocol` reference implementation,
|
|
2692
2693
|
and counterfactual behavior-gate changes, while live environment values and
|
|
2693
2694
|
concrete API or host implementations remain outside its scope. Tooling-only
|
|
2694
2695
|
public-package change; no root export or runtime behavior changes.
|
|
2695
|
-
- Deterministic fast
|
|
2696
|
+
- Deterministic fast intent intake (#1307; 8.1.0). `IntentIntakePackGenerator`
|
|
2696
2697
|
precomputes a per-user intake brief plus round-1 question, and
|
|
2697
|
-
`
|
|
2698
|
+
`IntentIntakeOrchestrator` drives the funnel as a deterministic state machine
|
|
2698
2699
|
on flash instead of sequential pro turns, with synthesis speculated during a
|
|
2699
|
-
deterministic community picker. New stable exports from the `
|
|
2700
|
-
`
|
|
2700
|
+
deterministic community picker. New stable exports from the `intents` facade:
|
|
2701
|
+
`IntentIntakePackGenerator`, `normalizeIntakePack`, `IntentIntakeOrchestrator`,
|
|
2701
2702
|
`answerLabel`, `FALLBACK_WHO_QUESTION`, `FALLBACK_BRING_QUESTION`, and the
|
|
2702
2703
|
`IntakePack` / `IntakePackInput` / `IntakePackQuestion` /
|
|
2703
2704
|
`IntakePackQuestionOption` / `IntakeAnswer` / `SynthesisInput` /
|
|
2704
2705
|
`SynthesisResult` types. Minor bump: additive surface only.
|
|
2705
2706
|
|
|
2706
2707
|
### Changed
|
|
2707
|
-
- Make fast
|
|
2708
|
+
- Make fast intent-intake follow-ups answer-first with a two-stage model boundary: an answer-only core call chooses the missing axis and supplies two or three concrete domain options, then an isolated bridge call may append at most one premise-derived profile option so an existing profile theme cannot dominate or reorder a newly stated intent.
|
|
2708
2709
|
- Remove unsupported deprecated source/deep forwarding shims after migrating repository consumers to canonical modules; stable package-root exports are unchanged.
|
|
2709
2710
|
- Add a fail-closed isolated provider-free test gate (10.1.1). Tooling-only
|
|
2710
2711
|
safety foundation; no runtime or public API behavior changes.
|
|
@@ -2797,12 +2798,12 @@ above. Entries below keep the version they were developed under.
|
|
|
2797
2798
|
- Add canonical shared guidance source and unified MCP_INSTRUCTIONS/read_docs
|
|
2798
2799
|
(IND-602/603; 7.10.0): The single normative `CANONICAL_GUIDANCE_SUMMARY`
|
|
2799
2800
|
(1,555 chars, under the 4,500-char MCP context budget) covers Index Network
|
|
2800
|
-
entity model (identity/context, premises,
|
|
2801
|
+
entity model (identity/context, premises, intents, communities/networks,
|
|
2801
2802
|
opportunities), negotiation semantics with the critical distinction
|
|
2802
2803
|
**"A2A acceptance is not owner approval"** (separate gates), H2A/A2A
|
|
2803
2804
|
workflows, and the boundary **"H2H (human-to-human) never exposed; escalation
|
|
2804
2805
|
to native surfaces (web, Telegram) is outside MCP scope."** Seven detailed
|
|
2805
|
-
canonical topics (identity-context, premises,
|
|
2806
|
+
canonical topics (identity-context, premises, intents, communities-networks,
|
|
2806
2807
|
opportunities, negotiations, workflows) are published via read_docs on both
|
|
2807
2808
|
MCP and REST/chat surfaces. MCP surface read_docs serves canonical guidance
|
|
2808
2809
|
only; REST/chat retains legacy supplemental topics for backwards compatibility.
|
|
@@ -2970,7 +2971,7 @@ above. Entries below keep the version they were developed under.
|
|
|
2970
2971
|
`manage:negotiations`); the handler then passes the typed resolved MCP caller
|
|
2971
2972
|
context into one centralized permission projection, so global agents receive
|
|
2972
2973
|
only the domains their permissions authorize while session humans receive the
|
|
2973
|
-
full owner view.
|
|
2974
|
+
full owner view. Intent IDs/titles (`opportunitiesByIntent`) are exposed only
|
|
2974
2975
|
with `manage:intents`, and question counts are meta-network — never network
|
|
2975
2976
|
filtered — while each count inherits the permission of the domain the
|
|
2976
2977
|
question affects: the adapter groups pending/answered counts by question
|
|
@@ -3165,15 +3166,15 @@ above. Entries below keep the version they were developed under.
|
|
|
3165
3166
|
policy characterization.
|
|
3166
3167
|
- Characterization specs for membership authority (join-policy enforcement,
|
|
3167
3168
|
owner-only removal), privacy/scope intersection (scoped vs unscoped read,
|
|
3168
|
-
`showAll` bypass), and
|
|
3169
|
+
`showAll` bypass), and intent assignment policy (direct / evaluated /
|
|
3169
3170
|
no-prompt fast path, membership re-check at persistence time, unassign
|
|
3170
3171
|
authority).
|
|
3171
3172
|
|
|
3172
3173
|
### Changed
|
|
3173
3174
|
- `capabilities/communities.facade.ts` now imports from
|
|
3174
3175
|
`communities/application/` instead of the old `network/` paths.
|
|
3175
|
-
- `capabilities/
|
|
3176
|
-
`IntentIndexer` from `capabilities/
|
|
3176
|
+
- `capabilities/intents.indexing.facade.ts` updated to import
|
|
3177
|
+
`IntentIndexer` from `capabilities/intents.facade.ts` (canonical) instead
|
|
3177
3178
|
of the legacy `intent/intent.indexer.ts` shim.
|
|
3178
3179
|
- Communities capability boundary script updated: `communities/` directory now
|
|
3179
3180
|
maps to the `communities` capability (alongside legacy `network/`).
|
|
@@ -3292,7 +3293,7 @@ above. Entries below keep the version they were developed under.
|
|
|
3292
3293
|
the graph while retaining its LangGraph node routing and externally visible
|
|
3293
3294
|
lifecycle semantics (IND-530).
|
|
3294
3295
|
- Slice tool-factory dependencies into named capability-owned ports for
|
|
3295
|
-
enrichment,
|
|
3296
|
+
enrichment, intents, communities, opportunities, premises, contacts,
|
|
3296
3297
|
integrations, participant agents, negotiations, and questions. `ToolDeps`
|
|
3297
3298
|
and `ToolContext` remain structurally compatible composition intersections at
|
|
3298
3299
|
registry/runtime boundaries; ports are declared and exported through their
|
|
@@ -3311,20 +3312,20 @@ above. Entries below keep the version they were developed under.
|
|
|
3311
3312
|
- Allow the private intent-refinement provenance snapshot to identify intent creation as a producer and make the shared refinement prompt independent of no-opportunity process state, enabling creation and authoritative discovery producers to converge on one ordinary intent-page question cadence.
|
|
3312
3313
|
|
|
3313
3314
|
### Added
|
|
3314
|
-
- Capability facades for
|
|
3315
|
+
- Capability facades for Intents, Participant context, Communities,
|
|
3315
3316
|
Opportunities, Negotiation, Questions, Participant agents, Contacts, and
|
|
3316
3317
|
Integrations. Cross-capability callers now use named, narrow facade contracts;
|
|
3317
3318
|
the root barrel remains backward compatible and also adds the corresponding
|
|
3318
3319
|
explicit tool-factory entry points. Architecture tooling records every allowed
|
|
3319
3320
|
dependency direction and preserves the in-place directory layout for later
|
|
3320
3321
|
extraction work (IND-528).
|
|
3321
|
-
- Add the private `recovery` Questioner purpose and one-question intent recovery preset for post-discovery
|
|
3322
|
+
- Add the private `recovery` Questioner purpose and one-question intent recovery preset for post-discovery intent refinement (IND-506). The preset receives only the owned intent, global owner context, and an optional bounded aggregate count of fail-closed validated no-opportunity outcomes; it forbids candidate/counterparty/process narration, preserves the existing creation-time intent preset, persists publicly as ordinary `mode='intent'` questions with versioned internal recovery metadata, and carries optional material-fingerprint plus expected-owner guards through answer-only updates so the final database write can recheck lifecycle as well as content.
|
|
3322
3323
|
- Add versioned internal negotiation-question provenance and explicit source/candidate opportunity-actor intent threading for ordinary follow-up, inflight consultation, and uptake questions (IND-507). Runtime mode/purpose discriminants, structured `askUser` safety validation, neutral uptake context, and visible-field output gates exclude raw counterparty profile/identity/intent, private transcript, evaluator reasoning, match reasons, event/community inference, evidence, and internal IDs. Exact settlement/task correlation now threads through run-existing continuation admission without changing producer triggers or the ≤2 ordinary/inflight and ≤1 uptake cardinality.
|
|
3323
|
-
- Add the restricted persisted `onboarding` chat persona (IND-450) with an exact consent/profile/guided-
|
|
3324
|
+
- Add the restricted persisted `onboarding` chat persona (IND-450) with an exact consent/profile/guided-intent/completion allowlist, an onboarding-specific privacy and explicit-approval prompt, Intent's proposal-only live-membership narrowing, shared guided intake stages, and durable `profileConfirmedAt` / exact `firstIntentId` completion markers; selected first intents must be active, owned, and created no earlier than a valid profile-confirmation timestamp. Gmail/contact import, opportunity/discovery/negotiation, community and membership mutation, administration, arbitrary scraping, and unreviewed shared tools remain excluded; the legacy orchestrator onboarding flow remains available to flag-off and non-web consumers.
|
|
3324
3325
|
- Harden reporter turn handling so only the exact kickoff produces the detailed briefing, focused follow-ups stay narrow, and one-turn-local contextual natural-language confirmation deterministically bypasses the model and tools in favor of the visible confirmation card (IND-493).
|
|
3325
|
-
- Dark-gated reporter cleanup-action proposals for retracting owner premises, narrowing owned
|
|
3326
|
+
- Dark-gated reporter cleanup-action proposals for retracting owner premises, narrowing owned intents, and pausing owned intents (IND-490 PR1). `propose_cleanup_actions` is conditionally registered only when `WEB_AGENT_ACTIONS_ENABLED` is enabled alongside the reporter surface; it validates full owner UUIDs, requires pause evidence, persists a confirmation request, and never mutates data in chat.
|
|
3326
3327
|
- Read-only `reporter` chat persona for Agent-surface activity reporting (IND-476 PR1), with an exact positive allowlist, self-only narrowing, aggregate-only opportunity reporting, grounded `report_agent_activity` metrics, and a public briefing kickoff marker. Mutation, discovery, negotiation, memory, question-answering, scraping, and counterparty identity surfaces remain unavailable.
|
|
3327
|
-
- Restricted `
|
|
3328
|
+
- Restricted `intent` chat persona for the main-web cutover (IND-449), built on the existing persona-neutral runtime with a custom intents/profile prompt, an exact positive allowlist, proposal hallucination recovery, and the discovery-coupled create-intent callback disabled. Intent-specific wrappers clamp focused intent/network reads to owned active intents and current memberships, prohibit other-user membership enumeration, and validate live membership before forwarding network-scoped proposals. Shared orchestrator, MCP, and direct-tool registries are unchanged.
|
|
3328
3329
|
- `RawEvidenceOwnerAnswer` is now re-exported from the root barrel alongside the other Lens C negotiation-evidence segment types, so API-side projections (IND-465 slice 2) can type owner-answer evidence without deep imports. Type-only, additive; no runtime change.
|
|
3329
3330
|
- Default-off `POOL_QUESTIONS_VISIT_TRIGGER` accessor plus the shared 6h `POOL_VISIT_MINING_DEBOUNCE_MS` debounce window for visit-triggered pool mining: the flag only adds a *when* for the existing mining hook — every mining/question gate (`POOL_QUESTIONS_MODE`, k-anonymity floor, VoI threshold, per-intent budgets, freshness fingerprints, push budgets) applies unchanged (IND-439 visibility-audit slice).
|
|
3330
3331
|
- Default-off deadlock detection with a persuasion→bargaining mode shift for v2 negotiations (IND-428, dialogue-game backlog item 6): a deterministic trailing-run detector (`assessDeadlock`, no LLM in the decision) flags N consecutive `counter`/`question` turns without convergence (`NEGOTIATION_DEADLOCK_THRESHOLD`, integer >= 2, default 4) and — only when `NEGOTIATION_DEADLOCK_SHIFT_ENABLED` is literally `true` — shifts the system agent's drafting stance from arguing merits to offering concessions/scope reductions, escalating to `ask_user` only where that action is already legally held. The shift changes stance only: locutions, seat vocabularies (`allowedActionsFor`), termination rules, and turn-cap semantics are untouched; externally dispatched turns never receive the stance. The applied shift is recorded once per session as internal-only `tasks.metadata.deadlockShift` (optional `setTaskDeadlockShift` hook; never projected by API surfaces) plus a `negotiation_deadlock_shift` trace event. Detection and persistence fail open, and with the flag off the drafting path is byte-identical to before. The turn protocol's formal dialogue-game framing (locutions, combination rules, commitment store, termination) is documented in `docs/design/negotiation-dialogue-game.md`. Symbols are module-local (deep import from `negotiation/negotiation.deadlock.js`), deliberately not re-exported from the root barrel per the IND-457 externally-consumed-surface policy.
|
|
@@ -3356,7 +3357,7 @@ above. Entries below keep the version they were developed under.
|
|
|
3356
3357
|
- Made negotiation startup claim the exact persisted pre-negotiation status and version, atomically promote the winning opportunity to `negotiating` with its task, and skip finalize persistence when init owns no task (IND-496).
|
|
3357
3358
|
- Made Personal Agent negotiation narration lifecycle-accurate: concluded agent tasks now carry additive current-opportunity, owner-acceptance, and no-H2H-evidence labels; agent-side `accept` no longer implies owner acceptance, a completed connection, or a message thread (IND-492).
|
|
3358
3359
|
- Made owned-intent opportunity persistence trigger-aware: recent/lifecycle dedup now reuses only rows linked to the same trigger intent, cross-trigger rows remain independently visible, enrichment cannot absorb another trigger's row, and final persistence reports typed same-trigger/active-negotiation conflicts (IND-495).
|
|
3359
|
-
- Clamped intent-pinned `list_negotiations` results to the user's
|
|
3360
|
+
- Clamped intent-pinned `list_negotiations` results to the user's intent, added explicit intent/all scope metadata, and prevented stale cross-intent history from being presented as current negotiations (IND-483).
|
|
3360
3361
|
- Routed continuation-created and recovered opportunities through the normal negotiation boundary, threaded each persisted attempt version into atomic negotiation-task claiming, protected active/input-required tasks from duplicate negotiation, compensated pre-task failures and timeouts to truthful draft/latent states, and refreshed continuation cards from current lifecycle state (IND-470).
|
|
3361
3362
|
- Normalized opportunity actor intent IDs at evaluator, graph, and shared persistence boundaries so blank or null-like model sentinels are omitted, valid branded string IDs remain supported, enrichment cannot use or reintroduce malformed provenance, and legacy negotiation reads fail closed (IND-469).
|
|
3362
3363
|
- Forwarded per-attempt `AbortSignal`s through eval provider paths and hardened failure provenance against secret leakage, hostile rejection objects, classifier failures, and concurrent artifact writers (IND-444).
|
package/IMPLEMENTATION.md
CHANGED
|
@@ -150,9 +150,9 @@ module classes (see [Intents](#intents) and [Networks](#networks) below).
|
|
|
150
150
|
|
|
151
151
|
## On-demand discovery
|
|
152
152
|
|
|
153
|
-
Discovery is not a protocol workflow and does not run when
|
|
153
|
+
Discovery is not a protocol workflow and does not run when an intent is written.
|
|
154
154
|
The host exposes it as a search: the owner's agent sends a query, the host
|
|
155
|
-
embeds it and retrieves candidate
|
|
155
|
+
embeds it and retrieves candidate intents from the communities that intent is
|
|
156
156
|
shared in, and the agent picks which counterparties are worth an opportunity.
|
|
157
157
|
Nothing is generated ahead of the query and nothing is cached.
|
|
158
158
|
|
|
@@ -169,7 +169,7 @@ do nothing. `scoreIntent` remains independent metadata work.
|
|
|
169
169
|
|
|
170
170
|
## Intents
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
Intents are the protocol's base unit, and the whole capability ships as one
|
|
173
173
|
class. `Intents` covers the lifecycle graph, semantic verification, and payload
|
|
174
174
|
clarification.
|
|
175
175
|
|
|
@@ -189,14 +189,14 @@ first use, so an unused method costs nothing.
|
|
|
189
189
|
|
|
190
190
|
| Method | Purpose |
|
|
191
191
|
|---|---|
|
|
192
|
-
| `createGraph()` | Prepare and create exactly one new
|
|
192
|
+
| `createGraph()` | Prepare and create exactly one new intent; explicitly read, update, archive, or transition existing intents. Requires `database` |
|
|
193
193
|
| `verifyIntent(content, profileContext)` | Felicity conditions, speech-act classification, semantic entropy, specificity |
|
|
194
194
|
| `prepare({ payload, answers? })` | Fold recovery answers into the draft, then return `ready` with metadata or `needs_revision` with admission feedback and a dynamic recovery form; model failures throw for retry |
|
|
195
195
|
| `scoreIntent(content, profileContext?)` | Measure saved text without admission filters; a negative verdict still returns metadata |
|
|
196
196
|
| `Intents.normalizeDescription(description)` | Normalize an explicit update description; creation preserves text verbatim |
|
|
197
197
|
|
|
198
198
|
Creation with `inputContent` prepares the description once and persists that exact
|
|
199
|
-
text in a new record, even if a similar
|
|
199
|
+
text in a new record, even if a similar intent exists. Guided hosts call `prepare`
|
|
200
200
|
until it returns `ready`, then issue their own authenticated preparation receipt
|
|
201
201
|
bound to the owner and admitted draft. After authenticating the receipt, pass
|
|
202
202
|
`preparation: { metadata }` to `createGraph().invoke()` alongside the final
|
|
@@ -214,7 +214,7 @@ membership remain the host's responsibility.
|
|
|
214
214
|
## Networks
|
|
215
215
|
|
|
216
216
|
Communities ship the same way: one class covering the community lifecycle graph,
|
|
217
|
-
the membership graph, and
|
|
217
|
+
the membership graph, and intent↔community assignment.
|
|
218
218
|
|
|
219
219
|
```typescript
|
|
220
220
|
import { Networks } from "@indexnetwork/protocol";
|
|
@@ -231,9 +231,9 @@ construction never fails.
|
|
|
231
231
|
|---|---|
|
|
232
232
|
| `createGraph()` | Compile the community lifecycle graph — create, read, update, delete. Requires `database` |
|
|
233
233
|
| `createMembershipGraph()` | Compile the roster graph — add, list, remove members. Requires `database` |
|
|
234
|
-
| `createAssignmentGraph()` | Compile
|
|
234
|
+
| `createAssignmentGraph()` | Compile intent↔community assignment — link and unlink. Requires `database` |
|
|
235
235
|
|
|
236
|
-
Assignment applies no scoring policy: a link exists because the
|
|
236
|
+
Assignment applies no scoring policy: a link exists because the intent's owner
|
|
237
237
|
asked for it, so the row is written at score 1 with `mode: manual_override`.
|
|
238
238
|
|
|
239
239
|
## The REST API and the CLI
|