@tpsdev-ai/flair 0.53.0 → 0.54.2

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 (97) hide show
  1. package/README.md +4 -1
  2. package/dist/build-info.json +3 -3
  3. package/dist/cli.js +1791 -15648
  4. package/dist/commands/agent.js +453 -0
  5. package/dist/commands/attention.js +121 -0
  6. package/dist/commands/backup.js +115 -0
  7. package/dist/commands/bootstrap.js +91 -0
  8. package/dist/commands/bridge.js +608 -0
  9. package/dist/commands/deploy.js +180 -0
  10. package/dist/commands/doctor.js +1665 -0
  11. package/dist/commands/export.js +110 -0
  12. package/dist/commands/federation.js +1575 -0
  13. package/dist/commands/fleet.js +73 -0
  14. package/dist/commands/grant.js +109 -0
  15. package/dist/commands/hook.js +193 -0
  16. package/dist/commands/idp.js +193 -0
  17. package/dist/commands/import.js +134 -0
  18. package/dist/commands/init.js +1203 -0
  19. package/dist/commands/inspect.js +45 -0
  20. package/dist/commands/keys.js +187 -0
  21. package/dist/commands/mcp.js +707 -0
  22. package/dist/commands/memory.js +501 -0
  23. package/dist/commands/migrate-harness-memory.js +270 -0
  24. package/dist/commands/orgevent.js +138 -0
  25. package/dist/commands/presence.js +76 -0
  26. package/dist/commands/principal.js +338 -0
  27. package/dist/commands/quality.js +1164 -0
  28. package/dist/commands/reembed.js +296 -0
  29. package/dist/commands/relationship.js +76 -0
  30. package/dist/commands/rem.js +1048 -0
  31. package/dist/commands/restore.js +130 -0
  32. package/dist/commands/search.js +244 -0
  33. package/dist/commands/service.js +315 -0
  34. package/dist/commands/session.js +184 -0
  35. package/dist/commands/soul.js +155 -0
  36. package/dist/commands/status.js +931 -0
  37. package/dist/commands/test.js +93 -0
  38. package/dist/commands/uninstall.js +143 -0
  39. package/dist/commands/upgrade.js +1628 -0
  40. package/dist/commands/workspace.js +114 -0
  41. package/dist/deploy.js +24 -0
  42. package/dist/engine-version.js +12 -4
  43. package/dist/fabric-npm-install.js +87 -0
  44. package/dist/fabric-upgrade.js +30 -15
  45. package/dist/federation-verify.js +498 -0
  46. package/dist/fleet-verify.js +144 -21
  47. package/dist/install/clients.js +167 -0
  48. package/dist/lib/auth-resolve.js +76 -1
  49. package/dist/lib/daemon-liveness.js +131 -2
  50. package/dist/lib/doctor-config-path.js +61 -0
  51. package/dist/lib/doctor-federation-driver.js +189 -0
  52. package/dist/lib/doctor-run.js +40 -0
  53. package/dist/lib/entity-vocab-cli.js +3 -3
  54. package/dist/lib/federation-pair-identity.js +47 -0
  55. package/dist/lib/launchd-repair.js +5 -4
  56. package/dist/lib/npm-registry.js +578 -0
  57. package/dist/lib/ops-api-bind.js +115 -0
  58. package/dist/lib/owned-pins.js +219 -0
  59. package/dist/lib/uninstall-purge.js +218 -0
  60. package/dist/rem/restore.js +8 -10
  61. package/dist/resources/AgentReadPosition.js +74 -0
  62. package/dist/resources/Federation.js +8 -2
  63. package/dist/resources/Memory.js +4 -3
  64. package/dist/resources/MemoryBootstrap.js +41 -25
  65. package/dist/resources/MemoryCandidate.js +5 -6
  66. package/dist/resources/OrgEventCatchup.js +126 -47
  67. package/dist/resources/agent-read-position-lib.js +83 -0
  68. package/dist/resources/agent-read-position.js +120 -0
  69. package/dist/resources/embeddings-boot.js +32 -0
  70. package/dist/resources/federation-peer-liveness.js +73 -0
  71. package/dist/resources/health.js +68 -19
  72. package/dist/resources/mcp-tools.js +48 -279
  73. package/dist/resources/memory-visibility.js +3 -3
  74. package/dist/resources/migration-boot.js +59 -18
  75. package/dist/resources/migrations/embedding-stamp.js +20 -1
  76. package/dist/resources/migrations/recheck.js +43 -0
  77. package/dist/resources/migrations/runner.js +6 -1
  78. package/dist/resources/migrations/stamp-outstanding.js +171 -0
  79. package/dist/resources/migrations/visibility-backfill.js +2 -2
  80. package/dist/resources/org-event-catchup-lib.js +47 -0
  81. package/dist/resources/record-owner-guard.js +1 -0
  82. package/dist/resources/tool-descriptors/index.js +669 -0
  83. package/dist/stamp-migration-verify.js +163 -0
  84. package/dist/stamp-outstanding.js +144 -0
  85. package/dist/version-check.js +29 -8
  86. package/docs/api-reference.md +4 -2
  87. package/docs/deploying-on-fabric.md +11 -10
  88. package/docs/deployment.md +3 -1
  89. package/docs/federation.md +19 -0
  90. package/docs/hosted-on-fabric.md +3 -3
  91. package/docs/quickstart.md +2 -1
  92. package/docs/releasing.md +20 -6
  93. package/docs/spoke-bringup.md +10 -5
  94. package/docs/standalone-local.md +3 -1
  95. package/docs/upgrade.md +25 -6
  96. package/package.json +4 -4
  97. package/schemas/agent.graphql +15 -0
package/docs/upgrade.md CHANGED
@@ -39,7 +39,11 @@ flair doctor
39
39
  `flair upgrade` checks and upgrades the npm-global packages (`@tpsdev-ai/flair`,
40
40
  `@tpsdev-ai/flair-mcp`) and, if present, the `openclaw-flair` plugin (via
41
41
  `openclaw plugins install --force --pin`, not `npm install -g` — it needs OpenClaw's
42
- own plugin loader). Pass `--all` to also see `flair-client` (normally hidden as a
42
+ own plugin loader). It also refreshes every `@tpsdev-ai/flair-mcp@<version>` pin
43
+ it previously wrote — MCP server entries **and** SessionStart hook commands —
44
+ for each already-wired client (`~/.claude.json`, `~/.claude/settings.json`,
45
+ `~/.codex/config.toml`, `~/.codex/hooks.json`, and the other auto-wired clients).
46
+ Pass `--all` to also see `flair-client` (normally hidden as a
43
47
  transitive dependency). **Other integrations upgrade in their own ecosystem, not via
44
48
  `flair upgrade`:** `pi-flair` (pi's plugin manager), `langgraph-flair` / `hermes-flair`
45
49
  (pip / your Python package manager), `n8n-nodes-flair` (n8n's Community Nodes UI).
@@ -264,6 +268,20 @@ flair upgrade --target https://<fabric-node>/<instance-name> \
264
268
  --fabric-user <admin> --fabric-password <pass>
265
269
  ```
266
270
 
271
+ ### Post-deploy embedding-stamp verify
272
+
273
+ As of flair#1073, both `flair deploy` and `flair upgrade --target` poll
274
+ authenticated `/HealthDetail` after the served-API check until the
275
+ `embedding-stamp` migration has converged — every real embedding is in the
276
+ current `+searchprefix` space, and the migration is not halted or still
277
+ running. Route verify only proves the component is serving; it does not
278
+ prove the boot-keyed re-embed actually finished. A Fabric instance that
279
+ stayed split for days after 0.30.0 was the incident this closes.
280
+
281
+ `--no-verify` skips this check together with the served-API check.
282
+ `--verify-timeout` covers both. Token-only auth skips the stamp check
283
+ (it needs Basic admin to read `/HealthDetail`) and says so.
284
+
267
285
  ### Post-deploy fleet verify
268
286
 
269
287
  As of flair#636, both `flair deploy` and `flair upgrade --target` automatically run a
@@ -287,10 +305,10 @@ Exit codes:
287
305
 
288
306
  | Code | Meaning |
289
307
  |------|---------|
290
- | 0 | All nodes verified: healthy, authenticated, and version-matched |
308
+ | 0 | All probed nodes verified. Unverifiable peers (no endpoint on file) are listed as a warning and do not fail |
291
309
  | 1 | Origin failed (unreachable, unauthenticated, or wrong version) |
292
- | 2 | Origin OK, but a reachable peer is running a different version (skew) |
293
- | 3 | Origin OK, no skew among reachable peers, but a peer couldn't be verified at all (unreachable, auth rejected, or no endpoint on file) |
310
+ | 2 | A reachable node diverged (wrong version) NOT converged |
311
+ | 3 | A reachable peer was unreachable or rejected auth (not unverifiable) |
294
312
 
295
313
  **What "peer" means here — read before trusting a green sweep:** this checks
296
314
  *Flair's own* federation peer table, not Harper Fabric's own cluster-replication
@@ -300,8 +318,9 @@ in this cluster and are they in sync") is harper-pro-only and unavailable in the
300
318
  Fabric's own replication topology, on the origin or anywhere else. A Fabric replica
301
319
  that was never separately paired as a Flair federation peer (`flair federation pair`)
302
320
  is invisible to this sweep: `0 peers known` means "0 peers on file," never "0 peers
303
- exist." A peer with no usable endpoint is reported `unverifiable` — never silently
304
- dropped, never shown green. The sweep also needs Basic-auth credentials
321
+ exist." A peer with no usable endpoint is reported `unverifiable` — listed and
322
+ warned, never shown green, and does not fail the run (a reachable peer on the
323
+ wrong version still does). The sweep also needs Basic-auth credentials
305
324
  (`FABRIC_USER`/`FABRIC_PASSWORD` env, or the discouraged inline
306
325
  `--fabric-user`/`--fabric-password`) to authenticate each peer probe; a token-only
307
326
  (`--fabric-token`) deploy skips it with a note instead of a silent no-op.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tpsdev-ai/flair",
3
- "version": "0.53.0",
3
+ "version": "0.54.2",
4
4
  "packageManager": "bun@1.3.10",
5
5
  "description": "Identity, memory, and soul for AI agents. Cryptographic identity (Ed25519), semantic memory with local embeddings, and persistent personality — all in a single process.",
6
6
  "type": "module",
@@ -46,10 +46,10 @@
46
46
  ],
47
47
  "scripts": {
48
48
  "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
49
- "prebuild": "npm run clean",
49
+ "prebuild": "npm run clean && node scripts/vendor-tool-descriptors.mjs",
50
50
  "build": "tsc -p tsconfig.json --noCheck && node scripts/write-build-info.mjs",
51
51
  "build:cli": "tsc -p tsconfig.cli.json --noCheck && node scripts/write-build-info.mjs",
52
- "prepublishOnly": "npm run build && npm run build:cli",
52
+ "prepack": "npm run build && npm run build:cli",
53
53
  "test": "bun run test:unit",
54
54
  "test:unit": "bun scripts/test-unit.ts",
55
55
  "test:e2e": "playwright test",
@@ -80,7 +80,7 @@
80
80
  "fast-uri": "^4.1.3",
81
81
  "hono": "^4.13.5",
82
82
  "js-yaml": "^4.3.2",
83
- "adm-zip": "^0.6.0",
83
+ "adm-zip": "^0.6.1",
84
84
  "@opentelemetry/core": "^2.8.0",
85
85
  "uuid": "^11.1.1",
86
86
  "tar": "^7.5.22",
@@ -76,3 +76,18 @@ type Integration @table(database: "flair") @export {
76
76
  createdAt: String!
77
77
  updatedAt: String
78
78
  }
79
+
80
+ # Per-agent read-position (watermark) — durable catch-up cursor (flair#931).
81
+ # A monotonic position per (agent, stream), not a wall-clock `since`. Reused
82
+ # by OrgEventCatchup today and the light-comms board later (#1583); the stream
83
+ # name is the only table-specific part. Not @export: agents use
84
+ # /AgentReadPosition and /OrgEventCatchup, never raw-table REST. Owner-scoped
85
+ # (each agent reads/advances only its own). Advance-on-ack, never silently
86
+ # truncated. See resources/agent-read-position-lib.ts.
87
+ type AgentReadPosition @table(database: "flair") {
88
+ id: ID @primaryKey # `${agentId}:${stream}`
89
+ agentId: String! @indexed
90
+ stream: String! @indexed # e.g. "org-event"
91
+ position: String! # opaque total-order watermark; lexicographic compare
92
+ updatedAt: String!
93
+ }