hcifootprint 0.2.0

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 (87) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +524 -0
  3. package/dist/atom/types.d.ts +618 -0
  4. package/dist/atom/types.d.ts.map +1 -0
  5. package/dist/atom/types.js +2 -0
  6. package/dist/atom/types.js.map +1 -0
  7. package/dist/graph/builder.d.ts +31 -0
  8. package/dist/graph/builder.d.ts.map +1 -0
  9. package/dist/graph/builder.js +165 -0
  10. package/dist/graph/builder.js.map +1 -0
  11. package/dist/graph/guards.d.ts +31 -0
  12. package/dist/graph/guards.d.ts.map +1 -0
  13. package/dist/graph/guards.js +94 -0
  14. package/dist/graph/guards.js.map +1 -0
  15. package/dist/graph/skill-deps.d.ts +20 -0
  16. package/dist/graph/skill-deps.d.ts.map +1 -0
  17. package/dist/graph/skill-deps.js +15 -0
  18. package/dist/graph/skill-deps.js.map +1 -0
  19. package/dist/index.d.ts +49 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +42 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/mcp.d.ts +16 -0
  24. package/dist/mcp.d.ts.map +1 -0
  25. package/dist/mcp.js +15 -0
  26. package/dist/mcp.js.map +1 -0
  27. package/dist/presence/presence.d.ts +50 -0
  28. package/dist/presence/presence.d.ts.map +1 -0
  29. package/dist/presence/presence.js +126 -0
  30. package/dist/presence/presence.js.map +1 -0
  31. package/dist/registry/registry.d.ts +53 -0
  32. package/dist/registry/registry.d.ts.map +1 -0
  33. package/dist/registry/registry.js +76 -0
  34. package/dist/registry/registry.js.map +1 -0
  35. package/dist/serve/mcp-server.d.ts +40 -0
  36. package/dist/serve/mcp-server.d.ts.map +1 -0
  37. package/dist/serve/mcp-server.js +72 -0
  38. package/dist/serve/mcp-server.js.map +1 -0
  39. package/dist/serve/mcp.d.ts +12 -0
  40. package/dist/serve/mcp.d.ts.map +1 -0
  41. package/dist/serve/mcp.js +62 -0
  42. package/dist/serve/mcp.js.map +1 -0
  43. package/dist/serve/modes.d.ts +66 -0
  44. package/dist/serve/modes.d.ts.map +1 -0
  45. package/dist/serve/modes.js +347 -0
  46. package/dist/serve/modes.js.map +1 -0
  47. package/dist/testing/harness.d.ts +156 -0
  48. package/dist/testing/harness.d.ts.map +1 -0
  49. package/dist/testing/harness.js +416 -0
  50. package/dist/testing/harness.js.map +1 -0
  51. package/dist/testing/index.d.ts +35 -0
  52. package/dist/testing/index.d.ts.map +1 -0
  53. package/dist/testing/index.js +32 -0
  54. package/dist/testing/index.js.map +1 -0
  55. package/dist/testing/lint.d.ts +20 -0
  56. package/dist/testing/lint.d.ts.map +1 -0
  57. package/dist/testing/lint.js +18 -0
  58. package/dist/testing/lint.js.map +1 -0
  59. package/dist/testing/model/check.d.ts +30 -0
  60. package/dist/testing/model/check.d.ts.map +1 -0
  61. package/dist/testing/model/check.js +89 -0
  62. package/dist/testing/model/check.js.map +1 -0
  63. package/dist/testing/model/lint.d.ts +54 -0
  64. package/dist/testing/model/lint.d.ts.map +1 -0
  65. package/dist/testing/model/lint.js +235 -0
  66. package/dist/testing/model/lint.js.map +1 -0
  67. package/dist/testing/model/satisfiable.d.ts +25 -0
  68. package/dist/testing/model/satisfiable.d.ts.map +1 -0
  69. package/dist/testing/model/satisfiable.js +101 -0
  70. package/dist/testing/model/satisfiable.js.map +1 -0
  71. package/dist/traverse/nav-session.d.ts +108 -0
  72. package/dist/traverse/nav-session.d.ts.map +1 -0
  73. package/dist/traverse/nav-session.js +637 -0
  74. package/dist/traverse/nav-session.js.map +1 -0
  75. package/dist/traverse/session.d.ts +239 -0
  76. package/dist/traverse/session.d.ts.map +1 -0
  77. package/dist/traverse/session.js +1305 -0
  78. package/dist/traverse/session.js.map +1 -0
  79. package/dist/tree/appmap.d.ts +8 -0
  80. package/dist/tree/appmap.d.ts.map +1 -0
  81. package/dist/tree/appmap.js +259 -0
  82. package/dist/tree/appmap.js.map +1 -0
  83. package/dist/tree/types.d.ts +151 -0
  84. package/dist/tree/types.d.ts.map +1 -0
  85. package/dist/tree/types.js +2 -0
  86. package/dist/tree/types.js.map +1 -0
  87. package/package.json +90 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * InteractionSession — the composition layer: core Session (driver, frames,
3
+ * gap ledger, trace) × the authored tree (buildNavigationGraph) × the presence
4
+ * sensor (PresenceIndex). Each ingredient stays independently testable; THIS
5
+ * file is where their meanings meet:
6
+ *
7
+ * router sync owns the page level, always
8
+ * → authored semantics own meaning (modal overlay, tab exclusivity, repeats)
9
+ * → mount handles own presence strictly below the router-confirmed page
10
+ * → explicit visibility signals (show/setVisible/`visible:`) own shown/hidden
11
+ *
12
+ * Focus ("You are on", below page level) is set ONLY by sync() and fire()
13
+ * evidence — never by registration, never by recency (React commits effects
14
+ * bottom-up; a lazy sidebar must not steal focus from a modal). When the
15
+ * focus node deactivates, focus falls back to the nearest active ancestor —
16
+ * modal-close auto-resume for free.
17
+ *
18
+ * Everything the runtime DERIVES rather than observes is stamped with an
19
+ * honesty marker; every refused fire is a typed, gap-ledger-recorded
20
+ * rejection. Never a silent exclusion, never a guessed winner.
21
+ */
22
+ import type { AvailableSlice, ContextBrief, ContextBriefOptions, FireOptions, FireResult, Principal, SessionOptions, SkillGraphSpec, StimulusKind, SyncResult, ToolGroup, ToolHandle } from '../atom/types.js';
23
+ import type { NavigationGraph, ToolDef } from '../tree/types.js';
24
+ import { Session } from './session.js';
25
+ import type { ToolHandler } from '../registry/registry.js';
26
+ export interface InteractionSessionOptions extends Omit<SessionOptions, 'node'> {
27
+ /** Starting page id. Default: the first declared page. */
28
+ node?: string;
29
+ /**
30
+ * How long a registration outside the router-confirmed page may persist
31
+ * before drift telemetry fires (a dev warning + one sensor-drift gap row).
32
+ * Registrations in that window are DORMANT: held, not offered, activated
33
+ * instantly if the router then confirms their page. Default 3000ms.
34
+ */
35
+ dormantGraceMs?: number;
36
+ /**
37
+ * The clock the dormancy / overlay-grace timers read (epoch ms). Defaults to
38
+ * `Date.now`. Inject a controllable clock to test time-dependent staleness
39
+ * deterministically — a dormant registration, a mount-grace warning — without
40
+ * real waits (hcifootprint/testing's harness wires one for you).
41
+ */
42
+ now?: () => number;
43
+ }
44
+ /** A tool declared at mount time. `does` is a registration-site source-code literal — still authored. */
45
+ export interface RegisteredToolDef extends ToolDef {
46
+ handler?: ToolHandler;
47
+ }
48
+ export interface RegisterToolGroupOptions {
49
+ /** Bind the app's EXISTING handlers (by reference) to tools declared on this node. */
50
+ handlers?: Record<string, ToolHandler>;
51
+ /** Declare new leaf tools here-and-now (the register-with-just-a-description path). */
52
+ tools?: Record<string, RegisteredToolDef>;
53
+ /** Instance key when registering one card of a repeats container ('o-123'). */
54
+ instance?: string;
55
+ /** Initial visibility signal (same wire as setVisible). */
56
+ visible?: boolean;
57
+ /** Initial disabled state per tool (leaf name → enabled). Flip later via handle.setEnabled. */
58
+ enabled?: Record<string, boolean>;
59
+ }
60
+ /**
61
+ * The handle returned by registerToolGroup — the group's IDENTITY (see
62
+ * ToolGroup). Hold it and call `unregister()` on unmount; `setEnabled(id, …)`
63
+ * greys a tool out.
64
+ */
65
+ export interface ToolGroupHandle extends ToolGroup {
66
+ /** Instance key, when this group registered one card of a repeats container. */
67
+ readonly instance?: string;
68
+ }
69
+ export declare class InteractionSession<Paths extends string = string> extends Session {
70
+ #private;
71
+ constructor(map: NavigationGraph, opts?: InteractionSessionOptions);
72
+ protected get spec(): SkillGraphSpec;
73
+ /**
74
+ * Register a component's handlers/tools ON a node when it renders. You never
75
+ * name a group — this RETURNS a ToolGroupHandle that is the identity (with a
76
+ * generated `id`). Hold it in a ref; call `handle.unregister()` on unmount.
77
+ * `handle.setEnabled(toolId, false)` greys one tool out (a disabled button).
78
+ */
79
+ registerToolGroup(path: Paths, opts?: RegisterToolGroupOptions): ToolGroupHandle;
80
+ /**
81
+ * Register ONE tool on a node (convenience over registerToolGroup). `def`
82
+ * either binds an existing declared tool (`{ handler }`) or declares a new
83
+ * leaf here (`{ does, handler }`). Returns a single-tool handle.
84
+ */
85
+ registerTool(path: Paths, toolId: string, def: RegisteredToolDef & {
86
+ handler: ToolHandler;
87
+ }): ToolHandle;
88
+ setVisible(path: Paths, visible: boolean): void;
89
+ /** Show a node; for a tab this also hides its tab siblings (at most one shown). */
90
+ show(path: Paths): void;
91
+ get focus(): string;
92
+ available(): AvailableSlice;
93
+ fire(affordanceId: string, opts: FireOptions): FireResult;
94
+ protected handlerFor(affordanceId: string, opts: FireOptions): ToolHandler | undefined;
95
+ /**
96
+ * Instance-aware disabled gate: a per-row button registered disabled under
97
+ * 'id[instance]' must block, matching how handlerFor resolves it. Falls back
98
+ * to the base (non-instance) registration.
99
+ */
100
+ protected isToolDisabled(affordanceId: string, opts: FireOptions): boolean;
101
+ sync(observedNode: string, opts?: {
102
+ stimulus?: StimulusKind;
103
+ principal?: Principal;
104
+ }): SyncResult;
105
+ contextBrief(opts?: ContextBriefOptions): ContextBrief;
106
+ protected structureFingerprint(): string;
107
+ }
108
+ //# sourceMappingURL=nav-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-session.d.ts","sourceRoot":"","sources":["../../src/traverse/nav-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAIV,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,SAAS,EACT,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,UAAU,EACX,MAAM,kBAAkB,CAAC;AAK1B,OAAO,KAAK,EAAE,eAAe,EAAW,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7E,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,yGAAyG;AACzG,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAOD,qBAAa,kBAAkB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,OAAO;;gBAsBhE,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,yBAAyB;IAYlE,cAAuB,IAAI,IAAI,cAAc,CAQ5C;IAgBD;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,eAAe;IA2EhF;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,GAAG;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,UAAU;IAiIxG,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAM/C,mFAAmF;IACnF,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IA2BvB,IAAI,KAAK,IAAI,MAAM,CAUlB;IAqJQ,SAAS,IAAI,cAAc;IA6B3B,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU;cA6C/C,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IAU/F;;;;OAIG;cACgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO;IAQ1E,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,YAAY,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,UAAU;IAmBjG,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,YAAY;cA8E5C,oBAAoB,IAAI,MAAM;CAelD"}