@jamesaphoenix/tx-core 0.5.10 → 0.6.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.
- package/README.md +47 -4
- package/dist/errors.d.ts +25 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/layer.d.ts +8 -4
- package/dist/layer.d.ts.map +1 -1
- package/dist/layer.js +25 -4
- package/dist/layer.js.map +1 -1
- package/dist/mappers/index.d.ts +1 -0
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +2 -0
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/memory.d.ts +34 -0
- package/dist/mappers/memory.d.ts.map +1 -0
- package/dist/mappers/memory.js +135 -0
- package/dist/mappers/memory.js.map +1 -0
- package/dist/mappers/pin.d.ts +6 -0
- package/dist/mappers/pin.d.ts.map +1 -0
- package/dist/mappers/pin.js +10 -0
- package/dist/mappers/pin.js.map +1 -0
- package/dist/migrations-embedded.d.ts.map +1 -1
- package/dist/migrations-embedded.js +10 -0
- package/dist/migrations-embedded.js.map +1 -1
- package/dist/repo/index.d.ts +2 -0
- package/dist/repo/index.d.ts.map +1 -1
- package/dist/repo/index.js +2 -0
- package/dist/repo/index.js.map +1 -1
- package/dist/repo/memory-repo.d.ts +88 -0
- package/dist/repo/memory-repo.d.ts.map +1 -0
- package/dist/repo/memory-repo.js +556 -0
- package/dist/repo/memory-repo.js.map +1 -0
- package/dist/repo/pin-repo.d.ts +29 -0
- package/dist/repo/pin-repo.d.ts.map +1 -0
- package/dist/repo/pin-repo.js +79 -0
- package/dist/repo/pin-repo.js.map +1 -0
- package/dist/schemas/index.d.ts +2 -2
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/sync.d.ts +598 -3
- package/dist/schemas/sync.d.ts.map +1 -1
- package/dist/schemas/sync.js +280 -6
- package/dist/schemas/sync.js.map +1 -1
- package/dist/services/agent-service.d.ts +2 -0
- package/dist/services/agent-service.d.ts.map +1 -1
- package/dist/services/agent-service.js +15 -1
- package/dist/services/agent-service.js.map +1 -1
- package/dist/services/cycle-scan-service.d.ts.map +1 -1
- package/dist/services/cycle-scan-service.js +11 -7
- package/dist/services/cycle-scan-service.js.map +1 -1
- package/dist/services/diversifier-service.d.ts +2 -2
- package/dist/services/diversifier-service.d.ts.map +1 -1
- package/dist/services/diversifier-service.js.map +1 -1
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/learning-service.d.ts +3 -2
- package/dist/services/learning-service.d.ts.map +1 -1
- package/dist/services/learning-service.js.map +1 -1
- package/dist/services/memory-retriever-service.d.ts +48 -0
- package/dist/services/memory-retriever-service.d.ts.map +1 -0
- package/dist/services/memory-retriever-service.js +332 -0
- package/dist/services/memory-retriever-service.js.map +1 -0
- package/dist/services/memory-service.d.ts +49 -0
- package/dist/services/memory-service.d.ts.map +1 -0
- package/dist/services/memory-service.js +1061 -0
- package/dist/services/memory-service.js.map +1 -0
- package/dist/services/pin-service.d.ts +33 -0
- package/dist/services/pin-service.d.ts.map +1 -0
- package/dist/services/pin-service.js +140 -0
- package/dist/services/pin-service.js.map +1 -0
- package/dist/services/ready-service.js +1 -1
- package/dist/services/ready-service.js.map +1 -1
- package/dist/services/retriever-service.d.ts +2 -2
- package/dist/services/retriever-service.d.ts.map +1 -1
- package/dist/services/retriever-service.js.map +1 -1
- package/dist/services/sync-service.d.ts +123 -4
- package/dist/services/sync-service.d.ts.map +1 -1
- package/dist/services/sync-service.js +1099 -11
- package/dist/services/sync-service.js.map +1 -1
- package/dist/services/task-service.js +2 -2
- package/dist/services/task-service.js.map +1 -1
- package/dist/utils/math.d.ts +4 -3
- package/dist/utils/math.d.ts.map +1 -1
- package/dist/utils/math.js +9 -4
- package/dist/utils/math.js.map +1 -1
- package/dist/utils/pin-file.d.ts +33 -0
- package/dist/utils/pin-file.d.ts.map +1 -0
- package/dist/utils/pin-file.js +87 -0
- package/dist/utils/pin-file.js.map +1 -0
- package/dist/utils/toml-config.d.ts +12 -0
- package/dist/utils/toml-config.d.ts.map +1 -1
- package/dist/utils/toml-config.js +111 -1
- package/dist/utils/toml-config.js.map +1 -1
- package/migrations/029_memory.sql +83 -0
- package/migrations/030_context_pins.sql +24 -0
- package/package.json +1 -1
|
@@ -8,10 +8,14 @@ export const DASHBOARD_DEFAULT_TASK_ASSIGMENT_KEY = "default_task_assigment_type
|
|
|
8
8
|
const DASHBOARD_SECTION = "dashboard";
|
|
9
9
|
const DOCS_SECTION = "docs";
|
|
10
10
|
const CYCLES_SECTION = "cycles";
|
|
11
|
+
const PINS_SECTION = "pins";
|
|
12
|
+
const MEMORY_SECTION = "memory";
|
|
11
13
|
const DEFAULT_CONFIG = {
|
|
12
14
|
docs: { path: ".tx/docs" },
|
|
15
|
+
memory: { defaultDir: "docs" },
|
|
13
16
|
cycles: { scanPrompt: null, agents: 3, model: "claude-opus-4-6" },
|
|
14
17
|
dashboard: { defaultTaskAssigmentType: "human" },
|
|
18
|
+
pins: { targetFiles: ["CLAUDE.md", "AGENTS.md"] },
|
|
15
19
|
};
|
|
16
20
|
const isDashboardDefaultTaskAssigmentType = (value) => value === "human" || value === "agent";
|
|
17
21
|
const parseTaskAssigmentTypeOrDefault = (value) => isDashboardDefaultTaskAssigmentType(value)
|
|
@@ -34,10 +38,15 @@ export const readTxConfig = (cwd = process.cwd()) => {
|
|
|
34
38
|
const cyclesAgents = extractTomlValue(raw, CYCLES_SECTION, "agents");
|
|
35
39
|
const cyclesModel = extractTomlValue(raw, CYCLES_SECTION, "model");
|
|
36
40
|
const defaultTaskAssigmentType = extractTomlValue(raw, DASHBOARD_SECTION, DASHBOARD_DEFAULT_TASK_ASSIGMENT_KEY);
|
|
41
|
+
const memoryDefaultDir = extractTomlValue(raw, MEMORY_SECTION, "default_dir");
|
|
42
|
+
const pinsTargetFiles = extractTomlValue(raw, PINS_SECTION, "target_files");
|
|
37
43
|
return {
|
|
38
44
|
docs: {
|
|
39
45
|
path: docsPath ?? DEFAULT_CONFIG.docs.path,
|
|
40
46
|
},
|
|
47
|
+
memory: {
|
|
48
|
+
defaultDir: memoryDefaultDir ?? DEFAULT_CONFIG.memory.defaultDir,
|
|
49
|
+
},
|
|
41
50
|
cycles: {
|
|
42
51
|
scanPrompt: cyclesScanPrompt ?? DEFAULT_CONFIG.cycles.scanPrompt,
|
|
43
52
|
agents: cyclesAgents
|
|
@@ -48,6 +57,11 @@ export const readTxConfig = (cwd = process.cwd()) => {
|
|
|
48
57
|
dashboard: {
|
|
49
58
|
defaultTaskAssigmentType: parseTaskAssigmentTypeOrDefault(defaultTaskAssigmentType),
|
|
50
59
|
},
|
|
60
|
+
pins: {
|
|
61
|
+
targetFiles: pinsTargetFiles
|
|
62
|
+
? pinsTargetFiles.split(",").map(f => f.trim()).filter(Boolean)
|
|
63
|
+
: DEFAULT_CONFIG.pins.targetFiles,
|
|
64
|
+
},
|
|
51
65
|
};
|
|
52
66
|
}
|
|
53
67
|
catch {
|
|
@@ -61,7 +75,8 @@ export const readTxConfig = (cwd = process.cwd()) => {
|
|
|
61
75
|
export const writeDashboardDefaultTaskAssigmentType = (value, cwd = process.cwd()) => {
|
|
62
76
|
const configDir = resolve(cwd, ".tx");
|
|
63
77
|
const configPath = resolve(configDir, "config.toml");
|
|
64
|
-
const
|
|
78
|
+
const current = readTxConfig(cwd);
|
|
79
|
+
const nextConfig = { ...current, dashboard: { defaultTaskAssigmentType: value } };
|
|
65
80
|
mkdirSync(dirname(configPath), { recursive: true });
|
|
66
81
|
const existingRaw = existsSync(configPath) ? readFileSync(configPath, "utf8") : "";
|
|
67
82
|
const nextRaw = patchTomlKey(existingRaw, DASHBOARD_SECTION, DASHBOARD_DEFAULT_TASK_ASSIGMENT_KEY, `"${value}"`);
|
|
@@ -145,4 +160,99 @@ function patchTomlKey(toml, section, key, renderedValue) {
|
|
|
145
160
|
function escapeRegex(value) {
|
|
146
161
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
147
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* The default config.toml content with comments and doc links.
|
|
165
|
+
* Written by `tx init` if config.toml does not exist.
|
|
166
|
+
*/
|
|
167
|
+
const DEFAULT_CONFIG_TOML = `# tx configuration
|
|
168
|
+
# Full documentation: https://txdocs.dev/docs
|
|
169
|
+
#
|
|
170
|
+
# This file is created by \`tx init\` and lives at .tx/config.toml.
|
|
171
|
+
# Edit any value below to override the default. Commented-out lines
|
|
172
|
+
# show optional settings — uncomment them to enable.
|
|
173
|
+
|
|
174
|
+
# ─── Docs ───────────────────────────────────────────────────────────
|
|
175
|
+
# Structured documentation primitives for PRDs, design docs, and specs.
|
|
176
|
+
# Commands: tx doc add, tx doc show, tx doc list, tx doc validate
|
|
177
|
+
# Docs: https://txdocs.dev/docs/primitives/docs
|
|
178
|
+
[docs]
|
|
179
|
+
|
|
180
|
+
# Where tx stores YAML doc files on disk.
|
|
181
|
+
# Relative to the project root.
|
|
182
|
+
path = ".tx/docs"
|
|
183
|
+
|
|
184
|
+
# ─── Memory ─────────────────────────────────────────────────────────
|
|
185
|
+
# Filesystem-backed markdown search over your project's documentation.
|
|
186
|
+
# Index directories with \`tx memory source add <dir>\`, then search
|
|
187
|
+
# with \`tx memory search <query>\` (BM25) or \`--semantic\` (vector).
|
|
188
|
+
# Docs: https://txdocs.dev/docs/primitives/learning
|
|
189
|
+
[memory]
|
|
190
|
+
|
|
191
|
+
# Default directory used by \`tx memory add\` when no source is registered.
|
|
192
|
+
# If this directory isn't already a registered source, tx auto-registers
|
|
193
|
+
# it so new documents survive future \`tx memory index\` runs.
|
|
194
|
+
# Relative to the project root.
|
|
195
|
+
default_dir = "docs"
|
|
196
|
+
|
|
197
|
+
# ─── Cycles ─────────────────────────────────────────────────────────
|
|
198
|
+
# Sub-agent swarm for automated issue discovery.
|
|
199
|
+
# Run \`tx cycle\` to dispatch parallel scan agents that find issues,
|
|
200
|
+
# then review results in the dashboard or via \`tx list\`.
|
|
201
|
+
# Docs: https://txdocs.dev/docs/headful/docs-runs-cycles
|
|
202
|
+
[cycles]
|
|
203
|
+
|
|
204
|
+
# Optional prompt appended to each scan agent's system prompt.
|
|
205
|
+
# Use this to focus scans on specific areas (e.g. security, performance).
|
|
206
|
+
# scan_prompt = "Focus on security issues"
|
|
207
|
+
|
|
208
|
+
# Number of parallel scan agents to dispatch per cycle run.
|
|
209
|
+
# Higher values = faster scans but more API usage.
|
|
210
|
+
agents = 3
|
|
211
|
+
|
|
212
|
+
# LLM model used by cycle scan agents.
|
|
213
|
+
# Must be a valid Anthropic model ID.
|
|
214
|
+
model = "claude-opus-4-6"
|
|
215
|
+
|
|
216
|
+
# ─── Dashboard ──────────────────────────────────────────────────────
|
|
217
|
+
# Settings for the tx dashboard web UI (\`tx dashboard\`).
|
|
218
|
+
# The dashboard provides a visual interface for task management,
|
|
219
|
+
# doc browsing, run inspection, and cycle results.
|
|
220
|
+
# Docs: https://txdocs.dev/docs/headful/filters-and-settings
|
|
221
|
+
[dashboard]
|
|
222
|
+
|
|
223
|
+
# Default assignee type when creating new tasks from the dashboard.
|
|
224
|
+
# "human" = tasks are assigned to humans by default.
|
|
225
|
+
# "agent" = tasks are assigned to agents by default.
|
|
226
|
+
# Can be toggled per-task with Cmd+K in the dashboard.
|
|
227
|
+
default_task_assigment_type = "human"
|
|
228
|
+
|
|
229
|
+
# ─── Pins ───────────────────────────────────────────────────────────
|
|
230
|
+
# Context pins — persistent named content blocks that are injected
|
|
231
|
+
# into agent context files as <tx-pin id="...">...</tx-pin> XML sections.
|
|
232
|
+
# This enables programmatic CRUD of agent memory across sessions.
|
|
233
|
+
# Commands: tx pin set, tx pin get, tx pin rm, tx pin list, tx pin sync
|
|
234
|
+
# Docs: https://txdocs.dev/docs/primitives/pin
|
|
235
|
+
[pins]
|
|
236
|
+
|
|
237
|
+
# Comma-separated list of files that \`tx pin sync\` writes pins into.
|
|
238
|
+
# Paths are relative to the project root.
|
|
239
|
+
# Both Claude Code (CLAUDE.md) and Codex (AGENTS.md) are synced by default
|
|
240
|
+
# so all agents share the same persistent context.
|
|
241
|
+
target_files = "CLAUDE.md, AGENTS.md"
|
|
242
|
+
`;
|
|
243
|
+
/**
|
|
244
|
+
* Scaffold .tx/config.toml with annotated defaults.
|
|
245
|
+
* No-op if the file already exists (preserves user edits).
|
|
246
|
+
* Returns true if the file was created, false if it already existed.
|
|
247
|
+
*/
|
|
248
|
+
export const scaffoldConfigToml = (cwd = process.cwd()) => {
|
|
249
|
+
const configDir = resolve(cwd, ".tx");
|
|
250
|
+
const configPath = resolve(configDir, "config.toml");
|
|
251
|
+
if (existsSync(configPath)) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
mkdirSync(configDir, { recursive: true });
|
|
255
|
+
writeFileSync(configPath, DEFAULT_CONFIG_TOML, "utf8");
|
|
256
|
+
return true;
|
|
257
|
+
};
|
|
148
258
|
//# sourceMappingURL=toml-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toml-config.js","sourceRoot":"","sources":["../../src/utils/toml-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"toml-config.js","sourceRoot":"","sources":["../../src/utils/toml-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAY5C,MAAM,CAAC,MAAM,oCAAoC,GAAG,6BAA6B,CAAA;AACjF,MAAM,iBAAiB,GAAG,WAAW,CAAA;AACrC,MAAM,YAAY,GAAG,MAAM,CAAA;AAC3B,MAAM,cAAc,GAAG,QAAQ,CAAA;AAC/B,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B,MAAM,cAAc,GAAG,QAAQ,CAAA;AAE/B,MAAM,cAAc,GAAa;IAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IAC1B,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;IAC9B,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACjE,SAAS,EAAE,EAAE,wBAAwB,EAAE,OAAO,EAAE;IAChD,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;CAClD,CAAA;AAED,MAAM,mCAAmC,GAAG,CAC1C,KAAoB,EACwB,EAAE,CAC9C,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAA;AAExC,MAAM,+BAA+B,GAAG,CAAC,KAAoB,EAAqC,EAAE,CAClG,mCAAmC,CAAC,KAAK,CAAC;IACxC,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,wBAAwB,CAAA;AAEvD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAY,EAAE;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;IACrD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAA;IACvB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC5C,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;QAC5D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;QAC7E,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAA;QACpE,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;QAClE,MAAM,wBAAwB,GAAG,gBAAgB,CAC/C,GAAG,EACH,iBAAiB,EACjB,oCAAoC,CACrC,CAAA;QACD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;QAC7E,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;QAC3E,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI;aAC3C;YACD,MAAM,EAAE;gBACN,UAAU,EAAE,gBAAgB,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU;aACjE;YACD,MAAM,EAAE;gBACN,UAAU,EAAE,gBAAgB,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU;gBAChE,MAAM,EAAE,YAAY;oBAClB,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;oBAC5B,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM;gBAChC,KAAK,EAAE,WAAW,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK;aAClD;YACD,SAAS,EAAE;gBACT,wBAAwB,EAAE,+BAA+B,CAAC,wBAAwB,CAAC;aACpF;YACD,IAAI,EAAE;gBACJ,WAAW,EAAE,eAAe;oBAC1B,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBAC/D,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW;aACpC;SACF,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAA;IACvB,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CACpD,KAAwC,EACxC,MAAc,OAAO,CAAC,GAAG,EAAE,EACjB,EAAE;IACZ,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACpD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,UAAU,GAAa,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,CAAA;IAE3F,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,MAAM,OAAO,GAAG,YAAY,CAC1B,WAAW,EACX,iBAAiB,EACjB,oCAAoC,EACpC,IAAI,KAAK,GAAG,CACb,CAAA;IACD,aAAa,CAAC,UAAU,EAAE,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;IAEjE,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAA;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CACvB,IAAY,EACZ,OAAe,EACf,GAAW,EACI,EAAE;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,2BAA2B;QAC3B,IAAI,OAAO,KAAK,IAAI,OAAO,GAAG,EAAE,CAAC;YAC/B,SAAS,GAAG,IAAI,CAAA;YAChB,SAAQ;QACV,CAAC;QACD,oCAAoC;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;YACzC,MAAK;QACP,CAAC;QACD,2DAA2D;QAC3D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAA;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAA;YACxE,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,SAAS,YAAY,CACnB,IAAY,EACZ,OAAe,EACf,GAAW,EACX,aAAqB;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrD,MAAM,aAAa,GAAG,IAAI,OAAO,GAAG,CAAA;IACpC,MAAM,YAAY,GAAG,oBAAoB,CAAA;IACzC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,UAAU,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAE9D,IAAI,YAAY,GAAG,CAAC,CAAC,CAAA;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,aAAa,EAAE,CAAC;YACvC,YAAY,GAAG,CAAC,CAAA;YAChB,MAAK;QACP,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,GAAG,MAAM,aAAa,EAAE,CAAA;IAEhD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;QACvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,CAAA;IAC7B,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACtC,UAAU,GAAG,CAAC,CAAA;YACd,MAAK;QACP,CAAC;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,MAAM,aAAa,EAAE,CAAA;QAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,YAAY,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E3B,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAW,EAAE;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACpD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzC,aAAa,CAAC,UAAU,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAA;IACtD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
-- Migration 029: Memory system tables
|
|
2
|
+
-- Filesystem-backed memory with BM25 + vector + graph search over .md files.
|
|
3
|
+
|
|
4
|
+
-- Indexed memory documents (derived from .md files, not source of truth)
|
|
5
|
+
CREATE TABLE IF NOT EXISTS memory_documents (
|
|
6
|
+
id TEXT PRIMARY KEY,
|
|
7
|
+
file_path TEXT NOT NULL,
|
|
8
|
+
root_dir TEXT NOT NULL,
|
|
9
|
+
title TEXT NOT NULL,
|
|
10
|
+
content TEXT NOT NULL,
|
|
11
|
+
frontmatter TEXT,
|
|
12
|
+
tags TEXT,
|
|
13
|
+
file_hash TEXT NOT NULL,
|
|
14
|
+
file_mtime TEXT NOT NULL,
|
|
15
|
+
embedding BLOB,
|
|
16
|
+
created_at TEXT NOT NULL,
|
|
17
|
+
indexed_at TEXT NOT NULL,
|
|
18
|
+
UNIQUE(file_path, root_dir)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
-- FTS5 full-text search index
|
|
22
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
|
|
23
|
+
title, content, tags,
|
|
24
|
+
content='memory_documents', content_rowid='rowid',
|
|
25
|
+
tokenize='porter unicode61'
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
-- FTS5 sync triggers (keep FTS index in sync with memory_documents)
|
|
29
|
+
CREATE TRIGGER IF NOT EXISTS memory_fts_ai AFTER INSERT ON memory_documents BEGIN
|
|
30
|
+
INSERT INTO memory_fts(rowid, title, content, tags) VALUES (new.rowid, new.title, new.content, new.tags);
|
|
31
|
+
END;
|
|
32
|
+
|
|
33
|
+
CREATE TRIGGER IF NOT EXISTS memory_fts_ad AFTER DELETE ON memory_documents BEGIN
|
|
34
|
+
INSERT INTO memory_fts(memory_fts, rowid, title, content, tags) VALUES ('delete', old.rowid, old.title, old.content, old.tags);
|
|
35
|
+
END;
|
|
36
|
+
|
|
37
|
+
CREATE TRIGGER IF NOT EXISTS memory_fts_au AFTER UPDATE OF title, content, tags ON memory_documents BEGIN
|
|
38
|
+
INSERT INTO memory_fts(memory_fts, rowid, title, content, tags) VALUES ('delete', old.rowid, old.title, old.content, old.tags);
|
|
39
|
+
INSERT INTO memory_fts(rowid, title, content, tags) VALUES (new.rowid, new.title, new.content, new.tags);
|
|
40
|
+
END;
|
|
41
|
+
|
|
42
|
+
-- Wikilinks and explicit edges between documents
|
|
43
|
+
CREATE TABLE IF NOT EXISTS memory_links (
|
|
44
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
45
|
+
source_doc_id TEXT NOT NULL REFERENCES memory_documents(id) ON DELETE CASCADE,
|
|
46
|
+
target_doc_id TEXT,
|
|
47
|
+
target_ref TEXT NOT NULL,
|
|
48
|
+
link_type TEXT NOT NULL CHECK (link_type IN ('wikilink', 'frontmatter', 'explicit')),
|
|
49
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
50
|
+
UNIQUE(source_doc_id, target_ref, link_type)
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
-- Configuration: which directories to index
|
|
54
|
+
CREATE TABLE IF NOT EXISTS memory_sources (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
root_dir TEXT NOT NULL UNIQUE,
|
|
57
|
+
label TEXT,
|
|
58
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
-- Structured key-value properties per document
|
|
62
|
+
CREATE TABLE IF NOT EXISTS memory_properties (
|
|
63
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
64
|
+
doc_id TEXT NOT NULL REFERENCES memory_documents(id) ON DELETE CASCADE,
|
|
65
|
+
key TEXT NOT NULL,
|
|
66
|
+
value TEXT NOT NULL,
|
|
67
|
+
UNIQUE(doc_id, key)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
-- Indexes for efficient queries
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_memory_docs_path ON memory_documents(file_path);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_memory_docs_path_root ON memory_documents(file_path, root_dir);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_memory_docs_root ON memory_documents(root_dir);
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_memory_docs_hash ON memory_documents(file_hash);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_memory_docs_indexed_at ON memory_documents(indexed_at);
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_memory_links_source ON memory_links(source_doc_id);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_memory_links_target ON memory_links(target_doc_id) WHERE target_doc_id IS NOT NULL;
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_memory_links_ref ON memory_links(target_ref);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_memory_props_doc ON memory_properties(doc_id);
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_memory_props_key_value ON memory_properties(key, value);
|
|
81
|
+
|
|
82
|
+
-- Track schema version (must be last — only inserted after all DDL succeeds)
|
|
83
|
+
INSERT OR IGNORE INTO schema_version (version, applied_at) VALUES (29, datetime('now'));
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- Version: 030
|
|
2
|
+
-- Migration: Context pins — named content blocks for agent context files
|
|
3
|
+
|
|
4
|
+
-- Context pins table (named markdown blocks synced to CLAUDE.md, AGENTS.md, etc.)
|
|
5
|
+
CREATE TABLE IF NOT EXISTS context_pins (
|
|
6
|
+
id TEXT PRIMARY KEY,
|
|
7
|
+
content TEXT NOT NULL,
|
|
8
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
9
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
CREATE INDEX IF NOT EXISTS idx_pins_updated ON context_pins(updated_at DESC);
|
|
13
|
+
|
|
14
|
+
-- Global config for pin target files (key-value store)
|
|
15
|
+
CREATE TABLE IF NOT EXISTS pin_config (
|
|
16
|
+
key TEXT PRIMARY KEY,
|
|
17
|
+
value TEXT NOT NULL
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- Default: sync pins to CLAUDE.md only (user configures via `tx pin targets`)
|
|
21
|
+
INSERT OR IGNORE INTO pin_config (key, value) VALUES ('target_files', '["CLAUDE.md"]');
|
|
22
|
+
|
|
23
|
+
-- Record this migration
|
|
24
|
+
INSERT OR IGNORE INTO schema_version (version, applied_at) VALUES (30, datetime('now'));
|