@novoagents/react 0.3.0-alpha.4 → 0.3.0-alpha.41

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 CHANGED
@@ -1,102 +1,149 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
4
-
5
- ## 0.3.0-alpha.4 - 2026-07-29
6
-
7
- - Companion release for `novoagents` 0.5.0-alpha.4 (the browser SSE source
8
- now applies the same cursor-established rule as the server reader for
9
- id-less data frames, and `isFollowupQueueFullDetails` requires the caps the
10
- server always sends). The hook source is unchanged; the exact SDK peer
11
- moves.
12
-
13
- ## 0.3.0-alpha.3 - 2026-07-29
14
-
15
- - Companion release for `novoagents` 0.5.0-alpha.3 (stream schema v5:
16
- heartbeat covers long tool executions with `phase: 'executing_tool'` and
17
- `waitId`, `followup_queue_full` becomes a first-class error code,
18
- `tool-input-delta` is forwarded, and an id-less data frame after an
19
- established cursor is a fatal transport error). The hook source is
20
- unchanged; the exact SDK peer moves to the v5 contract.
21
-
22
- ## 0.3.0-alpha.2 - 2026-07-28
23
-
24
- - Companion release for `novoagents` 0.5.0-alpha.2 (stream schema v4:
25
- `data-novo-step-terminal` splits overflow reporting into `truncated` for
26
- clipped text and `messagesOmitted` for dropped message arrays, and
27
- `artifactRef` is removed). The hook source is unchanged; the exact SDK peer
28
- moves to the v4 contract, and the packed tarball check now verifies the
29
- installed wire contract against the workspace artifact instead of a pinned
30
- revision literal.
31
-
32
- ## 0.3.0-alpha.1 - 2026-07-28
33
-
34
- - Companion release for `novoagents` 0.5.0-alpha.1 (stream schema v3:
35
- `platform_error` replaces the three engine-named terminal reasons, terminal
36
- errors carry `retryable`, and the SDK ships the generated
37
- `novoagents/wire-contract.json` compatibility manifest). The hook source is
38
- unchanged; the exact SDK peer moves to the v3 contract, and the packed
39
- tarball check verifies the installed wire contract's protocol revision.
40
-
41
- ## 0.2.0-alpha.7 - 2026-07-16
42
-
43
- - Companion release for `novoagents` 0.4.0-alpha.7. The hook source remains
44
- unchanged; its exact SDK peer moves with the App-only GitHub contract.
45
- - The workspace declares `novoagents` as a development dependency so a clean
46
- CI install can compile the peer-backed `novoagents/browser` imports;
47
- consumers still receive only the exact peer dependency, never a nested SDK.
48
-
49
- ## 0.2.0-alpha.6 - 2026-07-16
50
-
51
- - Companion release for `novoagents` 0.4.0-alpha.6. The hook source is
52
- unchanged; publishing the React package alongside the SDK keeps its exact
53
- `novoagents` peer on the current canonical browser-controller contract.
54
-
55
- ## 0.2.0-alpha.5 - 2026-07-16
56
-
57
- - Moves the type-only `novoagents` relationship from a runtime dependency to
58
- an exact peer dependency on 0.4.0-alpha.5. The hooks still require the
59
- matching canonical browser-controller contract, while package managers now
60
- install one app-owned SDK copy instead of retaining an older nested copy or
61
- requiring a consumer override.
62
-
63
- ## 0.2.0-alpha.4 - 2026-07-16
64
-
65
- - Superseded by 0.2.0-alpha.5. The alpha.4 registry artifact was published from
66
- the workspace source with npm, which retained the internal `workspace:*`
67
- peer specifier instead of pnpm's exact-version rewrite. It is not assigned a
68
- dist-tag and should not be installed.
69
-
70
- ## 0.2.0-alpha.3 - 2026-07-15
71
-
72
- - `useNovoRun` exposes the latest provider-neutral thinking/activity snapshot
73
- on `state.progress`, or `null` after answer, pause, restart, or terminal
74
- boundaries. When safe readable reasoning is available, the snapshot may be a
75
- short reasoning-derived summary; it never contains raw reasoning. The hook
76
- inherits the canonical browser reducer behavior from `novoagents`.
77
-
78
- ## 0.2.0-alpha.2 - 2026-07-15
79
-
80
- - Updates the packed `novoagents` dependency to 0.4.0-alpha.2, so React run
81
- hooks consume targeted `data-novo-model-step-restart` retractions through the
82
- canonical browser controller.
83
-
84
- ## 0.2.0-alpha.1 - 2026-07-14
85
-
86
- - `useNovoRun` normalizes `enabled` and `runKey` before its dependency arrays,
87
- so identity toggles (`enabled: undefined <-> true`, `runKey: undefined <->
88
- null`) no longer dispose and recreate a live controller.
89
- - Picks up `novoagents` 0.4.0-alpha.1 controller fixes: fatal (non-retried)
90
- initial-connect errors, per-drop `transportError` publication, a final
91
- `disposed` snapshot published before listeners detach, and interaction-race
92
- hardening.
93
-
94
- ## 0.2.0-alpha.0 - 2026-07-14
95
-
96
- - Replaced the alpha store/transport hooks with effect-owned bindings over the
97
- canonical `NovoRunController`.
98
- - Added `useNovoRunSelector` and controller-bound `useNovoInteractions`.
99
- - Fixed run-key/unmount leaks with stop + disposal and generation-fenced core
100
- consumption.
101
- - Added client entry directives, `sideEffects: false`, React 18/19 peer range,
102
- SSR snapshots, and Strict Mode lifecycle coverage.
3
+ ## 0.3.0-alpha.41 - 2026-09-07
4
+
5
+ Companion release for `novoagents` 0.5.0-alpha.37. The exact peer carries the
6
+ managed operation blocking contract and blockable-tool catalog. The React
7
+ runtime is unchanged.
8
+
9
+ ## 0.3.0-alpha.40 - 2026-09-06
10
+
11
+ Companion release for `novoagents` 0.5.0-alpha.36. The React runtime is
12
+ unchanged; the exact peer carries the corrected public type and error exports.
13
+ Packed-consumer verification now runs from a staged copy and exercises the
14
+ workspace peer resolver independently.
15
+
16
+ ## 0.3.0-alpha.39 - 2026-09-06
17
+
18
+ Companion release for `novoagents` 0.5.0-alpha.35. The React runtime is
19
+ unchanged; the exact peer carries the combined private-input and managed-web
20
+ usage contracts.
21
+
22
+ ## 0.3.0-alpha.38 - 2026-09-06
23
+
24
+ Companion release for `novoagents` 0.5.0-alpha.34. The React runtime is
25
+ unchanged; the exact peer carries protected browser input and context revision
26
+ contracts.
27
+
28
+ ## 0.3.0-alpha.37 - 2026-09-03
29
+
30
+ Companion release for `novoagents` 0.5.0-alpha.33. The React runtime is
31
+ unchanged; the exact peer carries the new agent configuration warnings type.
32
+
33
+ ## 0.3.0-alpha.36 - 2026-09-01
34
+
35
+ Companion release for `novoagents` 0.5.0-alpha.32.
36
+
37
+ - Controller ownership now rides the external-store snapshot (run key and
38
+ controller travel with the subscribed state), so an abandoned concurrent
39
+ render can no longer strand ownership in a render-written ref. Selector
40
+ readers isolate speculative renders while preserving equal object identity
41
+ across inline selector changes: the committed selection lives in a
42
+ `useState`-held cell that is still read during render, by design, mirroring
43
+ React's own `useSyncExternalStoreWithSelector` shim. Behavior is unchanged
44
+ across React 18 and 19, and the package now passes the canonical hooks lint
45
+ rules.
46
+
47
+ ## 0.3.0-alpha.35 - 2026-08-26
48
+
49
+ - Companion release for `novoagents` 0.5.0-alpha.31. GitHub connection and
50
+ agent repository grants now carry exact immutable repository identities
51
+ end to end; an explicit empty agent selection grants no repositories.
52
+
53
+ ## 0.3.0-alpha.34 - 2026-08-26
54
+
55
+ - Companion release for `novoagents` 0.5.0-alpha.30. The React runtime is
56
+ unchanged; the exact peer carries the immutable repository id on grantable
57
+ GitHub repositories.
58
+
59
+ ## 0.3.0-alpha.33 - 2026-08-26
60
+
61
+ - Companion release for `novoagents` 0.5.0-alpha.29. The React runtime is
62
+ unchanged; the exact peer carries the discriminated usage-lineage and
63
+ debit-group identity contract.
64
+
65
+ ## 0.3.0-alpha.32 - 2026-08-25
66
+
67
+ - Companion release for `novoagents` 0.5.0-alpha.28. It carries the exact peer
68
+ for scheduled wake-ups, stream protocol 18, and customer wake-up
69
+ cancellation. The React runtime is unchanged.
70
+
71
+ ## 0.3.0-alpha.31 - 2026-08-21
72
+
73
+ - Companion release for `novoagents` 0.5.0-alpha.27. The controller can follow
74
+ ordered thread segments with an injected cursor codec; React state exposes
75
+ the segment ledger while preserving the transcript across engine-owned runs.
76
+
77
+ ## 0.3.0-alpha.27 - 2026-08-20
78
+
79
+ - Companion release for `novoagents` 0.5.0-alpha.25. The React runtime is
80
+ unchanged; the exact peer carries autonomous run starts and all-attempt Stop
81
+ semantics for background subagents.
82
+
83
+ ## 0.3.0-alpha.26 - 2026-08-20
84
+
85
+ - Companion release for `novoagents` 0.5.0-alpha.24. It carries the exact peer
86
+ for wire protocol 16, the shared GitHub installation contract, and the
87
+ `ask_question` lifecycle whose first public terminal is the user's real
88
+ resolution.
89
+
90
+ ## 0.3.0-alpha.25 - 2026-08-20
91
+
92
+ - Companion release for `novoagents` 0.5.0-alpha.23. It carries the exact peer
93
+ required for stream schema 14, including background worker task metadata and
94
+ `data-novo-worker-report` message parts.
95
+
96
+ ## 0.3.0-alpha.24 - 2026-08-18
97
+
98
+ - Companion release for `novoagents` 0.5.0-alpha.22. The hook runtime is
99
+ unchanged; the package carries an exact peer on the SDK version whose browser
100
+ run controller it binds. Consumers rendering `run.messages` now see one
101
+ `data-novo-heartbeat` part per tool wait (see the core changelog).
102
+
103
+ ## 0.3.0-alpha.23 - 2026-08-17
104
+
105
+ - Companion release for `novoagents` 0.5.0-alpha.21. The hook runtime is
106
+ unchanged; the package carries an exact peer on the SDK version whose browser
107
+ run controller it binds.
108
+
109
+ ## 0.3.0-alpha.22 - 2026-08-17
110
+
111
+ - Companion release for `novoagents` 0.5.0-alpha.20. The hook runtime is
112
+ unchanged; the package carries an exact peer on the SDK version whose browser
113
+ run controller it binds.
114
+
115
+ ## 0.3.0-alpha.21 - 2026-08-17
116
+
117
+ - Companion release for `novoagents` 0.5.0-alpha.19. The hook runtime is
118
+ unchanged; the package carries an exact peer on the SDK version whose browser
119
+ run controller it binds.
120
+
121
+ ## 0.3.0-alpha.20 - 2026-08-16
122
+
123
+ - Companion release for `novoagents` 0.5.0-alpha.18. The hook runtime is
124
+ unchanged; the package carries an exact peer on the SDK version whose browser
125
+ run controller it binds.
126
+ - `0.3.0-alpha.19` was published through npm instead of pnpm and therefore
127
+ preserved the workspace protocol in its peer metadata. It was never tagged
128
+ `latest`; use this build instead.
129
+
130
+ ## 0.3.0-alpha.18 - 2026-08-12
131
+
132
+ - Companion release for `novoagents` 0.5.0-alpha.17. The hook runtime is
133
+ unchanged; the package carries an exact peer on the SDK version whose browser
134
+ run controller it binds.
135
+
136
+ ## 0.3.0-alpha.17 - 2026-08-12
137
+
138
+ - Companion release for `novoagents` 0.5.0-alpha.16. The hook runtime is
139
+ unchanged; the package carries an exact peer on the SDK version whose browser
140
+ run controller it binds.
141
+
142
+ ## 0.3.0-alpha.16 - 2026-08-12
143
+
144
+ - Companion release for `novoagents` 0.5.0-alpha.15. The hook runtime is
145
+ unchanged; the package carries an exact peer on the SDK version whose browser
146
+ run controller it binds.
147
+
148
+ Earlier prerelease builds are unsupported. Their immutable package artifacts
149
+ and Git history retain their release records.
package/README.md CHANGED
@@ -48,26 +48,3 @@ If your host persists interaction requests independently of the stream,
48
48
  configure `interactionDiscovery: { list, intervalMs? }` on the controller.
49
49
  Discovery is generation-fenced, runs while the SSE connection is idle, and
50
50
  reconciles DB-only requests into the same canonical pending queue.
51
-
52
- ## Migrating from 0.1.0-alpha.0
53
-
54
- - `createNovoRunStore` → `createNovoRunController` from `novoagents/browser`.
55
- - `BrowserRunTransport` → `NovoRunEventSource`; use
56
- `createNovoHttpRunSource` for fetch/SSE routes.
57
- - `useNovoRun({ transport })` →
58
- `useNovoRun({ createController, runKey })`.
59
- - `useNovoInteractions({ endpoint, run })` → configure the controller's
60
- interaction transport, then call `useNovoInteractions(run.controller)`.
61
- - `resolveNovoInteractions` → `createHttpInteractionResolveTransport`.
62
-
63
- There are no compatibility aliases for the alpha API.
64
-
65
- ## Publishing
66
-
67
- After publishing `novoagents`, publish with
68
- `pnpm publish --access public --tag alpha`: pnpm rewrites the `workspace:*`
69
- peer dependency on `novoagents` to the exact packed version. Publish the two
70
- alpha packages in lockstep so both `alpha` tags always form one compatible
71
- browser-controller installation. Do not publish the workspace source with
72
- `npm publish`; npm does not perform pnpm's workspace-protocol rewrite. Verify
73
- the registry peer metadata before moving `latest`.
@@ -1,11 +1,12 @@
1
1
  'use client';
2
- import { useEffect, useMemo, useRef, useSyncExternalStore } from 'react';
2
+ import { useEffect, useMemo, useRef, useState, useSyncExternalStore, } from 'react';
3
3
  export const NOVO_IDLE_RUN_STATE = Object.freeze({
4
4
  messages: Object.freeze([]),
5
5
  status: 'queued',
6
6
  progress: null,
7
7
  pendingInteractions: Object.freeze([]),
8
8
  tasks: Object.freeze([]),
9
+ segments: Object.freeze([]),
9
10
  steps: Object.freeze([]),
10
11
  browserSessions: Object.freeze([]),
11
12
  warnings: Object.freeze([]),
@@ -21,7 +22,17 @@ function createControllerSlot() {
21
22
  const listeners = new Set();
22
23
  let controller;
23
24
  let unsubscribe;
25
+ let snapshot = {
26
+ controller: undefined,
27
+ runKey: UNOWNED_RUN_KEY,
28
+ state: NOVO_IDLE_RUN_STATE,
29
+ };
24
30
  const publish = () => {
31
+ snapshot = {
32
+ ...snapshot,
33
+ state: controller?.getSnapshot() ??
34
+ NOVO_IDLE_RUN_STATE,
35
+ };
25
36
  for (const listener of listeners)
26
37
  listener();
27
38
  };
@@ -30,15 +41,20 @@ function createControllerSlot() {
30
41
  listeners.add(listener);
31
42
  return () => listeners.delete(listener);
32
43
  },
33
- getSnapshot: () => controller?.getSnapshot() ??
34
- NOVO_IDLE_RUN_STATE,
44
+ getSnapshot: () => snapshot,
35
45
  getController: () => controller,
36
- setController(next) {
37
- if (controller === next)
46
+ setController(next, runKey = UNOWNED_RUN_KEY) {
47
+ if (controller === next && snapshot.runKey === runKey)
38
48
  return;
39
49
  unsubscribe?.();
40
50
  controller = next;
41
51
  unsubscribe = next?.subscribe(publish);
52
+ snapshot = {
53
+ controller: next,
54
+ runKey,
55
+ state: next?.getSnapshot() ??
56
+ NOVO_IDLE_RUN_STATE,
57
+ };
42
58
  publish();
43
59
  },
44
60
  };
@@ -50,11 +66,10 @@ function createControllerSlot() {
50
66
  */
51
67
  export function useNovoRun(options) {
52
68
  const factoryRef = useRef(options.createController);
53
- factoryRef.current = options.createController;
54
- const slotRef = useRef(undefined);
55
- slotRef.current ??= createControllerSlot();
56
- const slot = slotRef.current;
57
- const ownedRunKeyRef = useRef(UNOWNED_RUN_KEY);
69
+ useEffect(() => {
70
+ factoryRef.current = options.createController;
71
+ }, [options.createController]);
72
+ const [slot] = useState(() => createControllerSlot());
58
73
  // Normalize before any dependency array: `enabled: undefined <-> true` and
59
74
  // `runKey: undefined <-> null` toggles are identity changes and must not
60
75
  // dispose and recreate a live controller.
@@ -66,14 +81,10 @@ export function useNovoRun(options) {
66
81
  return;
67
82
  }
68
83
  const controller = factoryRef.current();
69
- ownedRunKeyRef.current = runKey;
70
- slot.setController(controller);
84
+ slot.setController(controller, runKey);
71
85
  return () => {
72
86
  controller.stop();
73
87
  controller.dispose();
74
- if (ownedRunKeyRef.current === runKey) {
75
- ownedRunKeyRef.current = UNOWNED_RUN_KEY;
76
- }
77
88
  if (slot.getController() === controller)
78
89
  slot.setController(undefined);
79
90
  };
@@ -81,16 +92,16 @@ export function useNovoRun(options) {
81
92
  useEffect(() => {
82
93
  if (enabled &&
83
94
  options.autoStart !== false &&
84
- ownedRunKeyRef.current === runKey) {
95
+ slot.getSnapshot().runKey === runKey) {
85
96
  void slot.getController()?.start();
86
97
  }
87
98
  }, [options.autoStart, enabled, runKey, slot]);
88
- const observedState = useSyncExternalStore(slot.subscribe, slot.getSnapshot, () => NOVO_IDLE_RUN_STATE);
89
- const ownsRenderedKey = enabled && ownedRunKeyRef.current === runKey;
99
+ const observed = useSyncExternalStore(slot.subscribe, slot.getSnapshot, () => IDLE_SLOT_SNAPSHOT);
100
+ const ownsRenderedKey = enabled && observed.runKey === runKey;
90
101
  const state = ownsRenderedKey
91
- ? observedState
102
+ ? observed.state
92
103
  : NOVO_IDLE_RUN_STATE;
93
- const controller = ownsRenderedKey ? slot.getController() : undefined;
104
+ const controller = ownsRenderedKey ? observed.controller : undefined;
94
105
  return useMemo(() => ({
95
106
  ...state,
96
107
  controller,
@@ -104,3 +115,8 @@ export function useNovoRun(options) {
104
115
  }), [controller, state]);
105
116
  }
106
117
  const UNOWNED_RUN_KEY = Symbol('unowned Novo run key');
118
+ const IDLE_SLOT_SNAPSHOT = Object.freeze({
119
+ controller: undefined,
120
+ runKey: UNOWNED_RUN_KEY,
121
+ state: NOVO_IDLE_RUN_STATE,
122
+ });
@@ -1,47 +1,67 @@
1
1
  'use client';
2
- import { useCallback, useEffect, useMemo, useRef, useSyncExternalStore, } from 'react';
2
+ import { useCallback, useEffect, useMemo, useState, useSyncExternalStore, } from 'react';
3
3
  import { NOVO_IDLE_RUN_STATE } from './useNovoRun.js';
4
4
  /** Concurrent-safe selector binding with selector/equality identity support. */
5
5
  export function useNovoRunSelector(controller, selector, isEqual = Object.is) {
6
- const committedSelection = useRef({
7
- hasValue: false,
8
- });
9
- const idleState = NOVO_IDLE_RUN_STATE;
10
- const [getSnapshot, getServerSnapshot] = useMemo(() => {
11
- let hasMemo = false;
12
- let memoizedState;
13
- let memoizedSelection;
14
- const select = (state) => {
15
- if (!hasMemo) {
16
- hasMemo = true;
17
- memoizedState = state;
18
- const nextSelection = selector(state);
19
- const committed = committedSelection.current;
20
- memoizedSelection =
21
- committed.hasValue && isEqual(committed.value, nextSelection)
22
- ? committed.value
23
- : nextSelection;
24
- return memoizedSelection;
25
- }
26
- if (Object.is(memoizedState, state))
27
- return memoizedSelection;
28
- const nextSelection = selector(state);
29
- memoizedState = state;
30
- if (isEqual(memoizedSelection, nextSelection))
31
- return memoizedSelection;
32
- memoizedSelection = nextSelection;
33
- return memoizedSelection;
34
- };
35
- const serverSelection = select(idleState);
36
- return [
37
- () => select(controller?.getSnapshot() ?? idleState),
38
- () => serverSelection,
39
- ];
40
- }, [controller, isEqual, selector]);
6
+ const [committedSelection] = useState(() => createCommittedSelection());
7
+ const [getSnapshot, getServerSnapshot] = useMemo(() => createSelectionReader(controller, selector, isEqual, NOVO_IDLE_RUN_STATE, committedSelection), [committedSelection, controller, isEqual, selector]);
41
8
  const subscribe = useCallback((listener) => controller?.subscribe(listener) ?? (() => { }), [controller]);
42
9
  const selection = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
43
10
  useEffect(() => {
44
- committedSelection.current = { hasValue: true, value: selection };
45
- }, [selection]);
11
+ committedSelection.write(selection);
12
+ }, [committedSelection, selection]);
46
13
  return selection;
47
14
  }
15
+ // Deliberately a mutable cell read during render (via getSnapshot) and
16
+ // written from the commit effect, mirroring React's own
17
+ // useSyncExternalStoreWithSelector shim. The hooks lint layer cannot see a
18
+ // closure-held cell; do not "fix" this back into a ref, which it would flag.
19
+ function createCommittedSelection() {
20
+ let committed = {
21
+ hasValue: false,
22
+ };
23
+ return {
24
+ read: () => committed,
25
+ write: (value) => {
26
+ committed = { hasValue: true, value };
27
+ },
28
+ };
29
+ }
30
+ function createSelectionReader(controller, selector, isEqual, idleState, committedSelection) {
31
+ let hasValue = false;
32
+ let value;
33
+ let memoizedState;
34
+ let hasServerValue = false;
35
+ let serverValue;
36
+ const select = (state) => {
37
+ if (Object.is(memoizedState, state) && hasValue)
38
+ return value;
39
+ const next = selector(state);
40
+ memoizedState = state;
41
+ if (!hasValue) {
42
+ hasValue = true;
43
+ const committed = committedSelection.read();
44
+ value =
45
+ committed.hasValue && isEqual(committed.value, next)
46
+ ? committed.value
47
+ : next;
48
+ }
49
+ else if (!isEqual(value, next)) {
50
+ value = next;
51
+ }
52
+ return value;
53
+ };
54
+ const selectServer = () => {
55
+ if (hasServerValue)
56
+ return serverValue;
57
+ const next = selector(idleState);
58
+ const committed = committedSelection.read();
59
+ serverValue =
60
+ committed.hasValue && isEqual(committed.value, next)
61
+ ? committed.value
62
+ : next;
63
+ hasServerValue = true;
64
+ return serverValue;
65
+ };
66
+ return [() => select(controller?.getSnapshot() ?? idleState), selectServer];
67
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@novoagents/react",
3
- "version": "0.3.0-alpha.4",
3
+ "version": "0.3.0-alpha.41",
4
4
  "description": "Browser-safe React hooks for Novo Agents streams and interactions.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -23,19 +23,8 @@
23
23
  "access": "public"
24
24
  },
25
25
  "peerDependencies": {
26
- "react": "^18.0.0 || ^19.0.0",
27
- "novoagents": "0.5.0-alpha.4"
28
- },
29
- "devDependencies": {
30
- "@types/react": "19.2.17",
31
- "@types/react-dom": "19.2.3",
32
- "happy-dom": "20.11.1",
33
- "react": "19.2.7",
34
- "react-dom": "19.2.7",
35
- "typescript": "6.0.3",
36
- "vite": "8.1.5",
37
- "vitest": "5.0.0-beta.6",
38
- "novoagents": "0.5.0-alpha.4"
26
+ "novoagents": "0.5.0-alpha.37",
27
+ "react": "^18.0.0 || ^19.0.0"
39
28
  },
40
29
  "scripts": {
41
30
  "build": "tsc -p tsconfig.json && node scripts/check-dist.mjs",
package/LICENSE DELETED
@@ -1,19 +0,0 @@
1
- Copyright (c) 2026 Robert Pinckney. All rights reserved.
2
-
3
- This software and associated documentation files (the "Software") are
4
- proprietary and confidential. No license, express or implied, is granted
5
- to any party to use, copy, modify, merge, publish, distribute, sublicense,
6
- or sell copies of the Software without the prior written permission of
7
- the copyright holder.
8
-
9
- Unauthorized use, reproduction, or distribution of the Software, or any
10
- portion of it, is strictly prohibited and may result in civil and criminal
11
- penalties.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
- THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
17
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
18
- OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- SOFTWARE.