@jcmrs/opencode-vmem 1.0.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.
Files changed (140) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/LICENSE +21 -0
  3. package/README.md +172 -0
  4. package/dist/capture/classification.d.ts +37 -0
  5. package/dist/capture/classification.d.ts.map +1 -0
  6. package/dist/capture/classification.js +181 -0
  7. package/dist/capture/classification.js.map +1 -0
  8. package/dist/capture/filtering.d.ts +63 -0
  9. package/dist/capture/filtering.d.ts.map +1 -0
  10. package/dist/capture/filtering.js +195 -0
  11. package/dist/capture/filtering.js.map +1 -0
  12. package/dist/capture/observation.d.ts +28 -0
  13. package/dist/capture/observation.d.ts.map +1 -0
  14. package/dist/capture/observation.js +188 -0
  15. package/dist/capture/observation.js.map +1 -0
  16. package/dist/commands/index.d.ts +38 -0
  17. package/dist/commands/index.d.ts.map +1 -0
  18. package/dist/commands/index.js +375 -0
  19. package/dist/commands/index.js.map +1 -0
  20. package/dist/config.d.ts +5 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +41 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/context/builder.d.ts +19 -0
  25. package/dist/context/builder.d.ts.map +1 -0
  26. package/dist/context/builder.js +209 -0
  27. package/dist/context/builder.js.map +1 -0
  28. package/dist/context/format.d.ts +32 -0
  29. package/dist/context/format.d.ts.map +1 -0
  30. package/dist/context/format.js +211 -0
  31. package/dist/context/format.js.map +1 -0
  32. package/dist/embedding/index.d.ts +3 -0
  33. package/dist/embedding/index.d.ts.map +1 -0
  34. package/dist/embedding/index.js +3 -0
  35. package/dist/embedding/index.js.map +1 -0
  36. package/dist/embedding/provider.d.ts +15 -0
  37. package/dist/embedding/provider.d.ts.map +1 -0
  38. package/dist/embedding/provider.js +19 -0
  39. package/dist/embedding/provider.js.map +1 -0
  40. package/dist/embedding/transformers.d.ts +14 -0
  41. package/dist/embedding/transformers.d.ts.map +1 -0
  42. package/dist/embedding/transformers.js +55 -0
  43. package/dist/embedding/transformers.js.map +1 -0
  44. package/dist/extract/confidence.d.ts +48 -0
  45. package/dist/extract/confidence.d.ts.map +1 -0
  46. package/dist/extract/confidence.js +230 -0
  47. package/dist/extract/confidence.js.map +1 -0
  48. package/dist/extract/llm-extractor.d.ts +35 -0
  49. package/dist/extract/llm-extractor.d.ts.map +1 -0
  50. package/dist/extract/llm-extractor.js +204 -0
  51. package/dist/extract/llm-extractor.js.map +1 -0
  52. package/dist/extract/pipeline.d.ts +44 -0
  53. package/dist/extract/pipeline.d.ts.map +1 -0
  54. package/dist/extract/pipeline.js +171 -0
  55. package/dist/extract/pipeline.js.map +1 -0
  56. package/dist/extract/rules-engine.d.ts +14 -0
  57. package/dist/extract/rules-engine.d.ts.map +1 -0
  58. package/dist/extract/rules-engine.js +314 -0
  59. package/dist/extract/rules-engine.js.map +1 -0
  60. package/dist/extract/summarizer.d.ts +27 -0
  61. package/dist/extract/summarizer.d.ts.map +1 -0
  62. package/dist/extract/summarizer.js +148 -0
  63. package/dist/extract/summarizer.js.map +1 -0
  64. package/dist/hooks/session-idle.d.ts +38 -0
  65. package/dist/hooks/session-idle.d.ts.map +1 -0
  66. package/dist/hooks/session-idle.js +142 -0
  67. package/dist/hooks/session-idle.js.map +1 -0
  68. package/dist/hooks/system-transform.d.ts +41 -0
  69. package/dist/hooks/system-transform.d.ts.map +1 -0
  70. package/dist/hooks/system-transform.js +98 -0
  71. package/dist/hooks/system-transform.js.map +1 -0
  72. package/dist/hooks/tool-after.d.ts +66 -0
  73. package/dist/hooks/tool-after.d.ts.map +1 -0
  74. package/dist/hooks/tool-after.js +155 -0
  75. package/dist/hooks/tool-after.js.map +1 -0
  76. package/dist/index.d.ts +10 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +10 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/mind.d.ts +69 -0
  81. package/dist/mind.d.ts.map +1 -0
  82. package/dist/mind.js +368 -0
  83. package/dist/mind.js.map +1 -0
  84. package/dist/procedural/index.d.ts +4 -0
  85. package/dist/procedural/index.d.ts.map +1 -0
  86. package/dist/procedural/index.js +4 -0
  87. package/dist/procedural/index.js.map +1 -0
  88. package/dist/procedural/induction.d.ts +23 -0
  89. package/dist/procedural/induction.d.ts.map +1 -0
  90. package/dist/procedural/induction.js +104 -0
  91. package/dist/procedural/induction.js.map +1 -0
  92. package/dist/procedural/miner.d.ts +45 -0
  93. package/dist/procedural/miner.d.ts.map +1 -0
  94. package/dist/procedural/miner.js +171 -0
  95. package/dist/procedural/miner.js.map +1 -0
  96. package/dist/procedural/suggester.d.ts +20 -0
  97. package/dist/procedural/suggester.d.ts.map +1 -0
  98. package/dist/procedural/suggester.js +69 -0
  99. package/dist/procedural/suggester.js.map +1 -0
  100. package/dist/store/archive.d.ts +31 -0
  101. package/dist/store/archive.d.ts.map +1 -0
  102. package/dist/store/archive.js +137 -0
  103. package/dist/store/archive.js.map +1 -0
  104. package/dist/store/backup.d.ts +36 -0
  105. package/dist/store/backup.d.ts.map +1 -0
  106. package/dist/store/backup.js +163 -0
  107. package/dist/store/backup.js.map +1 -0
  108. package/dist/store/memorycards.d.ts +31 -0
  109. package/dist/store/memorycards.d.ts.map +1 -0
  110. package/dist/store/memorycards.js +161 -0
  111. package/dist/store/memorycards.js.map +1 -0
  112. package/dist/store/mv2-adapter.d.ts +29 -0
  113. package/dist/store/mv2-adapter.d.ts.map +1 -0
  114. package/dist/store/mv2-adapter.js +359 -0
  115. package/dist/store/mv2-adapter.js.map +1 -0
  116. package/dist/store/procedures.d.ts +79 -0
  117. package/dist/store/procedures.d.ts.map +1 -0
  118. package/dist/store/procedures.js +183 -0
  119. package/dist/store/procedures.js.map +1 -0
  120. package/dist/store/tombstone.d.ts +27 -0
  121. package/dist/store/tombstone.d.ts.map +1 -0
  122. package/dist/store/tombstone.js +136 -0
  123. package/dist/store/tombstone.js.map +1 -0
  124. package/dist/tools/index.d.ts +36 -0
  125. package/dist/tools/index.d.ts.map +1 -0
  126. package/dist/tools/index.js +236 -0
  127. package/dist/tools/index.js.map +1 -0
  128. package/dist/types.d.ts +301 -0
  129. package/dist/types.d.ts.map +1 -0
  130. package/dist/types.js +69 -0
  131. package/dist/types.js.map +1 -0
  132. package/dist/utils/error.d.ts +57 -0
  133. package/dist/utils/error.d.ts.map +1 -0
  134. package/dist/utils/error.js +143 -0
  135. package/dist/utils/error.js.map +1 -0
  136. package/dist/utils/uuid.d.ts +2 -0
  137. package/dist/utils/uuid.d.ts.map +1 -0
  138. package/dist/utils/uuid.js +5 -0
  139. package/dist/utils/uuid.js.map +1 -0
  140. package/package.json +67 -0
@@ -0,0 +1,4 @@
1
+ export { ProcedureSuggester, SuggestionContext, SuggestedProcedure } from './suggester.js';
2
+ export { PatternMiner, StateActionResult, PatternCandidate } from './miner.js';
3
+ export { ProcedureInduction, ProcedureCandidate } from './induction.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/procedural/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ProcedureSuggester } from './suggester.js';
2
+ export { PatternMiner } from './miner.js';
3
+ export { ProcedureInduction } from './induction.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/procedural/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAyC,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAuC,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAsB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Procedure, TriggerCondition, ProcedureStore } from '../store/procedures.js';
2
+ import { Observation } from '../types.js';
3
+ export interface ProcedureCandidate {
4
+ name: string;
5
+ description: string;
6
+ steps: Procedure['steps'];
7
+ triggers: TriggerCondition[];
8
+ sourceEpisodes: string[];
9
+ confidence: number;
10
+ }
11
+ export declare class ProcedureInduction {
12
+ private miner;
13
+ private procedureStore;
14
+ constructor(procedureStore: ProcedureStore);
15
+ mineFromObservations(observations: Observation[]): Promise<ProcedureCandidate[]>;
16
+ private createProcedureCandidate;
17
+ private generateName;
18
+ private generateDescription;
19
+ private inferTriggers;
20
+ storeCandidate(candidate: ProcedureCandidate): Promise<string>;
21
+ mineAndStore(observations: Observation[]): Promise<string[]>;
22
+ }
23
+ //# sourceMappingURL=induction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"induction.d.ts","sourceRoot":"","sources":["../../src/procedural/induction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,cAAc,CAAiB;gBAE3B,cAAc,EAAE,cAAc;IAKpC,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAgBtF,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,aAAa;IAkCf,cAAc,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAU9D,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAanE"}
@@ -0,0 +1,104 @@
1
+ import { PatternMiner } from './miner.js';
2
+ export class ProcedureInduction {
3
+ miner;
4
+ procedureStore;
5
+ constructor(procedureStore) {
6
+ this.miner = new PatternMiner();
7
+ this.procedureStore = procedureStore;
8
+ }
9
+ async mineFromObservations(observations) {
10
+ const sars = this.miner.extractSAR(observations);
11
+ const patterns = this.miner.findPatterns(sars);
12
+ const candidates = [];
13
+ for (const pattern of patterns) {
14
+ if (pattern.avgSuccess >= 0.5 && pattern.occurrences >= 2) {
15
+ const candidate = this.createProcedureCandidate(pattern, observations);
16
+ candidates.push(candidate);
17
+ }
18
+ }
19
+ return candidates;
20
+ }
21
+ createProcedureCandidate(pattern, _observations) {
22
+ const [tool, actionType] = pattern.pattern.split(':');
23
+ const name = this.generateName(tool, actionType, pattern.examples);
24
+ const description = this.generateDescription(tool, actionType, pattern);
25
+ const steps = this.miner.sarsToProcedureSteps(pattern.examples);
26
+ const triggers = this.inferTriggers(tool, actionType, pattern.examples);
27
+ return {
28
+ name,
29
+ description,
30
+ steps,
31
+ triggers,
32
+ sourceEpisodes: pattern.examples.map(e => e.sourceId),
33
+ confidence: pattern.avgSuccess
34
+ };
35
+ }
36
+ generateName(tool, actionType, examples) {
37
+ const firstExample = examples[0];
38
+ if (firstExample?.preState.files?.length) {
39
+ const file = firstExample.preState.files[0];
40
+ const ext = file.split('.').pop();
41
+ return `${actionType.charAt(0).toUpperCase() + actionType.slice(1)} ${ext?.toUpperCase() || 'File'}`;
42
+ }
43
+ const entities = firstExample?.preState.entities || [];
44
+ if (entities.length > 0) {
45
+ return `${actionType.charAt(0).toUpperCase() + actionType.slice(1)} ${entities[0]}`;
46
+ }
47
+ return `${tool.charAt(0).toUpperCase() + tool.slice(1)} ${actionType}`;
48
+ }
49
+ generateDescription(tool, actionType, pattern) {
50
+ const successRate = (pattern.avgSuccess * 100).toFixed(0);
51
+ return `Automatically discovered procedure for ${actionType} using ${tool}. ` +
52
+ `Success rate: ${successRate}% based on ${pattern.occurrences} observations.`;
53
+ }
54
+ inferTriggers(tool, _actionType, examples) {
55
+ const triggers = [];
56
+ const filePatterns = new Set();
57
+ for (const example of examples) {
58
+ if (example.preState.files) {
59
+ for (const file of example.preState.files) {
60
+ const ext = file.split('.').pop();
61
+ if (ext) {
62
+ filePatterns.add(`\\.${ext}$`);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ for (const pattern of filePatterns) {
68
+ triggers.push({
69
+ type: 'file_pattern',
70
+ pattern,
71
+ minConfidence: 0.5
72
+ });
73
+ }
74
+ if (triggers.length === 0) {
75
+ triggers.push({
76
+ type: 'context',
77
+ pattern: tool,
78
+ minConfidence: 0.3
79
+ });
80
+ }
81
+ return triggers.slice(0, 3);
82
+ }
83
+ async storeCandidate(candidate) {
84
+ return this.procedureStore.add({
85
+ name: candidate.name,
86
+ description: candidate.description,
87
+ steps: candidate.steps,
88
+ triggers: candidate.triggers,
89
+ sourceEpisodes: candidate.sourceEpisodes
90
+ });
91
+ }
92
+ async mineAndStore(observations) {
93
+ const candidates = await this.mineFromObservations(observations);
94
+ const ids = [];
95
+ for (const candidate of candidates) {
96
+ if (candidate.confidence >= 0.6) {
97
+ const id = await this.storeCandidate(candidate);
98
+ ids.push(id);
99
+ }
100
+ }
101
+ return ids;
102
+ }
103
+ }
104
+ //# sourceMappingURL=induction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"induction.js","sourceRoot":"","sources":["../../src/procedural/induction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { Observation } from '../types.js';
2
+ import { ProcedureStep } from '../store/procedures.js';
3
+ export interface StateActionResult {
4
+ preState: {
5
+ context: string;
6
+ entities: string[];
7
+ files?: string[];
8
+ problemType?: string;
9
+ attributes: Record<string, unknown>;
10
+ };
11
+ action: {
12
+ tool: string;
13
+ actionType: string;
14
+ parameters: Record<string, unknown>;
15
+ description: string;
16
+ };
17
+ postState: {
18
+ context: string;
19
+ entities: string[];
20
+ files?: string[];
21
+ outcome: 'success' | 'failure' | 'partial';
22
+ };
23
+ confidence: number;
24
+ sourceId: string;
25
+ }
26
+ export interface PatternCandidate {
27
+ pattern: string;
28
+ occurrences: number;
29
+ avgSuccess: number;
30
+ examples: StateActionResult[];
31
+ }
32
+ export declare class PatternMiner {
33
+ extractSAR(observations: Observation[]): StateActionResult[];
34
+ private isActionableObservation;
35
+ private createSAR;
36
+ private extractEntities;
37
+ private extractFiles;
38
+ private inferActionType;
39
+ private describeAction;
40
+ private determineOutcome;
41
+ private calculateConfidence;
42
+ findPatterns(sars: StateActionResult[]): PatternCandidate[];
43
+ sarsToProcedureSteps(sars: StateActionResult[]): ProcedureStep[];
44
+ }
45
+ //# sourceMappingURL=miner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miner.d.ts","sourceRoot":"","sources":["../../src/procedural/miner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;KAC5C,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,qBAAa,YAAY;IACvB,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE;IAkB5D,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,SAAS;IAiCjB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,mBAAmB;IAY3B,YAAY,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,EAAE;IA8B3D,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE;CAUjE"}
@@ -0,0 +1,171 @@
1
+ export class PatternMiner {
2
+ extractSAR(observations) {
3
+ const results = [];
4
+ for (let i = 0; i < observations.length - 1; i++) {
5
+ const obs = observations[i];
6
+ const nextObs = observations[i + 1];
7
+ if (this.isActionableObservation(obs)) {
8
+ const sar = this.createSAR(obs, nextObs);
9
+ if (sar) {
10
+ results.push(sar);
11
+ }
12
+ }
13
+ }
14
+ return results;
15
+ }
16
+ isActionableObservation(obs) {
17
+ const actionableTools = ['edit', 'write', 'bash', 'read'];
18
+ return actionableTools.includes(obs.tool);
19
+ }
20
+ createSAR(obs, nextObs) {
21
+ const action = obs.tool;
22
+ const input = obs.input || {};
23
+ const output = obs.output || '';
24
+ const entities = this.extractEntities(obs.content);
25
+ const files = this.extractFiles(obs);
26
+ const outcome = this.determineOutcome(obs, nextObs);
27
+ return {
28
+ preState: {
29
+ context: obs.content.slice(0, 200),
30
+ entities,
31
+ files,
32
+ attributes: { type: obs.type }
33
+ },
34
+ action: {
35
+ tool: action,
36
+ actionType: this.inferActionType(action, input),
37
+ parameters: input,
38
+ description: this.describeAction(action, input, output)
39
+ },
40
+ postState: {
41
+ context: nextObs?.content?.slice(0, 200) || 'Action completed',
42
+ entities: nextObs ? this.extractEntities(nextObs.content) : entities,
43
+ outcome
44
+ },
45
+ confidence: this.calculateConfidence(obs, outcome),
46
+ sourceId: obs.id || ''
47
+ };
48
+ }
49
+ extractEntities(content) {
50
+ const entities = [];
51
+ const codePatterns = [
52
+ /\b(function|class|interface|type|const|let|var)\s+(\w+)/g,
53
+ /\b(import|export)\s+(\w+)/g,
54
+ /(['"`])(\w+)\1/g
55
+ ];
56
+ for (const pattern of codePatterns) {
57
+ let match;
58
+ while ((match = pattern.exec(content)) !== null) {
59
+ if (match[2] && match[2].length > 2) {
60
+ entities.push(match[2]);
61
+ }
62
+ }
63
+ }
64
+ return [...new Set(entities)].slice(0, 10);
65
+ }
66
+ extractFiles(obs) {
67
+ const files = [];
68
+ if (obs.input?.filePath) {
69
+ files.push(String(obs.input.filePath));
70
+ }
71
+ if (obs.input?.path) {
72
+ files.push(String(obs.input.path));
73
+ }
74
+ if (obs.input?.files && Array.isArray(obs.input.files)) {
75
+ files.push(...obs.input.files.map(String));
76
+ }
77
+ const filePattern = /['"`]([/\w.-]+\.\w+)['"`]/g;
78
+ let match;
79
+ while ((match = filePattern.exec(obs.content)) !== null) {
80
+ files.push(match[1]);
81
+ }
82
+ return files.length > 0 ? [...new Set(files)] : undefined;
83
+ }
84
+ inferActionType(tool, input) {
85
+ switch (tool) {
86
+ case 'edit':
87
+ return 'modify';
88
+ case 'write':
89
+ return 'create';
90
+ case 'bash':
91
+ return input.command?.split(' ')[0] || 'execute';
92
+ case 'read':
93
+ return 'inspect';
94
+ default:
95
+ return tool;
96
+ }
97
+ }
98
+ describeAction(tool, input, _output) {
99
+ switch (tool) {
100
+ case 'edit':
101
+ return `Edit ${input.filePath || 'file'}`;
102
+ case 'write':
103
+ return `Create ${input.filePath || 'file'}`;
104
+ case 'bash':
105
+ return `Run: ${input.command?.slice(0, 50) || 'command'}`;
106
+ case 'read':
107
+ return `Read ${input.filePath || 'file'}`;
108
+ default:
109
+ return `${tool} operation`;
110
+ }
111
+ }
112
+ determineOutcome(obs, nextObs) {
113
+ if (obs.type === 'error') {
114
+ return 'failure';
115
+ }
116
+ if (nextObs?.type === 'error') {
117
+ return 'partial';
118
+ }
119
+ if (obs.confidence >= 0.7) {
120
+ return 'success';
121
+ }
122
+ if (obs.confidence >= 0.4) {
123
+ return 'partial';
124
+ }
125
+ return 'failure';
126
+ }
127
+ calculateConfidence(obs, outcome) {
128
+ let confidence = obs.confidence;
129
+ if (outcome === 'success') {
130
+ confidence = Math.min(confidence + 0.2, 1);
131
+ }
132
+ else if (outcome === 'failure') {
133
+ confidence = Math.max(confidence - 0.3, 0);
134
+ }
135
+ return confidence;
136
+ }
137
+ findPatterns(sars) {
138
+ const patternMap = new Map();
139
+ for (const sar of sars) {
140
+ const key = `${sar.action.tool}:${sar.action.actionType}`;
141
+ if (!patternMap.has(key)) {
142
+ patternMap.set(key, []);
143
+ }
144
+ patternMap.get(key).push(sar);
145
+ }
146
+ const candidates = [];
147
+ for (const [pattern, examples] of patternMap) {
148
+ if (examples.length >= 2) {
149
+ const successCount = examples.filter(e => e.postState.outcome === 'success').length;
150
+ candidates.push({
151
+ pattern,
152
+ occurrences: examples.length,
153
+ avgSuccess: successCount / examples.length,
154
+ examples: examples.slice(0, 5)
155
+ });
156
+ }
157
+ }
158
+ return candidates.sort((a, b) => b.avgSuccess - a.avgSuccess);
159
+ }
160
+ sarsToProcedureSteps(sars) {
161
+ return sars.map((sar, index) => ({
162
+ order: index + 1,
163
+ preState: sar.preState,
164
+ action: sar.action,
165
+ postState: sar.postState,
166
+ outcome: sar.postState.outcome,
167
+ confidence: sar.confidence
168
+ }));
169
+ }
170
+ }
171
+ //# sourceMappingURL=miner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miner.js","sourceRoot":"","sources":["../../src/procedural/miner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Procedure, ProcedureStore, TriggerCondition } from '../store/procedures.js';
2
+ export interface SuggestionContext {
3
+ problemType?: string;
4
+ goal?: string;
5
+ files?: string[];
6
+ recentObservations?: string[];
7
+ }
8
+ export interface SuggestedProcedure {
9
+ procedure: Procedure;
10
+ relevanceScore: number;
11
+ matchedTriggers: TriggerCondition[];
12
+ }
13
+ export declare class ProcedureSuggester {
14
+ private procedureStore;
15
+ constructor(procedureStore: ProcedureStore);
16
+ suggest(context: SuggestionContext): Promise<SuggestedProcedure[]>;
17
+ private calculateRelevance;
18
+ getTopSuggestions(context: SuggestionContext, limit?: number): Promise<SuggestedProcedure[]>;
19
+ }
20
+ //# sourceMappingURL=suggester.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggester.d.ts","sourceRoot":"","sources":["../../src/procedural/suggester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAErF,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,gBAAgB,EAAE,CAAC;CACrC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,cAAc,CAAiB;gBAE3B,cAAc,EAAE,cAAc;IAIpC,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAsBxE,OAAO,CAAC,kBAAkB;IAwDpB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAItG"}
@@ -0,0 +1,69 @@
1
+ export class ProcedureSuggester {
2
+ procedureStore;
3
+ constructor(procedureStore) {
4
+ this.procedureStore = procedureStore;
5
+ }
6
+ async suggest(context) {
7
+ const matches = await this.procedureStore.findMatchingTriggers({
8
+ problemType: context.problemType,
9
+ goal: context.goal,
10
+ files: context.files
11
+ });
12
+ const suggestions = [];
13
+ for (const procedure of matches) {
14
+ const { score, matchedTriggers } = this.calculateRelevance(procedure, context);
15
+ suggestions.push({
16
+ procedure,
17
+ relevanceScore: score,
18
+ matchedTriggers
19
+ });
20
+ }
21
+ return suggestions.sort((a, b) => b.relevanceScore - a.relevanceScore);
22
+ }
23
+ calculateRelevance(procedure, context) {
24
+ const matchedTriggers = [];
25
+ let score = 0;
26
+ for (const trigger of procedure.triggers) {
27
+ let matched = false;
28
+ switch (trigger.type) {
29
+ case 'problem':
30
+ if (context.problemType?.toLowerCase().includes(trigger.pattern.toLowerCase())) {
31
+ matched = true;
32
+ score += 0.4;
33
+ }
34
+ break;
35
+ case 'goal':
36
+ if (context.goal?.toLowerCase().includes(trigger.pattern.toLowerCase())) {
37
+ matched = true;
38
+ score += 0.3;
39
+ }
40
+ break;
41
+ case 'file_pattern':
42
+ if (context.files?.some(f => new RegExp(trigger.pattern, 'i').test(f))) {
43
+ matched = true;
44
+ score += 0.2;
45
+ }
46
+ break;
47
+ case 'context':
48
+ if (context.recentObservations?.some(o => o.toLowerCase().includes(trigger.pattern.toLowerCase()))) {
49
+ matched = true;
50
+ score += 0.1;
51
+ }
52
+ break;
53
+ }
54
+ if (matched) {
55
+ matchedTriggers.push(trigger);
56
+ }
57
+ }
58
+ score += procedure.successRate * 0.3;
59
+ if (procedure.executionCount > 0) {
60
+ score += Math.min(procedure.executionCount * 0.02, 0.2);
61
+ }
62
+ return { score: Math.min(score, 1), matchedTriggers };
63
+ }
64
+ async getTopSuggestions(context, limit = 5) {
65
+ const suggestions = await this.suggest(context);
66
+ return suggestions.slice(0, limit);
67
+ }
68
+ }
69
+ //# sourceMappingURL=suggester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggester.js","sourceRoot":"","sources":["../../src/procedural/suggester.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface ArchiveInfo {
2
+ path: string;
3
+ size: number;
4
+ createdAt: number;
5
+ frameCount: number;
6
+ reason: string;
7
+ }
8
+ export interface ArchiveIndex {
9
+ version: number;
10
+ archives: ArchiveInfo[];
11
+ lastUpdated: number;
12
+ }
13
+ export declare class ArchiveManager {
14
+ private archiveDir;
15
+ private index;
16
+ constructor(projectDir: string);
17
+ private loadIndex;
18
+ private saveIndex;
19
+ archive(sourcePath: string, reason: string, frameCount: number): Promise<string | null>;
20
+ listArchives(): Promise<ArchiveInfo[]>;
21
+ getArchive(path: string): Promise<ArchiveInfo | null>;
22
+ deleteArchive(path: string): Promise<boolean>;
23
+ pruneArchives(keepCount: number): Promise<number>;
24
+ getStats(): Promise<{
25
+ totalArchives: number;
26
+ totalSize: number;
27
+ oldestArchive: number | null;
28
+ newestArchive: number | null;
29
+ }>;
30
+ }
31
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/store/archive.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAA6B;gBAE9B,UAAU,EAAE,MAAM;YAIhB,SAAS;YAmBT,SAAS;IAUjB,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmCnB,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKtC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKrD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB7C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BjD,QAAQ,IAAI,OAAO,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;CA6BH"}