@hyperlynq/synaptic 0.7.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/LICENSE +19 -0
- package/README.md +427 -0
- package/build/scripts/rebuild-index.d.ts +5 -0
- package/build/scripts/rebuild-index.js +33 -0
- package/build/src/cli/init.d.ts +13 -0
- package/build/src/cli/init.js +222 -0
- package/build/src/cli/init.js.map +1 -0
- package/build/src/cli/pre-commit.d.ts +6 -0
- package/build/src/cli/pre-commit.js +159 -0
- package/build/src/cli/pre-commit.js.map +1 -0
- package/build/src/cli.d.ts +2 -0
- package/build/src/cli.js +36 -0
- package/build/src/cli.js.map +1 -0
- package/build/src/hooks/pre-compact.d.ts +6 -0
- package/build/src/hooks/pre-compact.js +64 -0
- package/build/src/hooks/pre-compact.js.map +1 -0
- package/build/src/hooks/session-start.d.ts +13 -0
- package/build/src/hooks/session-start.js +277 -0
- package/build/src/hooks/session-start.js.map +1 -0
- package/build/src/hooks/stop.d.ts +7 -0
- package/build/src/hooks/stop.js +248 -0
- package/build/src/hooks/stop.js.map +1 -0
- package/build/src/index.d.ts +1 -0
- package/build/src/index.js +8 -0
- package/build/src/index.js.map +1 -0
- package/build/src/server.d.ts +6 -0
- package/build/src/server.js +133 -0
- package/build/src/server.js.map +1 -0
- package/build/src/storage/embedder.d.ts +27 -0
- package/build/src/storage/embedder.js +126 -0
- package/build/src/storage/embedder.js.map +1 -0
- package/build/src/storage/git.d.ts +20 -0
- package/build/src/storage/git.js +98 -0
- package/build/src/storage/git.js.map +1 -0
- package/build/src/storage/maintenance.d.ts +9 -0
- package/build/src/storage/maintenance.js +46 -0
- package/build/src/storage/maintenance.js.map +1 -0
- package/build/src/storage/markdown.d.ts +21 -0
- package/build/src/storage/markdown.js +79 -0
- package/build/src/storage/markdown.js.map +1 -0
- package/build/src/storage/paths.d.ts +6 -0
- package/build/src/storage/paths.js +17 -0
- package/build/src/storage/paths.js.map +1 -0
- package/build/src/storage/project.d.ts +2 -0
- package/build/src/storage/project.js +35 -0
- package/build/src/storage/project.js.map +1 -0
- package/build/src/storage/session.d.ts +1 -0
- package/build/src/storage/session.js +17 -0
- package/build/src/storage/session.js.map +1 -0
- package/build/src/storage/sqlite.d.ts +102 -0
- package/build/src/storage/sqlite.js +830 -0
- package/build/src/storage/sqlite.js.map +1 -0
- package/build/src/storage/watcher.d.ts +22 -0
- package/build/src/storage/watcher.js +126 -0
- package/build/src/storage/watcher.js.map +1 -0
- package/build/src/tools/context-archive.d.ts +11 -0
- package/build/src/tools/context-archive.js +13 -0
- package/build/src/tools/context-archive.js.map +1 -0
- package/build/src/tools/context-chain.d.ts +12 -0
- package/build/src/tools/context-chain.js +26 -0
- package/build/src/tools/context-chain.js.map +1 -0
- package/build/src/tools/context-cochanges.d.ts +20 -0
- package/build/src/tools/context-cochanges.js +25 -0
- package/build/src/tools/context-cochanges.js.map +1 -0
- package/build/src/tools/context-delete-rule.d.ts +11 -0
- package/build/src/tools/context-delete-rule.js +12 -0
- package/build/src/tools/context-delete-rule.js.map +1 -0
- package/build/src/tools/context-dna.d.ts +18 -0
- package/build/src/tools/context-dna.js +197 -0
- package/build/src/tools/context-dna.js.map +1 -0
- package/build/src/tools/context-git-index.d.ts +17 -0
- package/build/src/tools/context-git-index.js +59 -0
- package/build/src/tools/context-git-index.js.map +1 -0
- package/build/src/tools/context-list-rules.d.ts +8 -0
- package/build/src/tools/context-list-rules.js +11 -0
- package/build/src/tools/context-list-rules.js.map +1 -0
- package/build/src/tools/context-list.d.ts +26 -0
- package/build/src/tools/context-list.js +42 -0
- package/build/src/tools/context-list.js.map +1 -0
- package/build/src/tools/context-resolve-pattern.d.ts +11 -0
- package/build/src/tools/context-resolve-pattern.js +9 -0
- package/build/src/tools/context-resolve-pattern.js.map +1 -0
- package/build/src/tools/context-save-rule.d.ts +14 -0
- package/build/src/tools/context-save-rule.js +15 -0
- package/build/src/tools/context-save-rule.js.map +1 -0
- package/build/src/tools/context-save.d.ts +26 -0
- package/build/src/tools/context-save.js +68 -0
- package/build/src/tools/context-save.js.map +1 -0
- package/build/src/tools/context-search.d.ts +31 -0
- package/build/src/tools/context-search.js +99 -0
- package/build/src/tools/context-search.js.map +1 -0
- package/build/src/tools/context-session.d.ts +13 -0
- package/build/src/tools/context-session.js +29 -0
- package/build/src/tools/context-session.js.map +1 -0
- package/build/src/tools/context-status.d.ts +13 -0
- package/build/src/tools/context-status.js +15 -0
- package/build/src/tools/context-status.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { basename } from "node:path";
|
|
3
|
+
import { isGitRepo } from "./git.js";
|
|
4
|
+
let cachedProject = null;
|
|
5
|
+
export function detectProject(cwd) {
|
|
6
|
+
if (cachedProject !== null)
|
|
7
|
+
return cachedProject;
|
|
8
|
+
const dir = cwd ?? process.cwd();
|
|
9
|
+
// Try git remote name first
|
|
10
|
+
if (isGitRepo(dir)) {
|
|
11
|
+
try {
|
|
12
|
+
const remote = execSync("git remote get-url origin", {
|
|
13
|
+
cwd: dir,
|
|
14
|
+
encoding: "utf-8",
|
|
15
|
+
timeout: 3000,
|
|
16
|
+
}).trim();
|
|
17
|
+
// Parse repo name from URL: git@github.com:user/repo.git or https://github.com/user/repo.git
|
|
18
|
+
const match = remote.match(/\/([^/]+?)(?:\.git)?$/) ?? remote.match(/:([^/]+?)(?:\.git)?$/);
|
|
19
|
+
if (match) {
|
|
20
|
+
cachedProject = match[1];
|
|
21
|
+
return cachedProject;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Fall through to folder name
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Fall back to folder name
|
|
29
|
+
cachedProject = basename(dir) || null;
|
|
30
|
+
return cachedProject;
|
|
31
|
+
}
|
|
32
|
+
export function resetProjectCache() {
|
|
33
|
+
cachedProject = null;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/storage/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,aAAa,CAAC;IACjD,MAAM,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjC,4BAA4B;IAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE;gBACnD,GAAG,EAAE,GAAG;gBACR,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,6FAA6F;YAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC5F,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACtC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getSessionId(): string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
let cachedSessionId = null;
|
|
3
|
+
export function getSessionId() {
|
|
4
|
+
if (cachedSessionId)
|
|
5
|
+
return cachedSessionId;
|
|
6
|
+
// Check env var first (Claude Code may expose this)
|
|
7
|
+
const envSession = process.env.CLAUDE_SESSION_ID ?? process.env.SESSION_ID;
|
|
8
|
+
if (envSession) {
|
|
9
|
+
cachedSessionId = envSession;
|
|
10
|
+
return cachedSessionId;
|
|
11
|
+
}
|
|
12
|
+
// Fallback: hash of pid + ppid + start time
|
|
13
|
+
const raw = `${process.pid}-${process.ppid}-${Date.now()}`;
|
|
14
|
+
cachedSessionId = createHash("sha256").update(raw).digest("hex").slice(0, 12);
|
|
15
|
+
return cachedSessionId;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/storage/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,IAAI,eAAe,GAAkB,IAAI,CAAC;AAE1C,MAAM,UAAU,YAAY;IAC1B,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAE5C,oDAAoD;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3E,IAAI,UAAU,EAAE,CAAC;QACf,eAAe,GAAG,UAAU,CAAC;QAC7B,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,4CAA4C;IAC5C,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC3D,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { ContextEntry } from "./markdown.js";
|
|
2
|
+
export declare class ContextIndex {
|
|
3
|
+
private db;
|
|
4
|
+
static assignTier(type: string, explicitTier?: string): "ephemeral" | "working" | "longterm";
|
|
5
|
+
constructor(dbPath?: string);
|
|
6
|
+
private init;
|
|
7
|
+
private migrate;
|
|
8
|
+
insert(entry: ContextEntry): number;
|
|
9
|
+
insertVec(entryRowid: number, embedding: Float32Array): void;
|
|
10
|
+
search(query: string, opts?: {
|
|
11
|
+
type?: string;
|
|
12
|
+
days?: number;
|
|
13
|
+
limit?: number;
|
|
14
|
+
includeArchived?: boolean;
|
|
15
|
+
}): ContextEntry[];
|
|
16
|
+
searchVec(embedding: Float32Array, limit: number): Array<{
|
|
17
|
+
rowid: number;
|
|
18
|
+
distance: number;
|
|
19
|
+
}>;
|
|
20
|
+
getByRowids(rowids: number[]): ContextEntry[];
|
|
21
|
+
list(opts?: {
|
|
22
|
+
days?: number;
|
|
23
|
+
type?: string;
|
|
24
|
+
includeArchived?: boolean;
|
|
25
|
+
}): ContextEntry[];
|
|
26
|
+
status(): {
|
|
27
|
+
totalEntries: number;
|
|
28
|
+
dateRange: {
|
|
29
|
+
earliest: string;
|
|
30
|
+
latest: string;
|
|
31
|
+
} | null;
|
|
32
|
+
dbSizeBytes: number;
|
|
33
|
+
tierDistribution: Record<string, number>;
|
|
34
|
+
archivedCount: number;
|
|
35
|
+
activePatterns: number;
|
|
36
|
+
};
|
|
37
|
+
clearAll(): void;
|
|
38
|
+
getRowidsByIds(ids: string[]): number[];
|
|
39
|
+
archiveEntries(ids: string[]): number;
|
|
40
|
+
bumpAccess(ids: string[]): void;
|
|
41
|
+
/** Increment access_count and set last_accessed for a given entry ID */
|
|
42
|
+
touchEntry(id: string): boolean;
|
|
43
|
+
hybridSearch(query: string, embedding: Float32Array, opts?: {
|
|
44
|
+
type?: string;
|
|
45
|
+
days?: number;
|
|
46
|
+
limit?: number;
|
|
47
|
+
tier?: string;
|
|
48
|
+
includeArchived?: boolean;
|
|
49
|
+
project?: string | null;
|
|
50
|
+
}): ContextEntry[];
|
|
51
|
+
/** Archive ephemeral entries based on access-aware windows */
|
|
52
|
+
decayEphemeral(): number;
|
|
53
|
+
/** Demote working entries based on access-aware idle windows */
|
|
54
|
+
demoteIdle(): number;
|
|
55
|
+
/** Promote decisions/insights older than 7 days to longterm */
|
|
56
|
+
promoteStable(): number;
|
|
57
|
+
/** Promote ephemeral entries accessed 3+ times to working */
|
|
58
|
+
promoteFrequent(): number;
|
|
59
|
+
getEmbedding(entryId: string): Float32Array | null;
|
|
60
|
+
findConsolidationCandidates(threshold?: number): Array<{
|
|
61
|
+
label: string;
|
|
62
|
+
entries: ContextEntry[];
|
|
63
|
+
}>;
|
|
64
|
+
hasEntryWithTag(tag: string): boolean;
|
|
65
|
+
findByTag(tag: string): ContextEntry[];
|
|
66
|
+
findSimilarIssues(embedding: Float32Array, days?: number, distanceThreshold?: number): ContextEntry[];
|
|
67
|
+
createOrUpdatePattern(label: string, entryIds: string[]): string;
|
|
68
|
+
getActivePatterns(): Array<{
|
|
69
|
+
id: string;
|
|
70
|
+
label: string;
|
|
71
|
+
entryIds: string[];
|
|
72
|
+
occurrenceCount: number;
|
|
73
|
+
firstSeen: string;
|
|
74
|
+
lastSeen: string;
|
|
75
|
+
}>;
|
|
76
|
+
getPatternForEntry(entryId: string): {
|
|
77
|
+
id: string;
|
|
78
|
+
occurrenceCount: number;
|
|
79
|
+
} | null;
|
|
80
|
+
resolvePattern(patternId: string): boolean;
|
|
81
|
+
saveRule(label: string, content: string): number;
|
|
82
|
+
listRules(): Array<ContextEntry & {
|
|
83
|
+
label: string;
|
|
84
|
+
}>;
|
|
85
|
+
deleteRule(label: string): boolean;
|
|
86
|
+
upsertFilePair(project: string, fileA: string, fileB: string, date: string): void;
|
|
87
|
+
getCoChanges(project: string, file: string, limit?: number): Array<{
|
|
88
|
+
file: string;
|
|
89
|
+
count: number;
|
|
90
|
+
lastSeen: string;
|
|
91
|
+
}>;
|
|
92
|
+
listBySession(sessionId: string, opts?: {
|
|
93
|
+
type?: string;
|
|
94
|
+
}): ContextEntry[];
|
|
95
|
+
/** Update an entry's content (for consolidation) */
|
|
96
|
+
updateEntryContent(id: string, newContent: string): boolean;
|
|
97
|
+
/** Merge tags from source entries into a target entry */
|
|
98
|
+
mergeTagsInto(targetId: string, sourceIds: string[]): void;
|
|
99
|
+
/** Change tier for an entry */
|
|
100
|
+
changeTier(id: string, tier: string): boolean;
|
|
101
|
+
close(): void;
|
|
102
|
+
}
|