@thispointon/kondi-chat 0.1.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.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +556 -0
  3. package/bin/kondi-chat +56 -0
  4. package/bin/kondi-chat.js +72 -0
  5. package/package.json +55 -0
  6. package/scripts/demo.tape +49 -0
  7. package/scripts/postinstall.cjs +103 -0
  8. package/src/audit/analytics.ts +261 -0
  9. package/src/audit/ledger.ts +253 -0
  10. package/src/audit/telemetry.ts +165 -0
  11. package/src/cli/backend.ts +675 -0
  12. package/src/cli/commands.ts +419 -0
  13. package/src/cli/help.ts +182 -0
  14. package/src/cli/submit-helpers.ts +159 -0
  15. package/src/cli/submit.ts +539 -0
  16. package/src/cli/wizard.ts +121 -0
  17. package/src/context/bootstrap.ts +138 -0
  18. package/src/context/budget.ts +100 -0
  19. package/src/context/manager.ts +666 -0
  20. package/src/context/memory.ts +160 -0
  21. package/src/context/preflight.ts +176 -0
  22. package/src/context/project-brain.ts +101 -0
  23. package/src/context/receipts.ts +108 -0
  24. package/src/context/skills.ts +154 -0
  25. package/src/context/symbol-index.ts +240 -0
  26. package/src/council/profiles.ts +137 -0
  27. package/src/council/tool.ts +138 -0
  28. package/src/council-engine/cli/council-artifacts.ts +230 -0
  29. package/src/council-engine/cli/council-config.ts +178 -0
  30. package/src/council-engine/cli/council-session-export.ts +116 -0
  31. package/src/council-engine/cli/kondi.ts +98 -0
  32. package/src/council-engine/cli/llm-caller.ts +229 -0
  33. package/src/council-engine/cli/localStorage-shim.ts +119 -0
  34. package/src/council-engine/cli/node-platform.ts +68 -0
  35. package/src/council-engine/cli/run-council.ts +481 -0
  36. package/src/council-engine/cli/run-pipeline.ts +772 -0
  37. package/src/council-engine/cli/session-export.ts +153 -0
  38. package/src/council-engine/configs/councils/analysis.json +101 -0
  39. package/src/council-engine/configs/councils/code-planning.json +86 -0
  40. package/src/council-engine/configs/councils/coding.json +89 -0
  41. package/src/council-engine/configs/councils/debate.json +97 -0
  42. package/src/council-engine/configs/councils/solo-claude.json +34 -0
  43. package/src/council-engine/configs/councils/solo-gpt.json +34 -0
  44. package/src/council-engine/council/coding-orchestrator.ts +1205 -0
  45. package/src/council-engine/council/context-bootstrap.ts +147 -0
  46. package/src/council-engine/council/context-inspection.ts +42 -0
  47. package/src/council-engine/council/context-store.ts +763 -0
  48. package/src/council-engine/council/deliberation-orchestrator.ts +2762 -0
  49. package/src/council-engine/council/factory.ts +164 -0
  50. package/src/council-engine/council/index.ts +201 -0
  51. package/src/council-engine/council/ledger-store.ts +438 -0
  52. package/src/council-engine/council/prompts.ts +1689 -0
  53. package/src/council-engine/council/storage-cleanup.ts +164 -0
  54. package/src/council-engine/council/store.ts +1110 -0
  55. package/src/council-engine/council/synthesis.ts +291 -0
  56. package/src/council-engine/council/types.ts +845 -0
  57. package/src/council-engine/council/validation.ts +613 -0
  58. package/src/council-engine/pipeline/build-detect.ts +73 -0
  59. package/src/council-engine/pipeline/executor.ts +1048 -0
  60. package/src/council-engine/pipeline/index.ts +9 -0
  61. package/src/council-engine/pipeline/install-detect.ts +84 -0
  62. package/src/council-engine/pipeline/memory-store.ts +182 -0
  63. package/src/council-engine/pipeline/output-parsers.ts +146 -0
  64. package/src/council-engine/pipeline/run-output.ts +149 -0
  65. package/src/council-engine/pipeline/session-import.ts +177 -0
  66. package/src/council-engine/pipeline/store.ts +753 -0
  67. package/src/council-engine/pipeline/test-detect.ts +82 -0
  68. package/src/council-engine/pipeline/types.ts +401 -0
  69. package/src/council-engine/services/deliberationSummary.ts +114 -0
  70. package/src/council-engine/tsconfig.json +16 -0
  71. package/src/council-engine/types/mcp.ts +122 -0
  72. package/src/council-engine/utils/filterTools.ts +73 -0
  73. package/src/engine/apply.ts +238 -0
  74. package/src/engine/checkpoints.ts +237 -0
  75. package/src/engine/consultants.ts +347 -0
  76. package/src/engine/diff.ts +171 -0
  77. package/src/engine/errors.ts +102 -0
  78. package/src/engine/git-tools.ts +246 -0
  79. package/src/engine/hooks.ts +181 -0
  80. package/src/engine/loop-guard.ts +155 -0
  81. package/src/engine/permissions.ts +293 -0
  82. package/src/engine/pipeline.ts +376 -0
  83. package/src/engine/sub-agents.ts +133 -0
  84. package/src/engine/task-card.ts +185 -0
  85. package/src/engine/task-router.ts +256 -0
  86. package/src/engine/task-store.ts +86 -0
  87. package/src/engine/tools.ts +783 -0
  88. package/src/engine/verify.ts +111 -0
  89. package/src/mcp/client.ts +225 -0
  90. package/src/mcp/config.ts +120 -0
  91. package/src/mcp/tool-manager.ts +192 -0
  92. package/src/mcp/types.ts +61 -0
  93. package/src/providers/llm-caller.ts +943 -0
  94. package/src/providers/rate-limiter.ts +238 -0
  95. package/src/router/NOTES.md +28 -0
  96. package/src/router/collector.ts +474 -0
  97. package/src/router/embeddings.ts +286 -0
  98. package/src/router/index.ts +299 -0
  99. package/src/router/intent-router.ts +225 -0
  100. package/src/router/nn-router.ts +205 -0
  101. package/src/router/profiles.ts +309 -0
  102. package/src/router/registry.ts +565 -0
  103. package/src/router/rules.ts +274 -0
  104. package/src/router/train.py +408 -0
  105. package/src/session/store.ts +211 -0
  106. package/src/test-utils/mock-llm.ts +39 -0
  107. package/src/types.ts +322 -0
  108. package/src/web/manager.ts +311 -0
@@ -0,0 +1,177 @@
1
+ /**
2
+ * CLI ↔ GUI Session Import
3
+ *
4
+ * Discovers CLI session files from ~/.local/share/kondi/sessions/
5
+ * and imports them into the data store.
6
+ *
7
+ * Node.js implementation (no Tauri dependency).
8
+ */
9
+
10
+ import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { homedir } from 'node:os';
13
+ import type { KondiSession, Pipeline } from './types';
14
+ import { pipelineStore } from './store';
15
+ import { councilDataStore } from '../council/storage-cleanup';
16
+
17
+ export interface CliSessionSummary {
18
+ filePath: string;
19
+ fileName: string;
20
+ pipelineId: string;
21
+ pipelineName: string;
22
+ status: 'completed' | 'failed';
23
+ exportedAt: string;
24
+ durationMs: number;
25
+ councilCount: number;
26
+ stageCount: number;
27
+ alreadyImported: boolean;
28
+ }
29
+
30
+ const SESSIONS_REL_PATH = '.local/share/kondi/sessions';
31
+
32
+ /**
33
+ * Discover CLI session files available for import.
34
+ */
35
+ export async function discoverCliSessions(): Promise<CliSessionSummary[]> {
36
+ try {
37
+ const sessionsDir = join(homedir(), SESSIONS_REL_PATH);
38
+
39
+ if (!existsSync(sessionsDir)) return [];
40
+
41
+ const entries = readdirSync(sessionsDir);
42
+ const jsonFiles = entries
43
+ .filter(f => f.endsWith('.json'))
44
+ .map(f => {
45
+ const fullPath = join(sessionsDir, f);
46
+ const stat = statSync(fullPath);
47
+ return { name: f, path: fullPath, modified: stat.mtime };
48
+ })
49
+ .sort((a, b) => b.modified.getTime() - a.modified.getTime());
50
+
51
+ const summaries: CliSessionSummary[] = [];
52
+ const existingPipelines = pipelineStore.getAll();
53
+
54
+ for (const file of jsonFiles) {
55
+ try {
56
+ const content = readFileSync(file.path, 'utf-8');
57
+ const session: KondiSession = JSON.parse(content);
58
+
59
+ if (session.version !== 1 || !session.pipeline) continue;
60
+
61
+ const alreadyImported = existingPipelines.some(
62
+ p => p.id === session.pipeline.id && p.source === 'cli'
63
+ );
64
+
65
+ summaries.push({
66
+ filePath: file.path,
67
+ fileName: file.name,
68
+ pipelineId: session.pipeline.id,
69
+ pipelineName: session.pipeline.name,
70
+ status: session.execution.status,
71
+ exportedAt: session.exportedAt,
72
+ durationMs: session.execution.durationMs,
73
+ councilCount: Object.keys(session.councilData).length,
74
+ stageCount: session.pipeline.stages.length,
75
+ alreadyImported,
76
+ });
77
+ } catch {
78
+ continue;
79
+ }
80
+ }
81
+
82
+ return summaries;
83
+ } catch (err) {
84
+ console.error('[SessionImport] Failed to discover sessions:', err);
85
+ return [];
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Import a CLI session into the in-memory data store.
91
+ * Merges the pipeline, councils, and all deliberation data.
92
+ */
93
+ export async function importCliSession(filePath: string): Promise<string> {
94
+ const content = readFileSync(filePath, 'utf-8');
95
+ const session: KondiSession = JSON.parse(content);
96
+
97
+ if (session.version !== 1) {
98
+ throw new Error(`Unsupported session version: ${session.version}`);
99
+ }
100
+
101
+ // 1. Import pipeline
102
+ const pipeline = {
103
+ ...session.pipeline,
104
+ source: 'cli' as const,
105
+ status: session.execution.status as Pipeline['status'],
106
+ };
107
+ const existingPipelines = pipelineStore.getAll();
108
+ const existing = existingPipelines.find(p => p.id === pipeline.id);
109
+
110
+ if (existing) {
111
+ pipelineStore.update(pipeline.id, pipeline);
112
+ } else {
113
+ const raw = councilDataStore.getItem('mcp-pipelines');
114
+ const data = raw
115
+ ? JSON.parse(raw)
116
+ : { version: 2, pipelines: [], lastUpdated: '' };
117
+ data.pipelines.push(pipeline);
118
+ data.lastUpdated = new Date().toISOString();
119
+ councilDataStore.setItem('mcp-pipelines', JSON.stringify(data));
120
+ }
121
+
122
+ // 2. Import councils
123
+ if (session.councils.length > 0) {
124
+ const raw = councilDataStore.getItem('mcp-councils');
125
+ const data = raw
126
+ ? JSON.parse(raw)
127
+ : { version: 2, councils: [], lastUpdated: '' };
128
+
129
+ for (const council of session.councils) {
130
+ const idx = data.councils.findIndex((c: any) => c.id === council.id);
131
+ if (idx >= 0) {
132
+ data.councils[idx] = council;
133
+ } else {
134
+ data.councils.push(council);
135
+ }
136
+ }
137
+
138
+ data.lastUpdated = new Date().toISOString();
139
+ councilDataStore.setItem('mcp-councils', JSON.stringify(data));
140
+ }
141
+
142
+ // 3. Import council data (ledger, context, decisions, etc.)
143
+ for (const [councilId, cdata] of Object.entries(session.councilData)) {
144
+ if (cdata.ledgerIndex) {
145
+ councilDataStore.setItem(`ledger-index-${councilId}`, JSON.stringify(cdata.ledgerIndex));
146
+ }
147
+ for (const [n, chunk] of Object.entries(cdata.ledgerChunks)) {
148
+ councilDataStore.setItem(`ledger-chunk-${councilId}-${n}`, JSON.stringify(chunk));
149
+ }
150
+ if (cdata.context) {
151
+ councilDataStore.setItem(`context-${councilId}`, JSON.stringify(cdata.context));
152
+ }
153
+ if (cdata.contextHistory.length > 0) {
154
+ councilDataStore.setItem(`context-history-${councilId}`, JSON.stringify(cdata.contextHistory));
155
+ }
156
+ if (cdata.contextPatches.length > 0) {
157
+ councilDataStore.setItem(`context-patches-${councilId}`, JSON.stringify(cdata.contextPatches));
158
+ }
159
+ if (cdata.decision) {
160
+ councilDataStore.setItem(`decision-${councilId}`, JSON.stringify(cdata.decision));
161
+ }
162
+ if (cdata.plan) {
163
+ councilDataStore.setItem(`plan-${councilId}`, JSON.stringify(cdata.plan));
164
+ }
165
+ if (cdata.directive) {
166
+ councilDataStore.setItem(`directive-${councilId}`, JSON.stringify(cdata.directive));
167
+ }
168
+ if (cdata.outputs.length > 0) {
169
+ councilDataStore.setItem(`outputs-${councilId}`, JSON.stringify(cdata.outputs));
170
+ }
171
+ }
172
+
173
+ // 4. Trigger store notification so consumers refresh
174
+ pipelineStore.update(pipeline.id, { updatedAt: new Date().toISOString() });
175
+
176
+ return pipeline.id;
177
+ }