@indexnetwork/protocol 66.0.0-rc.637.1 → 66.0.0-rc.638.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 +74 -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/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
|
@@ -339,7 +339,7 @@ pin a supported release, use `latest`.
|
|
|
339
339
|
- Agent-facing tool descriptions, scope-refusal messages, and `read_docs`
|
|
340
340
|
guidance now say "network" or "community" wherever they said "index".
|
|
341
341
|
- The intent assignment pipeline keeps its verb naming (`getIntentForIndexing`,
|
|
342
|
-
`indexer.graph.ts`, `IndexedIntent`): those describe assigning
|
|
342
|
+
`indexer.graph.ts`, `IndexedIntent`): those describe assigning an intent, not
|
|
343
343
|
the community noun.
|
|
344
344
|
|
|
345
345
|
## 48.1.0 - 2026-09-04
|
|
@@ -359,7 +359,7 @@ pin a supported release, use `latest`.
|
|
|
359
359
|
### Added
|
|
360
360
|
|
|
361
361
|
- **`Intents.clarify({ payload, answers? })` → `{ payload, questions }`.** One
|
|
362
|
-
stateless round of
|
|
362
|
+
stateless round of intent clarification: with no answers it returns the payload
|
|
363
363
|
untouched plus the questions worth asking; with answers it rewrites the payload
|
|
364
364
|
so those answers are stated in it and returns whatever is still open. Nothing
|
|
365
365
|
is stored, so skipping is always valid. `ClarifyAnswer`, `ClarifyInput`,
|
|
@@ -372,14 +372,14 @@ pin a supported release, use `latest`.
|
|
|
372
372
|
`FollowUpPlan`, `SynthesisInput` and `SynthesisResult` are removed along with
|
|
373
373
|
the pack generator and intake orchestrator. Clarification is `clarify` now, and
|
|
374
374
|
it holds no run state — hosts can drop their intake pack and run storage.
|
|
375
|
-
- **BREAKING:
|
|
375
|
+
- **BREAKING: intents are no longer proposed before they are created.** The
|
|
376
376
|
dry-run branch of `create_intent`, the `intent_proposal` fence it emitted and
|
|
377
377
|
the `autoApprove` argument are gone. `create_intent({ description, networkIds })`
|
|
378
378
|
persists directly, so hosts can drop their proposal storage and their confirm
|
|
379
379
|
and reject endpoints.
|
|
380
380
|
- **BREAKING: networks are no longer assigned by a model.** `IntentNetworkIndexer`,
|
|
381
381
|
`IntentIndexingResult`, `Intents.indexIntent` and the evaluated branch of the
|
|
382
|
-
indexer graph are removed, and so is the threshold scoring behind them.
|
|
382
|
+
indexer graph are removed, and so is the threshold scoring behind them. An intent
|
|
383
383
|
reaches exactly the networks its owner names on create or links afterwards with
|
|
384
384
|
`create_intent_index`.
|
|
385
385
|
- **BREAKING: agents no longer have transports.** `AgentTransportRecord`,
|
|
@@ -517,7 +517,7 @@ No aliases or compatibility shims: hosts must drop the deleted ports.
|
|
|
517
517
|
refs and the `personal-agent.e2e` spec — are deleted. Index no longer runs an
|
|
518
518
|
agent; a host that wants one builds it as a client over REST/MCP.
|
|
519
519
|
- **BREAKING: `ChatGraph` and the whole chat capability are gone.**
|
|
520
|
-
`ChatGraphFactory`, `ChatAgent`, the personas (`
|
|
520
|
+
`ChatGraphFactory`, `ChatAgent`, the personas (`INTENT_PERSONA`,
|
|
521
521
|
`ONBOARDING_PERSONA`, `withPersona`), the streamer, suggester, summarizer,
|
|
522
522
|
title generator, interrupt classifier, question-dedup, chat state/tools/utils
|
|
523
523
|
and the chat-streaming types no longer exist. There is no H2A chat runtime in
|
|
@@ -727,14 +727,14 @@ remains.
|
|
|
727
727
|
|
|
728
728
|
- **`NegotiationGraph` refuses to open an opportunity whose introducers have
|
|
729
729
|
not all approved it.** The gate now lives on the write, not only where
|
|
730
|
-
discovery decides which
|
|
730
|
+
discovery decides which intents to wake, so no caller can reach past it.
|
|
731
731
|
- **New negotiation pause reason `open_failed`.** `NEGOTIATION_PAUSE_REASONS`
|
|
732
732
|
gains it, and `{ negotiationId, pause }` now accepts
|
|
733
733
|
`NegotiationSystemPauseReason` (`'counterparty_silent' | 'open_failed'`)
|
|
734
734
|
rather than the single literal. A kickoff whose open failed after `init`
|
|
735
735
|
created the task compensates it into this pause, so the round's active count
|
|
736
736
|
can still reach zero. Unlike `turn_cap` it stays re-kickable.
|
|
737
|
-
- **A negotiation binds
|
|
737
|
+
- **A negotiation binds an intent PER SEAT.** `NegotiationTaskMetadata.intentId`
|
|
738
738
|
and `.round` are replaced by `seats: Record<string, NegotiationSeatBinding>`
|
|
739
739
|
keyed by intent id (`{ userId, round }`), and `setNegotiationRound` becomes
|
|
740
740
|
`bindNegotiationSeat(taskId, intentId, binding)`. Both sides' IS-A can now
|
|
@@ -750,7 +750,7 @@ remains.
|
|
|
750
750
|
the caller's own brief only. The `brief` on the graph's open/resume inputs is
|
|
751
751
|
the INITIATING seat's, never the counterparty's.
|
|
752
752
|
- **`NegotiationGraphDatabase` gains `getPausedNegotiationTasksForIntent`** —
|
|
753
|
-
the
|
|
753
|
+
the intent-scoped read of every paused, unresolved negotiation. Reflect
|
|
754
754
|
reasons over that, not over one round: a negotiation a later kickoff left
|
|
755
755
|
behind keeps its old round, and a round-scoped read hid it from every future
|
|
756
756
|
verdict.
|
|
@@ -765,11 +765,11 @@ remains.
|
|
|
765
765
|
`END` without it, so a chat- or MCP-run discovery persists matches nobody is
|
|
766
766
|
woken for.
|
|
767
767
|
- **`PersonalAgentDeps` gains `wakeForMatches`** — the agent wakes its own
|
|
768
|
-
|
|
768
|
+
intent again for a discovery batch that landed after the turn read its match
|
|
769
769
|
list.
|
|
770
770
|
- **The retired `queueNegotiateExisting` host callback is removed** from
|
|
771
771
|
`ToolDeps` and `OpportunityGraphFactory`. Approving the final introducer
|
|
772
|
-
gate emits `matches_ready` for the source participant's bound
|
|
772
|
+
gate emits `matches_ready` for the source participant's bound intent; it
|
|
773
773
|
never directly opens or resumes a negotiation.
|
|
774
774
|
|
|
775
775
|
- **AgentGraph: one PersonalAgent, routed on the shape of its input.** New
|
|
@@ -781,7 +781,7 @@ remains.
|
|
|
781
781
|
what ACT does. IS-A's verbs are `message_user`, `ask`, `kickoff`, `promote`,
|
|
782
782
|
`reject`, `note_dossier`, `retire_dossier`, `accept_opportunity`; there is
|
|
783
783
|
no `wait`. Asking BLOCKS acting: a turn that asks executes no verdicts and
|
|
784
|
-
starts no negotiations. The host implements the ports (
|
|
784
|
+
starts no negotiations. The host implements the ports (intent DM, dossier,
|
|
785
785
|
act ledger, reply transport, the owner's accept path, matches list).
|
|
786
786
|
- **The interim `NegotiationAuthor` is deleted.** `NegotiationGraphDeps.author`
|
|
787
787
|
is now a required `NegotiationTurnAuthor` port taking ids only
|
|
@@ -790,15 +790,15 @@ remains.
|
|
|
790
790
|
Removed exports: `NegotiationAuthor`, `NegotiationAuthorInput`.
|
|
791
791
|
- **Discovery no longer opens negotiations.** The opportunity graph's
|
|
792
792
|
`negotiate` node is replaced by a `matches_ready` node that emits ONE event
|
|
793
|
-
per
|
|
794
|
-
callback; the
|
|
793
|
+
per intent per persisted batch through the new `MatchesReadyFn` host
|
|
794
|
+
callback; the intent's PersonalAgent decides whether to reach out at all.
|
|
795
795
|
`OpportunityGraphFactory`'s sixth constructor argument changes from
|
|
796
796
|
`negotiationGraph` to `matchesReady`, and `ToolFactory`/`ToolDeps` gain
|
|
797
797
|
`matchesReady`. The tool factory no longer builds a second, reflect-less
|
|
798
798
|
negotiation graph: without the host's own composition there is no
|
|
799
799
|
negotiation graph in that context at all.
|
|
800
800
|
- **The all-paused → reflect trigger is gated on a round-size stamp.**
|
|
801
|
-
`NegotiationRoundReflectJobData` gains `userId` (the
|
|
801
|
+
`NegotiationRoundReflectJobData` gains `userId` (the intent's owner, so the
|
|
802
802
|
consumer can invoke the PersonalAgent). `NegotiationGraphDatabase` gains
|
|
803
803
|
`getNegotiationTasksForIntentRound`, `getIntentNegotiationRound` and
|
|
804
804
|
`stampIntentNegotiationRoundSize`, and `bumpIntentNegotiationRound` must now
|
|
@@ -835,13 +835,13 @@ remains.
|
|
|
835
835
|
|
|
836
836
|
### Changed
|
|
837
837
|
|
|
838
|
-
- **One PersonalAgent persona.** The
|
|
838
|
+
- **One PersonalAgent persona.** The intent, onboarding, and negotiator chat
|
|
839
839
|
personas collapse into a single `createPersonalAgentPersona(identity)`
|
|
840
840
|
factory with `PERSONAL_AGENT_PERSONA_ID = 'personal'`. What a turn may do is
|
|
841
841
|
derived from the session's resolved scope context, never from a persona id;
|
|
842
842
|
the onboarding prompt/toolset is a fragment selected by incomplete-onboarding
|
|
843
843
|
session state on truly unscoped sessions only. Removed exports:
|
|
844
|
-
`
|
|
844
|
+
`INTENT_PERSONA_ID`, `createIntentPersona`, `ONBOARDING_PERSONA_ID`,
|
|
845
845
|
`createOnboardingPersona`, `NEGOTIATOR_PERSONA_ID`, `PersonalAgentChat`,
|
|
846
846
|
`PersonalAgentChatDeps`. The negotiator persona (prompt, chat toolset, and
|
|
847
847
|
its `remember`/`forget` chat tools plus the `negotiatorMemoryTools` host
|
|
@@ -923,7 +923,7 @@ remains.
|
|
|
923
923
|
client answered the one question the initiator paused to ask, the resumed
|
|
924
924
|
turn-0 decision was entirely re-drafted: an agent that still held a
|
|
925
925
|
withdraw-worthy concern it never asked the client about (e.g. a location
|
|
926
|
-
preference read from the profile rather than the
|
|
926
|
+
preference read from the profile rather than the intent) could withdraw
|
|
927
927
|
anyway, seconds after the client answered the thing it did ask, with the
|
|
928
928
|
counterparty never contacted. Now, if the resumed turn drafts `withdraw`
|
|
929
929
|
and the dimension actually asked about reconciled to `ok`, the graph
|
|
@@ -1005,7 +1005,7 @@ remains.
|
|
|
1005
1005
|
|
|
1006
1006
|
- **BREAKING: the intent graph routes on the shape of its input, not an
|
|
1007
1007
|
`operationMode` flag.** `operationMode` is gone from the graph's invoke
|
|
1008
|
-
input. Callers now
|
|
1008
|
+
input. Callers now express intent by which fields they set:
|
|
1009
1009
|
`inputContent` alone creates; `inputContent` + `targetIntentIds` is an
|
|
1010
1010
|
explicit update; `targetIntentIds` + `archive: true` expires; `targetIntentIds`
|
|
1011
1011
|
+ `status` pauses/resumes; `proposalId` (+ `description`, `networkId`)
|
|
@@ -1077,7 +1077,7 @@ remains.
|
|
|
1077
1077
|
the deterministic consultation policy are on; deadlock-shift is on; the
|
|
1078
1078
|
negotiator drafts in the `skeptic` stance (`advocate` and `evaluator`, and the
|
|
1079
1079
|
`stance*` predicates that distinguished them, are gone); negotiators receive
|
|
1080
|
-
only each participant's exact opportunity-bound
|
|
1080
|
+
only each participant's exact opportunity-bound intent; HyDE generates under
|
|
1081
1081
|
`frame-v1`; candidate evaluation runs in parallel; retrieval floor is `0.20`
|
|
1082
1082
|
and the evaluator score floor is `40`; the two question miners are pinned to
|
|
1083
1083
|
`shadow`.
|
|
@@ -1163,7 +1163,7 @@ remains.
|
|
|
1163
1163
|
- **Persona identity + create_intent scope rule (#1479) — the version stamp
|
|
1164
1164
|
the change shipped without.** Every chat persona now introduces itself as
|
|
1165
1165
|
the user's own agent: `buildAgentSelfIntroduction`, plus
|
|
1166
|
-
`
|
|
1166
|
+
`createIntentPersona` / `createOnboardingPersona` factories taking
|
|
1167
1167
|
`agentName` the way the negotiator already did. Tool registration gained
|
|
1168
1168
|
the scope rule (`isToolAllowedInScope`, `filterToolsForScope`). #1479
|
|
1169
1169
|
merged these exports without bumping, so two different export surfaces
|
|
@@ -1203,11 +1203,11 @@ remains.
|
|
|
1203
1203
|
- **An answer beats staleness — drift is logged, never fatal.** Observed live:
|
|
1204
1204
|
a client answered her own parked question ("Timing: This week") through the
|
|
1205
1205
|
new MCP answer lane, routing succeeded, consumption ran — and the settle
|
|
1206
|
-
returned `lost`, because the
|
|
1206
|
+
returned `lost`, because the intent had been edited twice since the park and
|
|
1207
1207
|
the revalidation fence required the world to look exactly as it did at park
|
|
1208
1208
|
time. The park became a zombie: still `input_required`, still rendered as
|
|
1209
1209
|
"waiting on YOUR answer" by every surface, structurally unanswerable. The
|
|
1210
|
-
design law is explicit:
|
|
1210
|
+
design law is explicit: intent edits cascade nothing, and a stale negotiation
|
|
1211
1211
|
is solved by ANSWERING its question — the user's answer is the freshest
|
|
1212
1212
|
commitment there is, and the resumed turn rebuilds its context from current
|
|
1213
1213
|
data anyway.
|
|
@@ -1215,16 +1215,16 @@ remains.
|
|
|
1215
1215
|
The settle's one fence is now two. Coherence stays hard: an answer that does
|
|
1216
1216
|
not belong to its park (settlement mismatch, wrong recipient, task no longer
|
|
1217
1217
|
parked, a dismiss/timeout settlement won the race) is still refused. Drift
|
|
1218
|
-
stops losing: within a live opportunity and an active
|
|
1218
|
+
stops losing: within a live opportunity and an active intent, the answer
|
|
1219
1219
|
settles and resumes regardless of what moved since the park.
|
|
1220
1220
|
|
|
1221
1221
|
- **The unresumable tail is an explicit proposal, not a silent drop.** When
|
|
1222
1222
|
current reality genuinely cannot continue — terminal opportunity or archived
|
|
1223
|
-
|
|
1223
|
+
intent — the answer is still recorded as heard: settlement result and resume
|
|
1224
1224
|
outcome `recorded_unresumable` (additive), the block-consumption result
|
|
1225
1225
|
counts it in its own `recorded` array so a `skipped` count can never again
|
|
1226
1226
|
hide it, and the implementation retires the park and tells the client the
|
|
1227
|
-
truth, proposing re-discovery under the updated
|
|
1227
|
+
truth, proposing re-discovery under the updated intent — an offer, never an
|
|
1228
1228
|
automatic act.
|
|
1229
1229
|
|
|
1230
1230
|
## 23.6.0 - 2026-08-20
|
|
@@ -1370,14 +1370,14 @@ remains.
|
|
|
1370
1370
|
### Added
|
|
1371
1371
|
|
|
1372
1372
|
- **The owner's verdict has a lane in their own DM.** Observed live: in the
|
|
1373
|
-
negotiator DM for one
|
|
1373
|
+
negotiator DM for one intent, a client told their agent to reject the
|
|
1374
1374
|
counterparty — a pairing parked `input_required`. The agent could not comply.
|
|
1375
1375
|
The owner makes exactly three kinds of decision in that room. They ANSWER a
|
|
1376
1376
|
question a parked negotiation asked, which `answer_pending_question` gave a
|
|
1377
|
-
lane. They EDIT the
|
|
1377
|
+
lane. They EDIT the intent, which `update_intent` always covered.
|
|
1378
1378
|
And they pass a VERDICT on a counterparty, which had no lever at all. So on
|
|
1379
1379
|
"reject them" the persona's whole repertoire was to say something back, or to
|
|
1380
|
-
edit the
|
|
1380
|
+
edit the intent instead; the pairing stayed parked and the counterparty
|
|
1381
1381
|
stayed live.
|
|
1382
1382
|
|
|
1383
1383
|
`update_opportunity` is in the negotiator toolset and cannot substitute for
|
|
@@ -1397,7 +1397,7 @@ remains.
|
|
|
1397
1397
|
cannot see them. `NegotiatorVerdictToolsHost` is the whole surface the package
|
|
1398
1398
|
knows; the composition root owns everything behind it.
|
|
1399
1399
|
|
|
1400
|
-
- **Numbered refs, never ids.** The prompt renders this
|
|
1400
|
+
- **Numbered refs, never ids.** The prompt renders this intent's actionable
|
|
1401
1401
|
counterparties as `N. {name} — {state}`, and the tool takes the number. The
|
|
1402
1402
|
schema offers no place to put an id and no result string carries one. The rule
|
|
1403
1403
|
is `answer_pending_question`'s, for a sharper reason: a ref the model can name
|
|
@@ -1412,18 +1412,18 @@ remains.
|
|
|
1412
1412
|
|
|
1413
1413
|
### Changed
|
|
1414
1414
|
|
|
1415
|
-
- **The pinned-
|
|
1415
|
+
- **The pinned-intent prompt gains a verdict section, and only where the tools
|
|
1416
1416
|
exist.** `NegotiatorPromptOptions.actionableCounterparties` renders
|
|
1417
1417
|
`## Verdicts {userName} can pass here` plus two tool-reference rows. It says
|
|
1418
1418
|
the tool call IS the decision — not the sentence about it, and not an edit of
|
|
1419
|
-
the
|
|
1419
|
+
the intent; that a verdict the client did not pass must never be passed for
|
|
1420
1420
|
them; that `update_opportunity` is not this lever; and that an accept is one
|
|
1421
1421
|
side of two and never a connection. Rendered only in an intent-pinned session
|
|
1422
1422
|
with a non-empty list, since that is the only place the tools are registered.
|
|
1423
1423
|
Absent or empty leaves the prompt byte-identical to 23.4.0.
|
|
1424
1424
|
|
|
1425
1425
|
- **Result copy is honest at every status.** `executed` names the counterparty
|
|
1426
|
-
and forbids also editing the
|
|
1426
|
+
and forbids also editing the intent; `none_actionable` forbids implying a
|
|
1427
1427
|
decision was recorded; `unknown_counterparty` states plainly that nothing was
|
|
1428
1428
|
decided and re-lists the current set; `already_decided` says whose move it is;
|
|
1429
1429
|
`error` forbids describing the pairing as decided. A host that throws is
|
|
@@ -1592,7 +1592,7 @@ remains.
|
|
|
1592
1592
|
### Changed
|
|
1593
1593
|
|
|
1594
1594
|
- **A verdict has a floor under it: an askable unknown outranks a conclusion.**
|
|
1595
|
-
Every stage of the flow —
|
|
1595
|
+
Every stage of the flow — intent, discovery, agents talking, match, meet — was
|
|
1596
1596
|
verified working except one arrow: the agent asking its own client something
|
|
1597
1597
|
only that client can settle. In a week of live traffic it fired zero times,
|
|
1598
1598
|
against 23 policy-recognized consultation moments. The reason is structural
|
|
@@ -1664,7 +1664,7 @@ remains.
|
|
|
1664
1664
|
settle, so an open dimension on turn 0 is the shape the protocol asked for, not
|
|
1665
1665
|
a dodge — and a floor that bound there would park every negotiation before it
|
|
1666
1666
|
ever made contact. Turn 0 already has its own designed consult, the pre-contact
|
|
1667
|
-
verdict, bounded per
|
|
1667
|
+
verdict, bounded per intent.
|
|
1668
1668
|
|
|
1669
1669
|
- **The verdict prompt's escape hatch is now conditional.** "What remains unknown
|
|
1670
1670
|
is the kind of thing two people settle in a first conversation" waved verdicts
|
|
@@ -1682,7 +1682,7 @@ remains.
|
|
|
1682
1682
|
### Fixed
|
|
1683
1683
|
|
|
1684
1684
|
- **No turn may repeat a message already on the record.** A counterparty asked what
|
|
1685
|
-
a phrase in the client's own
|
|
1685
|
+
a phrase in the client's own intent meant; the answering agent could not consult
|
|
1686
1686
|
its (unreachable) principal and its record did not settle the phrase, so with no
|
|
1687
1687
|
legal move left it copied the question back word for word. Both models then
|
|
1688
1688
|
locked — reproducing text already in context is close to deterministic — and the
|
|
@@ -1702,7 +1702,7 @@ remains.
|
|
|
1702
1702
|
`PRINCIPAL_UNREACHABLE_RULE` said never stall and never route the client's
|
|
1703
1703
|
question to the other side, but named no move for the case that occurred: the
|
|
1704
1704
|
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
|
|
1705
|
+
settle. The rule now says to state the limit of the record — "X's intent says
|
|
1706
1706
|
Y; it does not specify further" is a complete answer — and to let the
|
|
1707
1707
|
counterparty score that dimension unknown, never repeating or mirroring their
|
|
1708
1708
|
question and never inventing an answer the record does not hold.
|
|
@@ -1757,7 +1757,7 @@ remains.
|
|
|
1757
1757
|
|
|
1758
1758
|
### Fixed
|
|
1759
1759
|
|
|
1760
|
-
- **Retrieval scores no longer clamp at a flat ceiling.** The multi-
|
|
1760
|
+
- **Retrieval scores no longer clamp at a flat ceiling.** The multi-intent bonus in
|
|
1761
1761
|
`mergeStrategyCandidates` was added to the raw similarity and then clamped
|
|
1762
1762
|
(`Math.min(raw + boost, 1)`), so candidates found by enough strategies all landed
|
|
1763
1763
|
on exactly 1.0. Candidates enter evaluation strictly by rank, so a head cluster of
|
|
@@ -1847,7 +1847,7 @@ remains.
|
|
|
1847
1847
|
|
|
1848
1848
|
- **The QuestionerAgent generation half** (conversational-questions plan,
|
|
1849
1849
|
"Retirements"). Questions are conversation: the parked negotiation is the
|
|
1850
|
-
durable record and the question-message in the
|
|
1850
|
+
durable record and the question-message in the intent's DM is its
|
|
1851
1851
|
rendering, so the card generators go. Removed: `QuestionerAgent`,
|
|
1852
1852
|
`question.presets`, the blocking chat `ask_user_question` tool and its
|
|
1853
1853
|
`ChatQuestionsHost` bridge (with the `user_question` stream event and the
|
|
@@ -1862,8 +1862,8 @@ remains.
|
|
|
1862
1862
|
|
|
1863
1863
|
### Changed
|
|
1864
1864
|
|
|
1865
|
-
- The
|
|
1866
|
-
guided New
|
|
1865
|
+
- The intent and onboarding personas interview in plain conversation: the
|
|
1866
|
+
guided New Intent intake drops its blocking question-card rounds, and its
|
|
1867
1867
|
stage machine reduces to interview → complete (`create_intent` is the only
|
|
1868
1868
|
remaining stage marker).
|
|
1869
1869
|
|
|
@@ -1996,7 +1996,7 @@ same 44 names as before. Only paths private to the capability moved.
|
|
|
1996
1996
|
|
|
1997
1997
|
- **BREAKING**: The `intents` capability now ships as a single class. `Intents`
|
|
1998
1998
|
replaces `IntentGraphFactory`, `SemanticVerifier`, `IntentIndexer`,
|
|
1999
|
-
`
|
|
1999
|
+
`IntentIntakePackGenerator`, `IntentIntakeOrchestrator`,
|
|
2000
2000
|
`normalizeIntentDescription`, and `FALLBACK_WHO_QUESTION`, all of which are
|
|
2001
2001
|
no longer exported. Dependencies move from positional constructor arguments
|
|
2002
2002
|
to a named `IntentsDeps` bag, and every field is optional — a host that wants
|
|
@@ -2007,9 +2007,9 @@ same 44 names as before. Only paths private to the capability moved.
|
|
|
2007
2007
|
| `new IntentGraphFactory(db, embedder, queue, enqueue).createGraph()` | `new Intents({ database, embedder, queue, questionerEnqueue }).createGraph()` |
|
|
2008
2008
|
| `new SemanticVerifier().invoke(content, context)` | `new Intents().verifyIntent(content, context)` |
|
|
2009
2009
|
| `new IntentIndexer().invoke(...)` / `.evaluate(...)` | `new Intents().indexIntent(...)` |
|
|
2010
|
-
| `new
|
|
2011
|
-
| `new
|
|
2012
|
-
| `new
|
|
2010
|
+
| `new IntentIntakePackGenerator().generate(input)` | `new Intents().generateIntakePack(input)` |
|
|
2011
|
+
| `new IntentIntakeOrchestrator().generateFollowUps(input)` | `new Intents().generateIntakeFollowUps(input)` |
|
|
2012
|
+
| `new IntentIntakeOrchestrator().synthesize(input)` | `new Intents().synthesizeIntake(input)` |
|
|
2013
2013
|
| `normalizeIntentDescription(text)` | `Intents.normalizeDescription(text)` |
|
|
2014
2014
|
| `FALLBACK_WHO_QUESTION` | `Intents.FALLBACK_INTAKE_QUESTION` |
|
|
2015
2015
|
|
|
@@ -2075,7 +2075,7 @@ same 44 names as before. Only paths private to the capability moved.
|
|
|
2075
2075
|
- `ContactServiceAdapter` narrows to `listContacts` / `removeContact` /
|
|
2076
2076
|
`searchContacts`; `importContacts` and `addContact` are gone, along with the
|
|
2077
2077
|
`ContactInput`, `ContactResult` and `ContactImportResult` domain types.
|
|
2078
|
-
- Orchestrator, negotiator,
|
|
2078
|
+
- Orchestrator, negotiator, intent and onboarding prompt surfaces no longer
|
|
2079
2079
|
advertise contact import or Gmail import.
|
|
2080
2080
|
|
|
2081
2081
|
## 16.1.0 - 2026-08-17
|
|
@@ -2142,7 +2142,7 @@ from the package root.
|
|
|
2142
2142
|
(`projectActivitySummary`, `ActivitySummaryResponseSchema`,
|
|
2143
2143
|
`QUESTION_MODE_TO_DOMAIN`, `READ_ACTIVITY_SUMMARY_TOOL_NAME`, …).
|
|
2144
2144
|
- **Persona helpers** — the `filter*Tools` / `narrow*Tools` helpers, the
|
|
2145
|
-
`*_TOOL_NAMES` constants, and the `
|
|
2145
|
+
`*_TOOL_NAMES` constants, and the `INTENT_NEW_INTENT_KICKOFF` /
|
|
2146
2146
|
`ONBOARDING_PROFILE_KICKOFF` constants. The persona IDs, the prompt
|
|
2147
2147
|
constants, and `REPORTER_BRIEFING_KICKOFF` stay — `apps/web` imports the
|
|
2148
2148
|
latter.
|
|
@@ -2154,7 +2154,7 @@ from the package root.
|
|
|
2154
2154
|
slated for removal with the eval harnesses, and this accessor should be
|
|
2155
2155
|
pruned in the same change. These back live Railway configuration and are
|
|
2156
2156
|
unchanged in behaviour; only the re-export is gone.
|
|
2157
|
-
- **
|
|
2157
|
+
- **Intent-intake types** — `IntakePack`, `IntakePackInput`, `SynthesisInput`,
|
|
2158
2158
|
`SynthesisResult`, `FollowUpPlan`, `answerLabel`, `normalizeIntakePack`, …
|
|
2159
2159
|
|
|
2160
2160
|
Two of the removed symbols (`createAgentTools` and
|
|
@@ -2359,7 +2359,7 @@ Directory names only.
|
|
|
2359
2359
|
|
|
2360
2360
|
| before | after |
|
|
2361
2361
|
|---|---|
|
|
2362
|
-
| `
|
|
2362
|
+
| `intents/` | `intents/` |
|
|
2363
2363
|
| `communities/` | `networks/` |
|
|
2364
2364
|
| `opportunity/` | `opportunities/` |
|
|
2365
2365
|
| `negotiation/` | `negotiations/` |
|
|
@@ -2395,7 +2395,7 @@ This is internal structure only.
|
|
|
2395
2395
|
were `*.tools.port.ts` port definitions misfiled into a facade directory. The
|
|
2396
2396
|
ports moved into their capability's `ports/`.
|
|
2397
2397
|
- Removed the nine per-capability `public/index.ts` barrels. Three of them
|
|
2398
|
-
(`
|
|
2398
|
+
(`intents`, `communities`, `opportunity`) already had zero importers.
|
|
2399
2399
|
|
|
2400
2400
|
### Changed
|
|
2401
2401
|
|
|
@@ -2426,7 +2426,7 @@ This is internal structure only.
|
|
|
2426
2426
|
(three pure text predicates, no imports of its own). `negotiation` and
|
|
2427
2427
|
`contacts` needed it and were pulling the whole opportunity capability.
|
|
2428
2428
|
- `UnderspecificationTypeSchema` → `shared/schemas/underspecification.schema.ts`.
|
|
2429
|
-
The
|
|
2429
|
+
The intents clarifier was importing the entire questions capability — LLM
|
|
2430
2430
|
agents and tools included — to reach a three-value enum.
|
|
2431
2431
|
|
|
2432
2432
|
- `CAPABILITY_DIRECTORIES` mapped `questioner` but not `questions`, so every
|
|
@@ -2467,7 +2467,7 @@ commit (`225425371d`) rather than from memory.
|
|
|
2467
2467
|
|
|
2468
2468
|
Production evidence at the time: the orchestrator had written no new session
|
|
2469
2469
|
since 2026-08-04, and the presence of `onboarding`-persona rows showed the
|
|
2470
|
-
|
|
2470
|
+
Intent cutover flag was already on. The 9,464 historical orchestrator
|
|
2471
2471
|
conversations remain readable.
|
|
2472
2472
|
|
|
2473
2473
|
## 13.2.1 - 2026-08-16
|
|
@@ -2482,7 +2482,7 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2482
2482
|
declaration-only placeholders with zero inbound imports; `runtime/background`
|
|
2483
2483
|
and `public` consisted of nothing but a header comment. The only thing
|
|
2484
2484
|
referencing them was a spec asserting that they existed.
|
|
2485
|
-
- Removed eight unused capability barrels (`
|
|
2485
|
+
- Removed eight unused capability barrels (`intents/index.ts`,
|
|
2486
2486
|
`communities/index.ts`, `contacts/index.ts`, `questions/index.ts`,
|
|
2487
2487
|
`opportunity/index.ts`, `negotiation/index.ts`, `integrations/index.ts`,
|
|
2488
2488
|
`participant-agents/index.ts`). Each was `export * from "./public/index.js"`
|
|
@@ -2501,8 +2501,8 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2501
2501
|
`shared/agent/tool.registry.ts` and `shared/agent/tool.factory.ts`, and the
|
|
2502
2502
|
indirection is gone. `mcp.server.ts` was the one direct consumer of the old
|
|
2503
2503
|
location and now resolves to the same single home.
|
|
2504
|
-
- `
|
|
2505
|
-
factory; the `runtime/foreground/
|
|
2504
|
+
- `intents/application/intent.tools.ts` is imported directly by the tool
|
|
2505
|
+
factory; the `runtime/foreground/intents/intent.tools.ts` pass-through
|
|
2506
2506
|
re-export that sat between them is removed.
|
|
2507
2507
|
- Replaced `architecture/tests/runtime-shells.spec.ts` with
|
|
2508
2508
|
`architecture/tests/package-entry.spec.ts`, which asserts the invariants that
|
|
@@ -2631,7 +2631,7 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2631
2631
|
|
|
2632
2632
|
### Removed
|
|
2633
2633
|
|
|
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,
|
|
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, intent and negotiator personas, not just the removed one.
|
|
2635
2635
|
- Remove the never-emitted `question_generator_start` / `question_generator_end` stream events and the `DebugMetaDiscoveryQuestions` debug payload, which had no producer.
|
|
2636
2636
|
|
|
2637
2637
|
### Changed
|
|
@@ -2685,26 +2685,26 @@ No public API change: all 441 exported symbols are byte-identical to 13.2.0, and
|
|
|
2685
2685
|
|
|
2686
2686
|
### Added
|
|
2687
2687
|
- 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
|
|
2688
|
+
- 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
2689
|
- Add the protocol-only Guided Atlas, deterministic architecture inventory
|
|
2690
2690
|
generator, and source-evidenced Configuration Lab. The atlas explains
|
|
2691
2691
|
normative concepts, the current `packages/protocol` reference implementation,
|
|
2692
2692
|
and counterfactual behavior-gate changes, while live environment values and
|
|
2693
2693
|
concrete API or host implementations remain outside its scope. Tooling-only
|
|
2694
2694
|
public-package change; no root export or runtime behavior changes.
|
|
2695
|
-
- Deterministic fast
|
|
2695
|
+
- Deterministic fast intent intake (#1307; 8.1.0). `IntentIntakePackGenerator`
|
|
2696
2696
|
precomputes a per-user intake brief plus round-1 question, and
|
|
2697
|
-
`
|
|
2697
|
+
`IntentIntakeOrchestrator` drives the funnel as a deterministic state machine
|
|
2698
2698
|
on flash instead of sequential pro turns, with synthesis speculated during a
|
|
2699
|
-
deterministic community picker. New stable exports from the `
|
|
2700
|
-
`
|
|
2699
|
+
deterministic community picker. New stable exports from the `intents` facade:
|
|
2700
|
+
`IntentIntakePackGenerator`, `normalizeIntakePack`, `IntentIntakeOrchestrator`,
|
|
2701
2701
|
`answerLabel`, `FALLBACK_WHO_QUESTION`, `FALLBACK_BRING_QUESTION`, and the
|
|
2702
2702
|
`IntakePack` / `IntakePackInput` / `IntakePackQuestion` /
|
|
2703
2703
|
`IntakePackQuestionOption` / `IntakeAnswer` / `SynthesisInput` /
|
|
2704
2704
|
`SynthesisResult` types. Minor bump: additive surface only.
|
|
2705
2705
|
|
|
2706
2706
|
### Changed
|
|
2707
|
-
- Make fast
|
|
2707
|
+
- 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
2708
|
- Remove unsupported deprecated source/deep forwarding shims after migrating repository consumers to canonical modules; stable package-root exports are unchanged.
|
|
2709
2709
|
- Add a fail-closed isolated provider-free test gate (10.1.1). Tooling-only
|
|
2710
2710
|
safety foundation; no runtime or public API behavior changes.
|
|
@@ -2797,12 +2797,12 @@ above. Entries below keep the version they were developed under.
|
|
|
2797
2797
|
- Add canonical shared guidance source and unified MCP_INSTRUCTIONS/read_docs
|
|
2798
2798
|
(IND-602/603; 7.10.0): The single normative `CANONICAL_GUIDANCE_SUMMARY`
|
|
2799
2799
|
(1,555 chars, under the 4,500-char MCP context budget) covers Index Network
|
|
2800
|
-
entity model (identity/context, premises,
|
|
2800
|
+
entity model (identity/context, premises, intents, communities/networks,
|
|
2801
2801
|
opportunities), negotiation semantics with the critical distinction
|
|
2802
2802
|
**"A2A acceptance is not owner approval"** (separate gates), H2A/A2A
|
|
2803
2803
|
workflows, and the boundary **"H2H (human-to-human) never exposed; escalation
|
|
2804
2804
|
to native surfaces (web, Telegram) is outside MCP scope."** Seven detailed
|
|
2805
|
-
canonical topics (identity-context, premises,
|
|
2805
|
+
canonical topics (identity-context, premises, intents, communities-networks,
|
|
2806
2806
|
opportunities, negotiations, workflows) are published via read_docs on both
|
|
2807
2807
|
MCP and REST/chat surfaces. MCP surface read_docs serves canonical guidance
|
|
2808
2808
|
only; REST/chat retains legacy supplemental topics for backwards compatibility.
|
|
@@ -2970,7 +2970,7 @@ above. Entries below keep the version they were developed under.
|
|
|
2970
2970
|
`manage:negotiations`); the handler then passes the typed resolved MCP caller
|
|
2971
2971
|
context into one centralized permission projection, so global agents receive
|
|
2972
2972
|
only the domains their permissions authorize while session humans receive the
|
|
2973
|
-
full owner view.
|
|
2973
|
+
full owner view. Intent IDs/titles (`opportunitiesByIntent`) are exposed only
|
|
2974
2974
|
with `manage:intents`, and question counts are meta-network — never network
|
|
2975
2975
|
filtered — while each count inherits the permission of the domain the
|
|
2976
2976
|
question affects: the adapter groups pending/answered counts by question
|
|
@@ -3165,15 +3165,15 @@ above. Entries below keep the version they were developed under.
|
|
|
3165
3165
|
policy characterization.
|
|
3166
3166
|
- Characterization specs for membership authority (join-policy enforcement,
|
|
3167
3167
|
owner-only removal), privacy/scope intersection (scoped vs unscoped read,
|
|
3168
|
-
`showAll` bypass), and
|
|
3168
|
+
`showAll` bypass), and intent assignment policy (direct / evaluated /
|
|
3169
3169
|
no-prompt fast path, membership re-check at persistence time, unassign
|
|
3170
3170
|
authority).
|
|
3171
3171
|
|
|
3172
3172
|
### Changed
|
|
3173
3173
|
- `capabilities/communities.facade.ts` now imports from
|
|
3174
3174
|
`communities/application/` instead of the old `network/` paths.
|
|
3175
|
-
- `capabilities/
|
|
3176
|
-
`IntentIndexer` from `capabilities/
|
|
3175
|
+
- `capabilities/intents.indexing.facade.ts` updated to import
|
|
3176
|
+
`IntentIndexer` from `capabilities/intents.facade.ts` (canonical) instead
|
|
3177
3177
|
of the legacy `intent/intent.indexer.ts` shim.
|
|
3178
3178
|
- Communities capability boundary script updated: `communities/` directory now
|
|
3179
3179
|
maps to the `communities` capability (alongside legacy `network/`).
|
|
@@ -3292,7 +3292,7 @@ above. Entries below keep the version they were developed under.
|
|
|
3292
3292
|
the graph while retaining its LangGraph node routing and externally visible
|
|
3293
3293
|
lifecycle semantics (IND-530).
|
|
3294
3294
|
- Slice tool-factory dependencies into named capability-owned ports for
|
|
3295
|
-
enrichment,
|
|
3295
|
+
enrichment, intents, communities, opportunities, premises, contacts,
|
|
3296
3296
|
integrations, participant agents, negotiations, and questions. `ToolDeps`
|
|
3297
3297
|
and `ToolContext` remain structurally compatible composition intersections at
|
|
3298
3298
|
registry/runtime boundaries; ports are declared and exported through their
|
|
@@ -3311,20 +3311,20 @@ above. Entries below keep the version they were developed under.
|
|
|
3311
3311
|
- 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
3312
|
|
|
3313
3313
|
### Added
|
|
3314
|
-
- Capability facades for
|
|
3314
|
+
- Capability facades for Intents, Participant context, Communities,
|
|
3315
3315
|
Opportunities, Negotiation, Questions, Participant agents, Contacts, and
|
|
3316
3316
|
Integrations. Cross-capability callers now use named, narrow facade contracts;
|
|
3317
3317
|
the root barrel remains backward compatible and also adds the corresponding
|
|
3318
3318
|
explicit tool-factory entry points. Architecture tooling records every allowed
|
|
3319
3319
|
dependency direction and preserves the in-place directory layout for later
|
|
3320
3320
|
extraction work (IND-528).
|
|
3321
|
-
- Add the private `recovery` Questioner purpose and one-question intent recovery preset for post-discovery
|
|
3321
|
+
- 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
3322
|
- 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-
|
|
3323
|
+
- 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
3324
|
- 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
|
|
3325
|
+
- 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
3326
|
- 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 `
|
|
3327
|
+
- 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
3328
|
- `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
3329
|
- 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
3330
|
- 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 +3356,7 @@ above. Entries below keep the version they were developed under.
|
|
|
3356
3356
|
- 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
3357
|
- 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
3358
|
- 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
|
|
3359
|
+
- 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
3360
|
- 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
3361
|
- 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
3362
|
- 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
|