@rubytech/create-realagent 1.0.831 → 1.0.833

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/dist/index.js +131 -9
  2. package/package.json +1 -1
  3. package/payload/platform/lib/admins-write/dist/index.d.ts +87 -0
  4. package/payload/platform/lib/admins-write/dist/index.d.ts.map +1 -0
  5. package/payload/platform/lib/admins-write/dist/index.js +248 -0
  6. package/payload/platform/lib/admins-write/dist/index.js.map +1 -0
  7. package/payload/platform/lib/admins-write/src/index.ts +311 -0
  8. package/payload/platform/lib/admins-write/tsconfig.json +8 -0
  9. package/payload/platform/neo4j/migrations/004-project-admin-agent.ts +36 -3
  10. package/payload/platform/neo4j/migrations/009-conversation-archive-title.ts +197 -0
  11. package/payload/platform/neo4j/schema.cypher +1 -1
  12. package/payload/platform/package.json +2 -2
  13. package/payload/platform/plugins/admin/PLUGIN.md +1 -1
  14. package/payload/platform/plugins/admin/mcp/dist/index.js +37 -44
  15. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  16. package/payload/platform/plugins/docs/references/internals.md +4 -3
  17. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +455 -140
  18. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +47 -15
  19. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +75 -0
  20. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
  21. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +16 -10
  22. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
  23. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +155 -100
  24. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
  25. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +13 -5
  26. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts.map +1 -1
  27. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +53 -59
  28. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
  29. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.d.ts +3 -0
  30. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.d.ts.map +1 -0
  31. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js +12 -0
  32. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js.map +1 -0
  33. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +28 -0
  34. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
  35. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +35 -9
  36. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
  37. package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +64 -12
  38. package/payload/platform/scripts/lib/resolve-account-dir.sh +22 -2
  39. package/payload/platform/scripts/migrate-import.sh +3 -1
  40. package/payload/platform/scripts/seed-neo4j.sh +13 -3
  41. package/payload/server/chunk-25QDCOE5.js +1116 -0
  42. package/payload/server/chunk-35YZS3KL.js +328 -0
  43. package/payload/server/chunk-7CBRZKZS.js +654 -0
  44. package/payload/server/chunk-CRAIGEXY.js +654 -0
  45. package/payload/server/chunk-I2NOLBQA.js +2123 -0
  46. package/payload/server/chunk-IVTESKFR.js +9961 -0
  47. package/payload/server/chunk-IXOPV36P.js +2305 -0
  48. package/payload/server/chunk-KD3XP4IK.js +1116 -0
  49. package/payload/server/chunk-OJZPS4BL.js +367 -0
  50. package/payload/server/chunk-ZKGAYLAK.js +10097 -0
  51. package/payload/server/client-pool-J5BCVVI2.js +32 -0
  52. package/payload/server/client-pool-NBVGONQL.js +32 -0
  53. package/payload/server/cloudflare-task-tracker-R4FIORFL.js +19 -0
  54. package/payload/server/cloudflare-task-tracker-XCUO4N74.js +19 -0
  55. package/payload/server/maxy-edge.js +6 -5
  56. package/payload/server/neo4j-migrations-3A6K2EB5.js +552 -0
  57. package/payload/server/neo4j-migrations-5AN2U3YO.js +664 -0
  58. package/payload/server/public/assets/{admin-BNwPsMhJ.js → admin-CgGQafDG.js} +1 -1
  59. package/payload/server/public/assets/{graph-N_Bw-8oT.js → graph-BlrcvwWP.js} +1 -1
  60. package/payload/server/public/assets/{page-BKLGP-th.js → page-ClTUYMK8.js} +1 -1
  61. package/payload/server/public/graph.html +2 -2
  62. package/payload/server/public/index.html +2 -2
  63. package/payload/server/server.js +385 -167
  64. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.d.ts +0 -31
  65. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.d.ts.map +0 -1
  66. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js +0 -666
  67. package/payload/platform/plugins/admin/mcp/dist/lib/review-tools.js.map +0 -1
  68. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts +0 -61
  69. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.d.ts.map +0 -1
  70. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js +0 -266
  71. package/payload/platform/plugins/memory/mcp/dist/lib/semantic-chunker.js.map +0 -1
  72. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.d.ts +0 -27
  73. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.d.ts.map +0 -1
  74. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.js +0 -477
  75. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-pass.js.map +0 -1
  76. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.d.ts +0 -27
  77. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.d.ts.map +0 -1
  78. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.js +0 -160
  79. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-insight-write.js.map +0 -1
  80. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.d.ts +0 -10
  81. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.d.ts.map +0 -1
  82. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.js +0 -29
  83. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-parse.js.map +0 -1
  84. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.d.ts +0 -28
  85. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.d.ts.map +0 -1
  86. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.js +0 -34
  87. package/payload/platform/plugins/memory/mcp/dist/tools/whatsapp-export-preview.js.map +0 -1
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env bash
2
2
  # =============================================================================
3
3
  # conversation-archive-ingest.sh — single deterministic Bash entry for
4
- # conversation-archive ingestion (Task 894 — supersedes whatsapp-ingest.sh).
4
+ # conversation-archive ingestion (Task 894 — supersedes whatsapp-ingest.sh;
5
+ # Task 900 — env-only identity, progress-file path on stdout).
5
6
  #
6
7
  # Source-agnostic: WhatsApp `_chat.txt`, Telegram, Signal, LinkedIn DMs, Zoom
7
8
  # transcript, meeting minutes, iMessage, Slack — every source flows through
@@ -9,26 +10,34 @@
9
10
  #
10
11
  # Pipeline: normalise (per source) → bind canonical sender set →
11
12
  # derive conversationIdentity → look up prior :ConversationArchive (delta
12
- # cursor) → sessionize delta at gap-hours boundary → classify each session
13
- # via Haiku (mode='chat') memory-ingest with parentLabel='ConversationArchive'.
13
+ # cursor) → sessionize delta at gap-hours boundary → for each session: classify
14
+ # via Haiku (mode='chat') + memory-ingest immediately (per-session checkpoint).
14
15
  #
15
16
  # Usage:
16
17
  # bash conversation-archive-ingest.sh <archive-path>
17
18
  # --source <whatsapp|telegram|signal|linkedin-messages|zoom-transcript|meeting-minutes|imessage|slack|other>
18
- # --owner-element-id <id>
19
19
  # --participant-person-ids <csv>
20
20
  # --scope <admin|public>
21
- # [--session-gap-hours <N>] (default 12)
22
- # [--account-id <accountId>]
21
+ # [--rebuild] (Task 902 — opt-in destructive rebuild)
23
22
  # [--timezone <iana-zone>]
24
23
  # [--date-format <DD/MM/YY|MM/DD/YY|DD/MM/YYYY|MM/DD/YYYY>] (whatsapp only)
24
+ # [--session-id <id>]
25
25
  #
26
- # `--owner-element-id` + `--participant-person-ids` form the closed sender
27
- # set; any parsed senderName outside that set LOUD-FAILs with `parser-miss`
28
- # and exits non-zero.
26
+ # Sessions split deterministically at 8h gap (fixed code constant — Task 902).
27
+ # `--session-gap-hours` is REMOVED; passing it FAILs at phase=argv.
28
+ #
29
+ # Identity (Task 900): `ACCOUNT_ID` + `USER_ID` come from the caller's env
30
+ # (plumbed by `spawn-env.ts` into every Bash subprocess). The owner :AdminUser
31
+ # elementId is derived from (accountId, userId) inside the bin via Cypher.
32
+ # `--account-id` and `--owner-element-id` flags are GONE — env-only identity
33
+ # is doctrine. `--participant-person-ids` carries the operator-confirmed
34
+ # non-owner set.
29
35
  #
30
36
  # Exit 0 + JSON summary on stdout on success.
31
37
  # Exit !0 + one [conversation-archive] FAIL line on stderr on failure.
38
+ # Stdout (always, before exec node): `[conversation-archive] progress-file=<absolute-path>`
39
+ # Mid-run progress: line-by-line writes to that progress-file (fsync per line);
40
+ # the agent's heartbeat polls it via `tail -n <N> <path>` every 30 s.
32
41
  # =============================================================================
33
42
 
34
43
  set -euo pipefail
@@ -47,15 +56,25 @@ if [ ! -f "$INGEST_MJS" ]; then
47
56
  arg_fail "conversation-archive-ingest.mjs not found at $INGEST_MJS — run from a built install"
48
57
  fi
49
58
 
59
+ # Identity is env-only (Task 900). The mjs LOUD-FAILs on missing/malformed
60
+ # values, but we mirror the cheap accountId presence check here so the
61
+ # progress-file path can be computed and emitted before exec node — without
62
+ # accountId, the path is undefined.
63
+ if [ -z "${ACCOUNT_ID:-}" ]; then
64
+ arg_fail "ACCOUNT_ID env missing — bin must be invoked under an authenticated agent context (set by spawn-env.ts)"
65
+ fi
66
+ if [ -z "${USER_ID:-}" ]; then
67
+ arg_fail "USER_ID env missing — bin must be invoked under an authenticated user session (set by spawn-env.ts)"
68
+ fi
69
+
50
70
  ARCHIVE=""
51
71
  HAS_SOURCE=0
52
72
  SOURCE_VAL=""
53
- HAS_OWNER=0
54
- OWNER_VAL=""
55
73
  HAS_PARTICIPANTS=0
56
74
  PARTICIPANTS_VAL=""
57
75
  HAS_SCOPE=0
58
76
  SCOPE_VAL=""
77
+ SESSION_ID_VAL=""
59
78
 
60
79
  ARGS=("$@")
61
80
  i=0
@@ -63,10 +82,12 @@ while [ $i -lt ${#ARGS[@]} ]; do
63
82
  a="${ARGS[$i]}"
64
83
  case "$a" in
65
84
  --source) HAS_SOURCE=1; SOURCE_VAL="${ARGS[$((i + 1))]:-}"; i=$((i + 2)); continue ;;
66
- --owner-element-id) HAS_OWNER=1; OWNER_VAL="${ARGS[$((i + 1))]:-}"; i=$((i + 2)); continue ;;
67
85
  --participant-person-ids) HAS_PARTICIPANTS=1; PARTICIPANTS_VAL="${ARGS[$((i + 1))]:-}"; i=$((i + 2)); continue ;;
68
86
  --scope) HAS_SCOPE=1; SCOPE_VAL="${ARGS[$((i + 1))]:-}"; i=$((i + 2)); continue ;;
69
- --session-gap-hours|--account-id|--timezone|--date-format|--session-id) i=$((i + 2)); continue ;;
87
+ --session-id) SESSION_ID_VAL="${ARGS[$((i + 1))]:-}"; i=$((i + 2)); continue ;;
88
+ --rebuild) i=$((i + 1)); continue ;;
89
+ --session-gap-hours) arg_fail "--session-gap-hours is no longer supported; gap is fixed at 8h. Use --rebuild on the prior export bytes if you need to re-classify." ;;
90
+ --timezone|--date-format) i=$((i + 2)); continue ;;
70
91
  --*) i=$((i + 2)); continue ;;
71
92
  *)
72
93
  if [ -z "$ARCHIVE" ]; then ARCHIVE="$a"; fi
@@ -78,7 +99,6 @@ done
78
99
 
79
100
  [ -n "$ARCHIVE" ] || arg_fail "missing positional <archive>"
80
101
  [ "$HAS_SOURCE" -eq 1 ] && [ -n "$SOURCE_VAL" ] || arg_fail "missing --source (whatsapp|telegram|signal|linkedin-messages|zoom-transcript|meeting-minutes|imessage|slack|other)"
81
- [ "$HAS_OWNER" -eq 1 ] && [ -n "$OWNER_VAL" ] || arg_fail "missing --owner-element-id (or empty value)"
82
102
  [ "$HAS_PARTICIPANTS" -eq 1 ] && [ -n "$PARTICIPANTS_VAL" ] || arg_fail "missing --participant-person-ids (csv of operator-confirmed :Person/:AdminUser elementIds, owner excluded)"
83
103
  [ "$HAS_SCOPE" -eq 1 ] && [ -n "$SCOPE_VAL" ] || arg_fail "missing --scope (or empty value)"
84
104
  case "$SCOPE_VAL" in
@@ -103,4 +123,16 @@ fi
103
123
  export NEO4J_USER="${NEO4J_USER:-neo4j}"
104
124
  export MAXY_PLATFORM_ROOT="$PLATFORM_ROOT"
105
125
 
106
- exec node "$INGEST_MJS" "$@"
126
+ # Progress-file path must match the path the mjs opens (deterministic from
127
+ # (ACCOUNT_ID, sessionId)). When the operator omits --session-id, the mjs
128
+ # mints one — the wrapper passes through the same value via env so both
129
+ # sides converge on one path.
130
+ if [ -z "$SESSION_ID_VAL" ]; then
131
+ SESSION_ID_VAL="conversation-archive:${SOURCE_VAL}:$(date +%s%N)"
132
+ ARGS+=(--session-id "$SESSION_ID_VAL")
133
+ fi
134
+ INSTALL_DIR="$(cd "$PLATFORM_ROOT/.." && pwd)"
135
+ PROGRESS_FILE="$INSTALL_DIR/data/accounts/$ACCOUNT_ID/logs/conversation-archive-$SESSION_ID_VAL.log"
136
+ echo "[conversation-archive] progress-file=$PROGRESS_FILE"
137
+
138
+ exec node "$INGEST_MJS" "${ARGS[@]}"
@@ -139,6 +139,81 @@ test("Task 891: classifyDocument logs `mode=` for grep parity", () => {
139
139
  const source = readClassifier();
140
140
  assert.match(source, /\[memory-classify\][^\n]*calling haiku[^\n]*mode=/, "calling-haiku log line must include `mode=<document|chat>` for grep parity");
141
141
  });
142
+ // ---------------------------------------------------------------------------
143
+ // Task 898 — classifier + ranker structured tool-use migration.
144
+ //
145
+ // The classifier and ranker now force Haiku to emit `tool_use.input` matching
146
+ // a typed `input_schema`. The migration deletes `extractJson` (used to strip
147
+ // markdown fences from a free-form text response) and the malformed-JSON
148
+ // fallback path entirely — Anthropic enforces the schema at the API boundary,
149
+ // so structural failures (missing fields, wrong types, truncation mid-tool-input)
150
+ // surface as fallback responses or as the existing missing-offsets loud-fail.
151
+ //
152
+ // These tests grep source so a future refactor that reverts to free-form text
153
+ // re-fails the test suite on `main` pre-fix.
154
+ // ---------------------------------------------------------------------------
155
+ const RANKER_PATH = resolve(PACKAGE_ROOT, "src/lib/llm-ranker.ts");
156
+ function readRanker() {
157
+ return readFileSync(RANKER_PATH, "utf-8");
158
+ }
159
+ test("Task 898: classifier defines a ClassifierOutputTool with input_schema", () => {
160
+ const source = readClassifier();
161
+ assert.match(source, /ClassifierOutputTool[\s\S]{0,200}name:\s*["']emit_classifier_output["']/, "classifier must export a ClassifierOutputTool whose name is 'emit_classifier_output'");
162
+ assert.match(source, /ClassifierOutputTool[\s\S]*?input_schema/, "ClassifierOutputTool must declare an input_schema");
163
+ });
164
+ test("Task 898: classifier call site forces tool selection", () => {
165
+ const source = readClassifier();
166
+ const callMatch = source.match(/callOauthLlm\(\{[\s\S]*?\}\)/);
167
+ assert.ok(callMatch, "expected to find callOauthLlm({...}) call site");
168
+ assert.match(callMatch[0], /tools:\s*\[ClassifierOutputTool\]/, "classifier MUST pass `tools: [ClassifierOutputTool]` so Haiku emits structured output");
169
+ assert.match(callMatch[0], /toolChoiceName:\s*ClassifierOutputTool\.name/, "classifier MUST force the tool by name — Anthropic only validates the schema when forced");
170
+ });
171
+ test("Task 898: classifier `kind` schema is enforced as an enum (closed enumeration)", () => {
172
+ const source = readClassifier();
173
+ // The schema must declare `kind` with an `enum` whose membership is sourced
174
+ // from ALL_SECTION_KINDS. We check the structural shape rather than the
175
+ // exact list — the list is exported and tested elsewhere.
176
+ assert.match(source, /kind:\s*\{\s*type:\s*["']string["'],\s*enum:\s*ALL_SECTION_KINDS_LIST/, "ClassifierOutputTool.input_schema must enforce `kind` as an enum sourced from ALL_SECTION_KINDS — schema-level enforcement is what makes hallucinated kinds impossible");
177
+ });
178
+ test("Task 898: classifier no longer references extractJson (dead code removed)", () => {
179
+ const source = readClassifier();
180
+ assert.doesNotMatch(source, /extractJson/, "extractJson is unreachable on the structured-output path and was deleted; reintroducing it is the regression");
181
+ });
182
+ test("Task 898: classifier no longer collapses unknown kinds to Other (unreachable on structured path)", () => {
183
+ const source = readClassifier();
184
+ // The pre-Task-898 collapse used `isKnownKind ? rawKind : SECTION_KIND_OTHER`.
185
+ // With a strict schema enum on `kind`, the collapse is unreachable. The
186
+ // variable name is the load-bearing fingerprint of the dead branch.
187
+ assert.doesNotMatch(source, /isKnownKind/, "the `isKnownKind` collapse is dead code on the structured path; reintroducing it weakens the schema-as-enforcement contract");
188
+ });
189
+ test("Task 898: classifier emits `structured-output ok` log line per call", () => {
190
+ const source = readClassifier();
191
+ assert.match(source, /\[memory-classify\][^\n]*structured-output ok[^\n]*stop-reason=/, "classifier must log `structured-output ok stop-reason=...` per call so observability names the structured path");
192
+ });
193
+ test("Task 898: ranker defines a RankerOutputTool with input_schema", () => {
194
+ const source = readRanker();
195
+ assert.match(source, /RankerOutputTool[\s\S]{0,200}name:\s*["']emit_ranker_output["']/, "ranker must export a RankerOutputTool whose name is 'emit_ranker_output'");
196
+ assert.match(source, /RankerOutputTool[\s\S]*?input_schema/, "RankerOutputTool must declare an input_schema");
197
+ });
198
+ test("Task 898: ranker call site forces tool selection", () => {
199
+ const source = readRanker();
200
+ const callMatch = source.match(/callOauthLlm\(\{[\s\S]*?\}\)/);
201
+ assert.ok(callMatch, "expected to find callOauthLlm({...}) call site");
202
+ assert.match(callMatch[0], /tools:\s*\[RankerOutputTool\]/, "ranker MUST pass `tools: [RankerOutputTool]`");
203
+ assert.match(callMatch[0], /toolChoiceName:\s*RankerOutputTool\.name/, "ranker MUST force the tool by name");
204
+ });
205
+ test("Task 898: ranker no longer references extractJson", () => {
206
+ const source = readRanker();
207
+ assert.doesNotMatch(source, /extractJson/, "extractJson is unreachable on the structured-output path and was deleted");
208
+ });
209
+ test("Task 898: ranker no longer parses JSON.parse on response text", () => {
210
+ const source = readRanker();
211
+ assert.doesNotMatch(source, /JSON\.parse\(jsonText\)/, "structured tool-use returns a typed object — JSON.parse on response text is dead code");
212
+ });
213
+ test("Task 898: ranker emits `structured-output ok` log line per call", () => {
214
+ const source = readRanker();
215
+ assert.match(source, /\[memory-rank\][^\n]*structured-output ok[^\n]*stop-reason=/, "ranker must log `structured-output ok stop-reason=...` per call");
216
+ });
142
217
  test("Task 781 fixture is still >=10K chars (regression anchor)", () => {
143
218
  // The fixture is named in the brief so the same evidence shape can be
144
219
  // re-run on demand. If it ever shrinks below 10K, this test fails loud
@@ -1 +1 @@
1
- {"version":3,"file":"llm-classifier.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/llm-classifier.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-classifier.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/llm-classifier.test.ts"],"names":[],"mappings":"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"}
@@ -14,14 +14,18 @@
14
14
  * the Anthropic API key. The API-key path is reserved for the public
15
15
  * agent.
16
16
  *
17
- * Hallucination defence: every returned `kind` is verified against the
18
- * loaded ontology label set. Sections whose `kind` is not a real label
19
- * are tagged `UNMAPPED`. Failure of the LLM call (missing creds, network,
20
- * malformed JSON) returns `{kind: "error", reason}` (Task 897 vocabulary
21
- * was `kind: "fallback"`). The caller decides whether to abort the
22
- * ingest or degrade-on-error per session; classifier never silently
23
- * substitutes a degraded write.
17
+ * Hallucination defence: section `kind` is enforced as a closed enum in
18
+ * `ClassifierOutputTool.input_schema`, so a hallucinated kind cannot reach
19
+ * this module Anthropic rejects the tool_use input at the API boundary.
20
+ * For `related[].kind` and `documentEdges[].targetKind` (which the static
21
+ * schema cannot constrain because the live ontology label set is a runtime
22
+ * input), the post-validator drops any label not in `ontologyLabels`.
23
+ * Failure of the LLM call (missing creds, network, schema-violating
24
+ * `tool_use.input`) returns `{kind: "error", reason}`. The caller decides
25
+ * whether to abort the ingest or degrade-on-error per session; classifier
26
+ * never silently substitutes a degraded write.
24
27
  */
28
+ import { type OauthLlmTool } from "../../../../../lib/oauth-llm/dist/index.js";
25
29
  /** Direction of the anchor edge relative to the typed node. */
26
30
  export type AnchorEdgeDirection = "from-anchor" | "to-anchor";
27
31
  /** Direction of a related-node edge relative to the typed node. */
@@ -166,9 +170,10 @@ export type ClassifyResult = {
166
170
  };
167
171
  /**
168
172
  * Closed enumeration of section `kind` values. Each becomes a secondary
169
- * label on the `:Section` node (e.g. `:Section:Position`). Anything outside
170
- * this list collapses to `Other` (the writer stamps the classifier's
171
- * one-line reason on `:Section:Other.classifierReason` for ontology growth).
173
+ * label on the `:Section` node (e.g. `:Section:Position`). The `kind` field
174
+ * is enforced as an `enum` in `ClassifierOutputTool.input_schema`, so a
175
+ * hallucinated kind cannot reach the post-validator — Anthropic rejects the
176
+ * tool_use input at the API boundary (Task 898).
172
177
  *
173
178
  * Source of truth: schema-base.md "Section kinds" table. Changes here MUST
174
179
  * be mirrored there or the validator will reject the secondary label.
@@ -180,6 +185,7 @@ export declare const CONTRACT_SECTION_KINDS: readonly ["Parties", "Recitals", "D
180
185
  /** Standalone (non-Section) node kind the classifier may emit per section. */
181
186
  export declare const STANDALONE_NODE_KINDS: readonly ["Project"];
182
187
  export declare const ALL_SECTION_KINDS: ReadonlySet<string>;
188
+ export declare const ClassifierOutputTool: OauthLlmTool;
183
189
  export interface ClassifyParams {
184
190
  /** Account scope, for log prefixing. */
185
191
  accountId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"llm-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/llm-classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/llm-classifier.ts"],"names":[],"mappings":"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"}