instar 1.3.1321 → 1.3.1323

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +20 -1
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  5. package/dist/core/PostUpdateMigrator.js +27 -0
  6. package/dist/core/PostUpdateMigrator.js.map +1 -1
  7. package/dist/data/standards-guard-index.json +1 -1
  8. package/dist/data/standards-guard-index.meta.json +2 -2
  9. package/dist/data/standards-registry.meta.json +1 -1
  10. package/dist/scaffold/templates.d.ts.map +1 -1
  11. package/dist/scaffold/templates.js +13 -0
  12. package/dist/scaffold/templates.js.map +1 -1
  13. package/dist/server/AgentServer.d.ts +3 -0
  14. package/dist/server/AgentServer.d.ts.map +1 -1
  15. package/dist/server/AgentServer.js +3 -0
  16. package/dist/server/AgentServer.js.map +1 -1
  17. package/dist/server/middleware.d.ts +13 -0
  18. package/dist/server/middleware.d.ts.map +1 -1
  19. package/dist/server/middleware.js +21 -0
  20. package/dist/server/middleware.js.map +1 -1
  21. package/dist/server/routes.d.ts +2 -0
  22. package/dist/server/routes.d.ts.map +1 -1
  23. package/dist/server/routes.js +233 -71
  24. package/dist/server/routes.js.map +1 -1
  25. package/dist/threadline/A2ADeliveryTracker.d.ts +59 -2
  26. package/dist/threadline/A2ADeliveryTracker.d.ts.map +1 -1
  27. package/dist/threadline/A2ADeliveryTracker.js +193 -21
  28. package/dist/threadline/A2ADeliveryTracker.js.map +1 -1
  29. package/dist/threadline/ListenerSessionManager.d.ts.map +1 -1
  30. package/dist/threadline/ListenerSessionManager.js +7 -0
  31. package/dist/threadline/ListenerSessionManager.js.map +1 -1
  32. package/dist/threadline/ThreadlineBootstrap.d.ts +9 -0
  33. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  34. package/dist/threadline/ThreadlineBootstrap.js +33 -3
  35. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  36. package/dist/threadline/ThreadlineMCPServer.d.ts +8 -0
  37. package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
  38. package/dist/threadline/ThreadlineMCPServer.js +8 -0
  39. package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
  40. package/dist/threadline/client/RelayClient.d.ts.map +1 -1
  41. package/dist/threadline/client/RelayClient.js +15 -0
  42. package/dist/threadline/client/RelayClient.js.map +1 -1
  43. package/dist/threadline/client/ThreadlineClient.d.ts +49 -0
  44. package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
  45. package/dist/threadline/client/ThreadlineClient.js +169 -0
  46. package/dist/threadline/client/ThreadlineClient.js.map +1 -1
  47. package/dist/threadline/honestDeliveryWiring.d.ts +55 -0
  48. package/dist/threadline/honestDeliveryWiring.d.ts.map +1 -0
  49. package/dist/threadline/honestDeliveryWiring.js +142 -0
  50. package/dist/threadline/honestDeliveryWiring.js.map +1 -0
  51. package/dist/threadline/mcp-http-client.d.ts.map +1 -1
  52. package/dist/threadline/mcp-http-client.js +12 -2
  53. package/dist/threadline/mcp-http-client.js.map +1 -1
  54. package/dist/threadline/relayConnectionObserver.d.ts.map +1 -1
  55. package/dist/threadline/relayConnectionObserver.js +10 -3
  56. package/dist/threadline/relayConnectionObserver.js.map +1 -1
  57. package/dist/threadline/relayVerdict.d.ts +49 -0
  58. package/dist/threadline/relayVerdict.d.ts.map +1 -0
  59. package/dist/threadline/relayVerdict.js +70 -0
  60. package/dist/threadline/relayVerdict.js.map +1 -0
  61. package/package.json +1 -1
  62. package/src/data/builtin-manifest.json +64 -64
  63. package/src/data/standards-guard-index.json +1 -1
  64. package/src/data/standards-guard-index.meta.json +2 -2
  65. package/src/data/standards-registry.meta.json +1 -1
  66. package/src/scaffold/templates.ts +13 -0
  67. package/upgrades/1.3.1322.md +29 -0
  68. package/upgrades/1.3.1323.md +31 -0
  69. package/upgrades/a2a-honest-delivery-outcomes.eli16.md +7 -0
  70. package/upgrades/relay-displaced-reclaim.eli16.md +12 -0
  71. package/upgrades/side-effects/a2a-honest-delivery-outcomes.md +46 -0
  72. package/upgrades/side-effects/relay-displaced-reclaim.md +24 -0
@@ -1 +1 @@
1
- {"version":3,"file":"relayConnectionObserver.js","sourceRoot":"","sources":["../../src/threadline/relayConnectionObserver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AA4B7B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,SAAS,WAAW,CAAC,MAAe;IAClC,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAwB,EACxB,IAOC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,IAAI,SAAS,GAAgC,IAAI,CAAC;IAElD,MAAM,MAAM,GAAG,CAAC,KAAoC,EAAE,MAAe,EAAE,QAAiB,EAAQ,EAAE;QAChG,MAAM,KAAK,GAAyB;YAClC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,KAAK;YACL,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;YAC5C,QAAQ;SACT,CAAC;QACF,SAAS,GAAG,KAAK,CAAC;QAElB,4EAA4E;QAC5E,yEAAyE;QACzE,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CACN,2EAA2E,KAAK,CAAC,MAAM,IAAI;kBACzF,oFAAoF;kBACpF,4BAA4B,CAC/B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,oCAAoC,KAAK,CAAC,MAAM,mCAAmC,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,EAAE,CAAC,cAAc,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,+BAA+B,CAAC,EACvD,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAC5B,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2EAA2E;YAC3E,4CAA4C;YAC5C,QAAQ,CAAC,sCAAsC,KAAK,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAE/E,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"relayConnectionObserver.js","sourceRoot":"","sources":["../../src/threadline/relayConnectionObserver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * relayVerdict — the fixed vocabulary the sender uses for what the relay said
3
+ * about one message (docs/specs/a2a-honest-delivery-outcomes.md §1).
4
+ *
5
+ * The relay's `ack` / `delivery_expired` / `error` frames carry human-readable
6
+ * prose. None of that prose may reach an agent's context (a separately hosted
7
+ * service writing into a model's input is an injection path), so every reason
8
+ * is mapped HERE to a fixed code by prefix, and the raw string is clamped and
9
+ * kept for the tracker + audit log only. The prefix table is a BRIDGE until the
10
+ * relay carries a structured code (ACT-017): an unmapped reason is `unmapped`
11
+ * with UNKNOWN retryability — never a guess in either direction.
12
+ */
13
+ export type RelayVerdictStatus = 'delivered' | 'queued' | 'rejected' | 'expired' | 'unconfirmed';
14
+ export type RelayReasonCode = 'queue-full' | 'rate-limited' | 'routing-refused' | 'banned' | 'unmapped';
15
+ export interface RelayVerdict {
16
+ messageId: string;
17
+ status: RelayVerdictStatus;
18
+ /** Fixed code (§1 table). Present for `rejected`, `unconfirmed`(banned) and when the relay sent a reason. */
19
+ reasonCode?: RelayReasonCode;
20
+ /** Clamped relay text — tracker/audit only, never returned to an agent. */
21
+ reason?: string;
22
+ /** `true` = a later resend may succeed; `false` = it will not; `null` = unknown (`unmapped`). */
23
+ retryLater?: boolean | null;
24
+ /** Seconds the relay will hold a `queued` message (clamped by the consumer). */
25
+ ttlSec?: number;
26
+ /** For `expired`: the recipient the relay discarded the copy for. */
27
+ recipientId?: string;
28
+ }
29
+ /** Max chars of relay prose kept anywhere. */
30
+ export declare const RELAY_REASON_MAX_CHARS = 200;
31
+ /** Relay-hold ceiling the consumer trusts (seconds). */
32
+ export declare const RELAY_TTL_CLAMP_SEC: number;
33
+ /** Strip control, bidi and zero-width characters, then clamp. */
34
+ export declare function clampRelayReason(raw: unknown): string | undefined;
35
+ export interface MappedReason {
36
+ code: RelayReasonCode;
37
+ retryLater: boolean | null;
38
+ /** True when no prefix matched (the drift signal). */
39
+ unmapped: boolean;
40
+ }
41
+ /** Map relay prose to a fixed code. Any other router reason is `routing-refused`; an empty/absent reason is `unmapped`. */
42
+ export declare function mapRelayReason(raw: unknown): MappedReason;
43
+ /** Clamp a relay `ttl` (seconds). Absent / non-finite / negative → the default hold (24 h). */
44
+ export declare function clampRelayTtlSec(ttl: unknown): number;
45
+ /** Whole hours the relay will hold a queued message, from the CLAMPED ttl. */
46
+ export declare function relayHoldHours(ttl: unknown): number;
47
+ /** Exact wire value of the relay's ban error code (lowercase). */
48
+ export declare const RELAY_BANNED_CODE = "banned";
49
+ //# sourceMappingURL=relayVerdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relayVerdict.d.ts","sourceRoot":"","sources":["../../src/threadline/relayVerdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;AAEjG,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,cAAc,GACd,iBAAiB,GACjB,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,6GAA6G;IAC7G,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,8CAA8C;AAC9C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,wDAAwD;AACxD,eAAO,MAAM,mBAAmB,QAAe,CAAC;AAuBhD,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIjE;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,2HAA2H;AAC3H,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAUzD;AAED,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIrD;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,WAAW,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * relayVerdict — the fixed vocabulary the sender uses for what the relay said
3
+ * about one message (docs/specs/a2a-honest-delivery-outcomes.md §1).
4
+ *
5
+ * The relay's `ack` / `delivery_expired` / `error` frames carry human-readable
6
+ * prose. None of that prose may reach an agent's context (a separately hosted
7
+ * service writing into a model's input is an injection path), so every reason
8
+ * is mapped HERE to a fixed code by prefix, and the raw string is clamped and
9
+ * kept for the tracker + audit log only. The prefix table is a BRIDGE until the
10
+ * relay carries a structured code (ACT-017): an unmapped reason is `unmapped`
11
+ * with UNKNOWN retryability — never a guess in either direction.
12
+ */
13
+ /** Max chars of relay prose kept anywhere. */
14
+ export const RELAY_REASON_MAX_CHARS = 200;
15
+ /** Relay-hold ceiling the consumer trusts (seconds). */
16
+ export const RELAY_TTL_CLAMP_SEC = 24 * 60 * 60;
17
+ /**
18
+ * Prefix table — the relay's actual strings (RelayServer / MessageRouter /
19
+ * AbuseDetector). Order matters only for overlapping prefixes (none today).
20
+ */
21
+ const REASON_PREFIXES = [
22
+ { prefix: 'Offline queue full', code: 'queue-full', retryLater: true },
23
+ { prefix: 'Rate limited', code: 'rate-limited', retryLater: true },
24
+ { prefix: 'New agent rate limit', code: 'rate-limited', retryLater: true },
25
+ { prefix: 'No pending A2A task', code: 'routing-refused', retryLater: false },
26
+ { prefix: 'Duplicate message ID', code: 'routing-refused', retryLater: false },
27
+ { prefix: 'Recipient socket not available', code: 'routing-refused', retryLater: false },
28
+ { prefix: 'Failed to send to recipient', code: 'routing-refused', retryLater: false },
29
+ { prefix: 'Recipient not connected', code: 'routing-refused', retryLater: false },
30
+ { prefix: 'Sender fingerprint mismatch', code: 'routing-refused', retryLater: false },
31
+ { prefix: 'Envelope too large', code: 'routing-refused', retryLater: false },
32
+ ];
33
+ // Control, DEL, zero-width, line/para separators, bidi overrides, isolates, BOM.
34
+ // Built from a string so no literal separator character sits inside a regex.
35
+ const UNSAFE_CHARS = new RegExp('[\\u0000-\\u001f\\u007f\\u200b-\\u200f\\u2028-\\u202e\\u2066-\\u2069\\ufeff]', 'g');
36
+ /** Strip control, bidi and zero-width characters, then clamp. */
37
+ export function clampRelayReason(raw) {
38
+ if (typeof raw !== 'string' || raw.length === 0)
39
+ return undefined;
40
+ const cleaned = raw.replace(UNSAFE_CHARS, '');
41
+ return cleaned.slice(0, RELAY_REASON_MAX_CHARS);
42
+ }
43
+ /** Map relay prose to a fixed code. Any other router reason is `routing-refused`; an empty/absent reason is `unmapped`. */
44
+ export function mapRelayReason(raw) {
45
+ const text = typeof raw === 'string' ? raw.trim() : '';
46
+ if (!text)
47
+ return { code: 'unmapped', retryLater: null, unmapped: true };
48
+ for (const row of REASON_PREFIXES) {
49
+ if (text.startsWith(row.prefix))
50
+ return { code: row.code, retryLater: row.retryLater, unmapped: false };
51
+ }
52
+ // The spec's "any other router reason" row is deliberately NOT a wildcard:
53
+ // only text the relay's router is known to emit maps to routing-refused.
54
+ // Unknown wording is a drift signal, not a refusal class.
55
+ return { code: 'unmapped', retryLater: null, unmapped: true };
56
+ }
57
+ /** Clamp a relay `ttl` (seconds). Absent / non-finite / negative → the default hold (24 h). */
58
+ export function clampRelayTtlSec(ttl) {
59
+ const n = typeof ttl === 'number' ? ttl : Number.NaN;
60
+ if (!Number.isFinite(n) || n < 0)
61
+ return RELAY_TTL_CLAMP_SEC;
62
+ return Math.min(n, RELAY_TTL_CLAMP_SEC);
63
+ }
64
+ /** Whole hours the relay will hold a queued message, from the CLAMPED ttl. */
65
+ export function relayHoldHours(ttl) {
66
+ return Math.max(1, Math.ceil(clampRelayTtlSec(ttl) / 3600));
67
+ }
68
+ /** Exact wire value of the relay's ban error code (lowercase). */
69
+ export const RELAY_BANNED_CODE = 'banned';
70
+ //# sourceMappingURL=relayVerdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relayVerdict.js","sourceRoot":"","sources":["../../src/threadline/relayVerdict.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.1321",
3
+ "version": "1.3.1323",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",