@polycode-projects/the-mechanical-code-talker 1.11.6 → 2.0.1

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 (148) hide show
  1. package/README.md +244 -48
  2. package/ROADMAP.md +23 -34
  3. package/bin/tmct.mjs +117 -81
  4. package/corpus/LICENSES.json +118 -0
  5. package/corpus/README.md +17 -13
  6. package/corpus/conceptnet/README.md +5 -5
  7. package/corpus/conceptnet/fetch-slice.mjs +1 -1
  8. package/corpus/conceptnet/filter-dump.mjs +1 -1
  9. package/corpus/generated/README.md +9 -10
  10. package/corpus/namenet/README.md +39 -0
  11. package/corpus/seon/README.md +2 -2
  12. package/corpus/tier2/generate.mjs +58 -9
  13. package/corpus/tier2/manifest.json +44 -0
  14. package/corpus/wordnet/README.md +37 -0
  15. package/corpus/wordnet/generate.mjs +1 -1
  16. package/data/templates/constructions/agent-noun-relations.toml +2 -2
  17. package/data/templates/grammar-rules.toml +1 -1
  18. package/package.json +13 -22
  19. package/src/{ask-nlp.mjs → adapters/ask-nlp.mjs} +1 -1
  20. package/src/{config.mjs → adapters/config.mjs} +1 -1
  21. package/src/{corpus → adapters/corpus}/conceptnet-map.toml +4 -4
  22. package/src/{corpus → adapters/corpus}/conceptnet.mjs +3 -3
  23. package/src/adapters/corpus/construction-banks.mjs +43 -0
  24. package/src/{corpus → adapters/corpus}/templates.mjs +1 -1
  25. package/src/{embed.mjs → adapters/embed.mjs} +1 -11
  26. package/src/{graph-build.mjs → adapters/graph-build.mjs} +6 -6
  27. package/src/{memory → adapters/memory}/blocks.mjs +2 -2
  28. package/src/{memory → adapters/memory}/core.mjs +38 -94
  29. package/src/adapters/prose-tokens.mjs +98 -0
  30. package/src/{providers → adapters/providers}/bootstrap.mjs +2 -2
  31. package/src/{providers → adapters/providers}/fixture.mjs +3 -3
  32. package/src/{providers → adapters/providers}/graph-service.mjs +9 -4
  33. package/src/{source-slice.mjs → adapters/source-slice.mjs} +2 -2
  34. package/src/{source.mjs → adapters/source.mjs} +1 -1
  35. package/src/{toml-config.mjs → adapters/toml-config.mjs} +1 -1
  36. package/src/{answer-variants.json → domain/answer-variants.json} +1 -1
  37. package/src/domain/answer-variants.mjs +23 -0
  38. package/src/{ask-vocab.mjs → domain/ask-vocab.mjs} +37 -5
  39. package/src/{ask.mjs → domain/ask.mjs} +216 -52
  40. package/src/{codegraph.mjs → domain/codegraph.mjs} +31 -315
  41. package/src/{completions → domain/completions}/complete.mjs +16 -10
  42. package/src/{completions → domain/completions}/graph-adapter.mjs +10 -4
  43. package/src/{completions → domain/completions}/group.mjs +14 -6
  44. package/src/{completions → domain/completions}/infer.mjs +57 -39
  45. package/src/domain/completions/injected.mjs +21 -0
  46. package/src/{completions → domain/completions}/rank.mjs +15 -8
  47. package/src/{completions → domain/completions}/search.mjs +4 -2
  48. package/src/{grammar → domain/grammar}/ace.mjs +3 -3
  49. package/src/{grammar → domain/grammar}/assert.mjs +12 -8
  50. package/src/{grammar → domain/grammar}/lexicon-core.json +1 -1
  51. package/src/{grammar → domain/grammar}/lexicon.mjs +4 -6
  52. package/src/domain/hash.mjs +147 -0
  53. package/src/{interpret → domain/interpret}/fuzzy.mjs +42 -4
  54. package/src/domain/interpret/nlp-registry.mjs +20 -0
  55. package/src/{interpret → domain/interpret}/normalize.mjs +35 -5
  56. package/src/{interpret → domain/interpret}/pipeline.mjs +1 -5
  57. package/src/{interpret → domain/interpret}/strategies/ace.mjs +1 -1
  58. package/src/{interpret → domain/interpret}/strategies/constructions.mjs +30 -52
  59. package/src/{interpret → domain/interpret}/strategies/keywords.mjs +48 -26
  60. package/src/domain/memory/capability.mjs +235 -0
  61. package/src/domain/memory/fold.mjs +54 -0
  62. package/src/domain/memory/session-turns.mjs +7 -0
  63. package/src/{memory → domain/memory}/trust.mjs +48 -0
  64. package/src/{paraphrase.mjs → domain/paraphrase.mjs} +2 -2
  65. package/src/{prose.mjs → domain/prose.mjs} +1 -1
  66. package/src/domain/real-word-collisions.json +1 -0
  67. package/src/{router → domain/router}/call-validator.mjs +1 -1
  68. package/src/{router → domain/router}/drive.mjs +34 -25
  69. package/src/{router → domain/router}/goal-reasoner.mjs +1 -1
  70. package/src/{router → domain/router}/guardrail.mjs +1 -1
  71. package/src/{router → domain/router}/planner.mjs +1 -1
  72. package/src/{router → domain/router}/registry.mjs +5 -5
  73. package/src/{router → domain/router}/resolver.mjs +16 -13
  74. package/src/{router → domain/router}/results.mjs +1 -1
  75. package/src/{router → domain/router}/set-algebra.mjs +1 -1
  76. package/src/{router → domain/router}/taught.mjs +10 -9
  77. package/src/{syllogise.mjs → domain/syllogise.mjs} +21 -4
  78. package/src/domain/vector.mjs +12 -0
  79. package/src/services/chat-session.mjs +451 -0
  80. package/src/{chat.mjs → services/chat.mjs} +1238 -680
  81. package/src/{cli-args.mjs → services/cli-args.mjs} +2 -2
  82. package/src/services/completions.mjs +55 -0
  83. package/src/{extensions.mjs → services/extensions.mjs} +7 -7
  84. package/src/{finish.mjs → services/finish.mjs} +2 -2
  85. package/src/{memory → services}/fold.mjs +0 -0
  86. package/src/{import-file.mjs → services/import-file.mjs} +3 -3
  87. package/src/{index.mjs → services/index.mjs} +21 -12
  88. package/src/{init.mjs → services/init.mjs} +9 -9
  89. package/src/{ledger-viz.mjs → services/ledger-viz.mjs} +38 -7
  90. package/src/{plan-viz.mjs → services/plan-viz.mjs} +65 -26
  91. package/src/{sentences.mjs → services/sentences.mjs} +1 -1
  92. package/src/{sessions.mjs → services/sessions.mjs} +4 -5
  93. package/src/{telemetry.mjs → services/telemetry.mjs} +1 -1
  94. package/src/{server-http.mjs → surfaces/http/server-http.mjs} +11 -65
  95. package/src/{tui → surfaces/tui}/app.mjs +3 -3
  96. package/src/{memory-ask-browser-entry.mjs → surfaces/web/memory-ask-browser-entry.mjs} +5 -5
  97. package/src/{memory-ask-browser.bundle.js → surfaces/web/memory-ask-browser.bundle.js} +9465 -6366
  98. package/src/tools/catalog.mjs +29 -0
  99. package/src/{conformance.mjs → tools/conformance.mjs} +2 -2
  100. package/src/tools/definitions.mjs +288 -0
  101. package/src/tools/graph-load.mjs +20 -0
  102. package/src/tools/handlers/index.mjs +54 -0
  103. package/src/tools/handlers/kit.mjs +33 -0
  104. package/src/tools/handlers/tmct-architecture.mjs +7 -0
  105. package/src/tools/handlers/tmct-ask.mjs +14 -0
  106. package/src/tools/handlers/tmct-callees.mjs +6 -0
  107. package/src/tools/handlers/tmct-callers.mjs +6 -0
  108. package/src/tools/handlers/tmct-calls.mjs +6 -0
  109. package/src/tools/handlers/tmct-class-history.mjs +6 -0
  110. package/src/tools/handlers/tmct-cochanges.mjs +6 -0
  111. package/src/tools/handlers/tmct-context-more.mjs +9 -0
  112. package/src/tools/handlers/tmct-context.mjs +163 -0
  113. package/src/tools/handlers/tmct-describe.mjs +15 -0
  114. package/src/tools/handlers/tmct-exports.mjs +9 -0
  115. package/src/tools/handlers/tmct-file-history.mjs +6 -0
  116. package/src/tools/handlers/tmct-history.mjs +6 -0
  117. package/src/tools/handlers/tmct-impact.mjs +9 -0
  118. package/src/tools/handlers/tmct-members.mjs +16 -0
  119. package/src/tools/handlers/tmct-method-history.mjs +6 -0
  120. package/src/tools/handlers/tmct-search.mjs +22 -0
  121. package/src/tools/handlers/tmct-signature.mjs +6 -0
  122. package/src/tools/handlers/tmct-snippet.mjs +37 -0
  123. package/src/tools/handlers/tmct-subclasses.mjs +16 -0
  124. package/src/tools/handlers/tmct-tests-for.mjs +6 -0
  125. package/src/tools/handlers/tmct-untested.mjs +7 -0
  126. package/src/tools/memory-fallthrough.mjs +65 -0
  127. package/src/{schema-docs.mjs → tools/schema-docs.mjs} +1 -1
  128. package/src/tools/server.mjs +61 -0
  129. package/src/answer-variants.mjs +0 -39
  130. package/src/hash.mjs +0 -24
  131. package/src/server.mjs +0 -501
  132. /package/src/{corpus → adapters/corpus}/unknown-ingest.mjs +0 -0
  133. /package/src/{graph-merge.mjs → adapters/graph-merge.mjs} +0 -0
  134. /package/src/{memory → adapters/memory}/inspect.mjs +0 -0
  135. /package/src/{memory → adapters/memory}/shacl.mjs +0 -0
  136. /package/src/{prose-nlp.mjs → adapters/prose-nlp.mjs} +0 -0
  137. /package/src/{repository-interface.mjs → adapters/repository-interface.mjs} +0 -0
  138. /package/src/{uuid.mjs → adapters/uuid.mjs} +0 -0
  139. /package/src/{wink-model.mjs → adapters/wink-model.mjs} +0 -0
  140. /package/src/{completions → domain/completions}/prune.mjs +0 -0
  141. /package/src/{concept.mjs → domain/concept.mjs} +0 -0
  142. /package/src/{domain.mjs → domain/domain.mjs} +0 -0
  143. /package/src/{interpret → domain/interpret}/merge.mjs +0 -0
  144. /package/src/{interpret → domain/interpret}/strategies/grammar.mjs +0 -0
  145. /package/src/{interpret → domain/interpret}/strategies/noise-strip.mjs +0 -0
  146. /package/src/{memory → domain/memory}/bias.mjs +0 -0
  147. /package/src/{planning.mjs → domain/planning.mjs} +0 -0
  148. /package/src/{viz-theme.mjs → services/viz-theme.mjs} +0 -0
@@ -11,29 +11,24 @@
11
11
  // Every response's `usage` is { input_tokens: 0, output_tokens: 0 } — tmct is the $0
12
12
  // floor, priced as free by the meter.
13
13
  //
14
- // src/server.mjs is the tool-dispatch layer, not an HTTP server; this module is the
14
+ // src/tools/server.mjs is the tool-dispatch layer, not an HTTP server; this module is the
15
15
  // HTTP surface.
16
16
 
17
17
  import { createServer } from "node:http";
18
- import { runTurn, COMMANDS, asBareCommand, isConversational } from "./chat.mjs";
19
- import { TOOLS } from "./server.mjs";
20
- import { parseEntities } from "./codegraph.mjs";
21
- import { uuidv7 } from "./uuid.mjs";
22
- import * as defaultSource from "./source.mjs";
18
+ import { runTurn, selectTool } from "../../services/chat.mjs";
19
+ import { TOOLS } from "../../tools/server.mjs";
20
+ import { parseEntities } from "../../domain/codegraph.mjs";
21
+ import { uuidv7 } from "../../adapters/uuid.mjs";
22
+ import * as defaultSource from "../../adapters/source.mjs";
23
+
24
+ // The shim's deterministic tool selection lives with the chat surface's own
25
+ // command routing (selectTool in chat.mjs); re-exported here so HTTP-side
26
+ // callers keep one import site for the whole shim seam.
27
+ export { selectTool } from "../../services/chat.mjs";
23
28
 
24
29
  /** The zero usage every response carries — the meter prices tmct as the $0 floor. */
25
30
  const ZERO_USAGE = { input_tokens: 0, output_tokens: 0 };
26
31
 
27
- /** The tmct tools dispatchTool can back (the set the shim will emit a tool_use for).
28
- * A declared tool outside this set is ignored for emission (the request falls
29
- * through to a text answer) — the shim never emits a call it cannot ground. The
30
- * COMMANDS map (chat.mjs) names the richer graph tools; TOOLS names the hot
31
- * catalog. Their union is what dispatchTool serves. */
32
- const BACKED_TOOLS = new Set([
33
- ...TOOLS.map((t) => t.name),
34
- ...Object.values(COMMANDS).map((s) => s.tool),
35
- ]);
36
-
37
32
  /** Flatten a message's `content` (a string OR a content-block array) into plain
38
33
  * text — concatenating the `text` blocks. Non-text blocks are ignored here. */
39
34
  function textOfContent(content) {
@@ -74,55 +69,6 @@ function toolResultText(block) {
74
69
  try { return JSON.stringify(c); } catch { return String(c); }
75
70
  }
76
71
 
77
- /**
78
- * Decide whether a user turn maps to a DECLARED, dispatch-backed graph-query
79
- * tool, and bind its arguments. Deterministic, in-ethos (no NL guessing beyond
80
- * the chat surface's own command routing):
81
- *
82
- * 1. A slash/bare command that names a tmct tool ("describe X", "/callers X",
83
- * "untested") → that tool with its argument bound from the exact arg key the
84
- * dispatchTool switch reads (COMMANDS in chat.mjs). Only when the tool is
85
- * declared by the caller.
86
- * 2. Otherwise, a non-conversational structural question → tmct_ask{query:…},
87
- * when tmct_ask is declared. Small-talk (isConversational) never emits a
88
- * call — it falls through to a text answer.
89
- *
90
- * Returns { name, input } or null (→ answer as text).
91
- */
92
- export function selectTool(text, declaredNames) {
93
- const t = String(text || "").trim();
94
- if (!t) return null;
95
-
96
- // 1. explicit command form → a specific tool, argument bound
97
- const cmdLine = t.startsWith("/") ? t : asBareCommand(t);
98
- if (cmdLine) {
99
- const [first, ...restTok] = cmdLine.replace(/^\//, "").split(/\s+/);
100
- const spec = COMMANDS[String(first).toLowerCase()];
101
- if (spec && declaredNames.has(spec.tool) && BACKED_TOOLS.has(spec.tool)) {
102
- const input = {};
103
- if (spec.arg) {
104
- const val = restTok.join(" ").trim();
105
- if (val) input[spec.arg] = val;
106
- // an entity command with no argument can't bind a call — fall through
107
- else if (!spec.optional) return askFallback(t, declaredNames);
108
- }
109
- return { name: spec.tool, input };
110
- }
111
- }
112
-
113
- // 2. structural question → tmct_ask, unless it's small-talk
114
- return askFallback(t, declaredNames);
115
- }
116
-
117
- /** The tmct_ask fallback: emit tmct_ask{query} for a non-conversational line when
118
- * the caller declared tmct_ask; otherwise null (→ text answer). */
119
- function askFallback(text, declaredNames) {
120
- if (declaredNames.has("tmct_ask") && BACKED_TOOLS.has("tmct_ask") && !isConversational(text)) {
121
- return { name: "tmct_ask", input: { query: text } };
122
- }
123
- return null;
124
- }
125
-
126
72
  /** Build the assistant message envelope shared by every branch. */
127
73
  function assistantMessage(model, content, stopReason) {
128
74
  return {
@@ -2,7 +2,7 @@
2
2
  // alternate-screen layout with a scrolling transcript pane, a bottom input line, and a
3
3
  // status bar (repo, module count, session id).
4
4
  //
5
- // Every turn goes through the SAME createSession sink (src/chat.mjs) the plain readline
5
+ // Every turn goes through the SAME createSession sink (src/services/chat.mjs) the plain readline
6
6
  // shell uses — transcript log, sidecar, graph upsert, and memory side-write are
7
7
  // byte-identical to `--plain`; only the screen drawing differs.
8
8
  //
@@ -14,7 +14,7 @@
14
14
 
15
15
  import React, { useEffect, useState } from "react";
16
16
  import { render, Box, Text, useApp, useInput, useStdout } from "ink";
17
- import { createSession } from "../chat.mjs";
17
+ import { createSession } from "../../services/chat.mjs";
18
18
 
19
19
  const h = React.createElement;
20
20
 
@@ -221,7 +221,7 @@ export function App({ session }) {
221
221
  * which also triggers the memory fold — stream flush). Returns
222
222
  * { logFile, sidecarFile, turns } exactly like runChat. */
223
223
  export async function runTui({ repoPath, stdout = process.stdout, stdin = process.stdin, ...sessionOpts } = {}) {
224
- // Same reasoning as runChat's equivalent line (src/chat.mjs): createSession's
224
+ // Same reasoning as runChat's equivalent line (src/services/chat.mjs): createSession's
225
225
  // first-run seed is silent for ~2-3s, and nothing is written to the terminal
226
226
  // (not even the alternate-screen switch below) until it resolves — this was
227
227
  // reported live as an apparent hang. One cheap line on the PRIMARY screen,
@@ -1,13 +1,13 @@
1
1
  // memory-ask-browser-entry.mjs — the esbuild entry for the ledger page's
2
- // chat dock (`tmct viz`, src/ledger-viz.mjs).
2
+ // chat dock (`tmct viz`, src/services/ledger-viz.mjs).
3
3
  //
4
- // Re-exports `factAnswer` (src/chat.mjs) and `createInMemoryStore`
5
- // (src/memory/core.mjs), which lets the dock hand `factAnswer` the page's
4
+ // Re-exports `factAnswer` (src/services/chat.mjs) and `createInMemoryStore`
5
+ // (src/adapters/memory/core.mjs), which lets the dock hand `factAnswer` the page's
6
6
  // already-embedded payload with zero fs I/O. Called with `envelope: null,
7
7
  // miss: true` to arm factAnswer's bare-question regex fallbacks directly,
8
8
  // bypassing the structural-graph parse pipeline this dock has no use for.
9
- import { factAnswer, factReadBack } from "./chat.mjs";
10
- import { createInMemoryStore, normFactTerm } from "./memory/core.mjs";
9
+ import { factAnswer, factReadBack } from "../../services/chat.mjs";
10
+ import { createInMemoryStore, normFactTerm } from "../../adapters/memory/core.mjs";
11
11
 
12
12
  // normFactTerm is re-exported too, for the page's client-side term normalization.
13
13
  // factReadBack carries the taught-relation chases (grandfather-style questions)