@polycode-projects/the-mechanical-code-talker 1.12.0 → 2.0.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.
- package/README.md +244 -48
- package/ROADMAP.md +23 -34
- package/bin/tmct.mjs +107 -71
- package/corpus/LICENSES.json +118 -0
- package/corpus/README.md +17 -13
- package/corpus/conceptnet/README.md +5 -5
- package/corpus/conceptnet/fetch-slice.mjs +1 -1
- package/corpus/conceptnet/filter-dump.mjs +1 -1
- package/corpus/generated/README.md +9 -10
- package/corpus/namenet/README.md +39 -0
- package/corpus/seon/README.md +2 -2
- package/corpus/tier2/generate.mjs +58 -9
- package/corpus/tier2/manifest.json +44 -0
- package/corpus/wordnet/README.md +37 -0
- package/corpus/wordnet/generate.mjs +1 -1
- package/data/templates/constructions/agent-noun-relations.toml +2 -2
- package/data/templates/grammar-rules.toml +1 -1
- package/package.json +13 -22
- package/src/{ask-nlp.mjs → adapters/ask-nlp.mjs} +1 -1
- package/src/{config.mjs → adapters/config.mjs} +1 -1
- package/src/{corpus → adapters/corpus}/conceptnet-map.toml +4 -4
- package/src/{corpus → adapters/corpus}/conceptnet.mjs +3 -3
- package/src/adapters/corpus/construction-banks.mjs +43 -0
- package/src/{corpus → adapters/corpus}/templates.mjs +1 -1
- package/src/{embed.mjs → adapters/embed.mjs} +1 -11
- package/src/{graph-build.mjs → adapters/graph-build.mjs} +6 -6
- package/src/{memory → adapters/memory}/blocks.mjs +2 -2
- package/src/{memory → adapters/memory}/core.mjs +38 -94
- package/src/adapters/prose-tokens.mjs +98 -0
- package/src/{providers → adapters/providers}/bootstrap.mjs +2 -2
- package/src/{providers → adapters/providers}/fixture.mjs +3 -3
- package/src/{providers → adapters/providers}/graph-service.mjs +9 -4
- package/src/{source-slice.mjs → adapters/source-slice.mjs} +2 -2
- package/src/{source.mjs → adapters/source.mjs} +1 -1
- package/src/{toml-config.mjs → adapters/toml-config.mjs} +1 -1
- package/src/{answer-variants.json → domain/answer-variants.json} +1 -1
- package/src/domain/answer-variants.mjs +23 -0
- package/src/{ask-vocab.mjs → domain/ask-vocab.mjs} +37 -5
- package/src/{ask.mjs → domain/ask.mjs} +216 -52
- package/src/{codegraph.mjs → domain/codegraph.mjs} +31 -315
- package/src/{completions → domain/completions}/complete.mjs +16 -10
- package/src/{completions → domain/completions}/graph-adapter.mjs +10 -4
- package/src/{completions → domain/completions}/group.mjs +14 -6
- package/src/{completions → domain/completions}/infer.mjs +57 -39
- package/src/domain/completions/injected.mjs +21 -0
- package/src/{completions → domain/completions}/rank.mjs +15 -8
- package/src/{completions → domain/completions}/search.mjs +4 -2
- package/src/{grammar → domain/grammar}/ace.mjs +3 -3
- package/src/{grammar → domain/grammar}/assert.mjs +12 -8
- package/src/{grammar → domain/grammar}/lexicon-core.json +1 -1
- package/src/{grammar → domain/grammar}/lexicon.mjs +4 -6
- package/src/domain/hash.mjs +147 -0
- package/src/{interpret → domain/interpret}/fuzzy.mjs +42 -4
- package/src/domain/interpret/nlp-registry.mjs +20 -0
- package/src/{interpret → domain/interpret}/normalize.mjs +35 -5
- package/src/{interpret → domain/interpret}/pipeline.mjs +1 -5
- package/src/{interpret → domain/interpret}/strategies/ace.mjs +1 -1
- package/src/{interpret → domain/interpret}/strategies/constructions.mjs +30 -52
- package/src/{interpret → domain/interpret}/strategies/keywords.mjs +48 -26
- package/src/domain/memory/capability.mjs +235 -0
- package/src/domain/memory/fold.mjs +54 -0
- package/src/domain/memory/session-turns.mjs +7 -0
- package/src/{memory → domain/memory}/trust.mjs +48 -0
- package/src/{paraphrase.mjs → domain/paraphrase.mjs} +2 -2
- package/src/{prose.mjs → domain/prose.mjs} +1 -1
- package/src/domain/real-word-collisions.json +1 -0
- package/src/{router → domain/router}/call-validator.mjs +1 -1
- package/src/{router → domain/router}/drive.mjs +34 -25
- package/src/{router → domain/router}/goal-reasoner.mjs +1 -1
- package/src/{router → domain/router}/guardrail.mjs +1 -1
- package/src/{router → domain/router}/planner.mjs +1 -1
- package/src/{router → domain/router}/registry.mjs +5 -5
- package/src/{router → domain/router}/resolver.mjs +16 -13
- package/src/{router → domain/router}/results.mjs +1 -1
- package/src/{router → domain/router}/set-algebra.mjs +1 -1
- package/src/{router → domain/router}/taught.mjs +10 -9
- package/src/{syllogise.mjs → domain/syllogise.mjs} +21 -4
- package/src/domain/vector.mjs +12 -0
- package/src/services/chat-session.mjs +451 -0
- package/src/{chat.mjs → services/chat.mjs} +1209 -684
- package/src/{cli-args.mjs → services/cli-args.mjs} +2 -2
- package/src/services/completions.mjs +55 -0
- package/src/{extensions.mjs → services/extensions.mjs} +7 -7
- package/src/{finish.mjs → services/finish.mjs} +2 -2
- package/src/{memory → services}/fold.mjs +0 -0
- package/src/{import-file.mjs → services/import-file.mjs} +3 -3
- package/src/{index.mjs → services/index.mjs} +21 -12
- package/src/{init.mjs → services/init.mjs} +9 -9
- package/src/{ledger-viz.mjs → services/ledger-viz.mjs} +3 -3
- package/src/{plan-viz.mjs → services/plan-viz.mjs} +98 -28
- package/src/{sentences.mjs → services/sentences.mjs} +1 -1
- package/src/{sessions.mjs → services/sessions.mjs} +4 -5
- package/src/{telemetry.mjs → services/telemetry.mjs} +1 -1
- package/src/{server-http.mjs → surfaces/http/server-http.mjs} +11 -65
- package/src/{tui → surfaces/tui}/app.mjs +3 -3
- package/src/{memory-ask-browser-entry.mjs → surfaces/web/memory-ask-browser-entry.mjs} +5 -5
- package/src/{memory-ask-browser.bundle.js → surfaces/web/memory-ask-browser.bundle.js} +9465 -6366
- package/src/tools/catalog.mjs +29 -0
- package/src/{conformance.mjs → tools/conformance.mjs} +2 -2
- package/src/tools/definitions.mjs +288 -0
- package/src/tools/graph-load.mjs +20 -0
- package/src/tools/handlers/index.mjs +54 -0
- package/src/tools/handlers/kit.mjs +33 -0
- package/src/tools/handlers/tmct-architecture.mjs +7 -0
- package/src/tools/handlers/tmct-ask.mjs +14 -0
- package/src/tools/handlers/tmct-callees.mjs +6 -0
- package/src/tools/handlers/tmct-callers.mjs +6 -0
- package/src/tools/handlers/tmct-calls.mjs +6 -0
- package/src/tools/handlers/tmct-class-history.mjs +6 -0
- package/src/tools/handlers/tmct-cochanges.mjs +6 -0
- package/src/tools/handlers/tmct-context-more.mjs +9 -0
- package/src/tools/handlers/tmct-context.mjs +163 -0
- package/src/tools/handlers/tmct-describe.mjs +15 -0
- package/src/tools/handlers/tmct-exports.mjs +9 -0
- package/src/tools/handlers/tmct-file-history.mjs +6 -0
- package/src/tools/handlers/tmct-history.mjs +6 -0
- package/src/tools/handlers/tmct-impact.mjs +9 -0
- package/src/tools/handlers/tmct-members.mjs +16 -0
- package/src/tools/handlers/tmct-method-history.mjs +6 -0
- package/src/tools/handlers/tmct-search.mjs +22 -0
- package/src/tools/handlers/tmct-signature.mjs +6 -0
- package/src/tools/handlers/tmct-snippet.mjs +37 -0
- package/src/tools/handlers/tmct-subclasses.mjs +16 -0
- package/src/tools/handlers/tmct-tests-for.mjs +6 -0
- package/src/tools/handlers/tmct-untested.mjs +7 -0
- package/src/tools/memory-fallthrough.mjs +65 -0
- package/src/{schema-docs.mjs → tools/schema-docs.mjs} +1 -1
- package/src/tools/server.mjs +61 -0
- package/src/answer-variants.mjs +0 -39
- package/src/hash.mjs +0 -24
- package/src/server.mjs +0 -501
- /package/src/{corpus → adapters/corpus}/unknown-ingest.mjs +0 -0
- /package/src/{graph-merge.mjs → adapters/graph-merge.mjs} +0 -0
- /package/src/{memory → adapters/memory}/inspect.mjs +0 -0
- /package/src/{memory → adapters/memory}/shacl.mjs +0 -0
- /package/src/{prose-nlp.mjs → adapters/prose-nlp.mjs} +0 -0
- /package/src/{repository-interface.mjs → adapters/repository-interface.mjs} +0 -0
- /package/src/{uuid.mjs → adapters/uuid.mjs} +0 -0
- /package/src/{wink-model.mjs → adapters/wink-model.mjs} +0 -0
- /package/src/{completions → domain/completions}/prune.mjs +0 -0
- /package/src/{concept.mjs → domain/concept.mjs} +0 -0
- /package/src/{domain.mjs → domain/domain.mjs} +0 -0
- /package/src/{interpret → domain/interpret}/merge.mjs +0 -0
- /package/src/{interpret → domain/interpret}/strategies/grammar.mjs +0 -0
- /package/src/{interpret → domain/interpret}/strategies/noise-strip.mjs +0 -0
- /package/src/{memory → domain/memory}/bias.mjs +0 -0
- /package/src/{planning.mjs → domain/planning.mjs} +0 -0
- /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,
|
|
19
|
-
import { TOOLS } from "
|
|
20
|
-
import { parseEntities } from "
|
|
21
|
-
import { uuidv7 } from "
|
|
22
|
-
import * as defaultSource from "
|
|
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 "
|
|
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 "
|
|
10
|
-
import { createInMemoryStore, normFactTerm } from "
|
|
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)
|