saeeol 1.4.0 → 1.4.1
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/package.json +1 -1
- package/src/server/routes/instance/httpapi/groups/ltm.ts +93 -0
- package/src/server/routes/instance/httpapi/handlers/ltm.ts +118 -0
- package/src/server/routes/instance/index.ts +96 -1
- package/test/smoke/.tui-input-report.txt +110 -0
- package/test/smoke/.tui-leader-report.txt +70 -0
- package/test/smoke/.tui-scroll-report.txt +66 -0
- package/test/smoke/.tui-slash-report.txt +146 -0
- package/test/smoke/.tui-system-report.txt +62 -0
- package/test/smoke/tui-walkthrough-driver.ts +232 -0
- package/test/smoke/tui-walkthrough-input.test.ts +286 -0
- package/test/smoke/tui-walkthrough-leader.test.ts +175 -0
- package/test/smoke/tui-walkthrough-scroll.test.ts +177 -0
- package/test/smoke/tui-walkthrough-slash.test.ts +302 -0
- package/test/smoke/tui-walkthrough-system.test.ts +210 -0
package/package.json
CHANGED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* groups/ltm.ts — LTM (Long-Term Memory) HTTP API group
|
|
3
|
+
*
|
|
4
|
+
* 외부 앱(chowriter 등)이 saeeol LTM에 기억을 저장/검색하는 엔드포인트.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Schema } from "effect"
|
|
8
|
+
import { HttpApi, HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
|
|
9
|
+
import { Authorization } from "../middleware/authorization"
|
|
10
|
+
import { InstanceContextMiddleware } from "../middleware/instance-context"
|
|
11
|
+
import { WorkspaceRoutingMiddleware } from "../middleware/workspace-routing"
|
|
12
|
+
import { described } from "./metadata"
|
|
13
|
+
|
|
14
|
+
const root = "/ltm"
|
|
15
|
+
|
|
16
|
+
// Request schemas
|
|
17
|
+
const IngestPayload = Schema.Struct({
|
|
18
|
+
type: Schema.Literal("episodic", "semantic", "procedural"),
|
|
19
|
+
content: Schema.String,
|
|
20
|
+
summary: Schema.String,
|
|
21
|
+
projectID: Schema.optional(Schema.String),
|
|
22
|
+
sessionID: Schema.optional(Schema.String),
|
|
23
|
+
tags: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
const SearchPayload = Schema.Struct({
|
|
27
|
+
query: Schema.String,
|
|
28
|
+
topK: Schema.optional(Schema.Number),
|
|
29
|
+
minScore: Schema.optional(Schema.Number),
|
|
30
|
+
type: Schema.optional(Schema.Literal("episodic", "semantic", "procedural")),
|
|
31
|
+
projectID: Schema.optional(Schema.String),
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
const DeletePayload = Schema.Struct({
|
|
35
|
+
ids: Schema.mutable(Schema.Array(Schema.String)),
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
// Response schemas
|
|
39
|
+
const MemoryEntry = Schema.Struct({
|
|
40
|
+
id: Schema.String,
|
|
41
|
+
type: Schema.String,
|
|
42
|
+
summary: Schema.String,
|
|
43
|
+
content: Schema.String,
|
|
44
|
+
score: Schema.optional(Schema.Number),
|
|
45
|
+
metadata: Schema.Struct({
|
|
46
|
+
source: Schema.String,
|
|
47
|
+
timestamp: Schema.Number,
|
|
48
|
+
projectID: Schema.optional(Schema.String),
|
|
49
|
+
tags: Schema.mutable(Schema.Array(Schema.String)),
|
|
50
|
+
}),
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
const IngestResponse = Schema.Struct({
|
|
54
|
+
id: Schema.String,
|
|
55
|
+
success: Schema.Boolean,
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const SearchResponse = Schema.Struct({
|
|
59
|
+
memories: Schema.mutable(Schema.Array(MemoryEntry)),
|
|
60
|
+
count: Schema.Number,
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
const DeleteResponse = Schema.Struct({
|
|
64
|
+
removed: Schema.Number,
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
export const LTMHttpApi = HttpApi.make("ltm")
|
|
68
|
+
.add(
|
|
69
|
+
HttpApiGroup.make(root, "ltm")
|
|
70
|
+
.add(
|
|
71
|
+
HttpApiEndpoint.post("ingest", `${root}/ingest`)
|
|
72
|
+
.setPayload(IngestPayload)
|
|
73
|
+
.addSuccess(IngestResponse)
|
|
74
|
+
.annotateMerge(OpenApi.annotations({ identifier: "ltm.ingest", summary: "Store a memory in LTM" })),
|
|
75
|
+
)
|
|
76
|
+
.add(
|
|
77
|
+
HttpApiEndpoint.post("search", `${root}/search`)
|
|
78
|
+
.setPayload(SearchPayload)
|
|
79
|
+
.addSuccess(SearchResponse)
|
|
80
|
+
.annotateMerge(OpenApi.annotations({ identifier: "ltm.search", summary: "Search LTM memories by query" })),
|
|
81
|
+
)
|
|
82
|
+
.add(
|
|
83
|
+
HttpApiEndpoint.post("delete", `${root}/delete`)
|
|
84
|
+
.setPayload(DeletePayload)
|
|
85
|
+
.addSuccess(DeleteResponse)
|
|
86
|
+
.annotateMerge(OpenApi.annotations({ identifier: "ltm.delete", summary: "Delete LTM memories by ID" })),
|
|
87
|
+
)
|
|
88
|
+
.add(
|
|
89
|
+
HttpApiEndpoint.get("status", `${root}/status`)
|
|
90
|
+
.addSuccess(Schema.Struct({ enabled: Schema.Boolean, memoryCount: Schema.Number }))
|
|
91
|
+
.annotateMerge(OpenApi.annotations({ identifier: "ltm.status", summary: "Get LTM status" })),
|
|
92
|
+
),
|
|
93
|
+
)
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* handlers/ltm.ts — LTM HTTP API handlers
|
|
3
|
+
*
|
|
4
|
+
* 외부 앱이 saeeol LTM에 기억을 저장/검색/삭제.
|
|
5
|
+
* 임베딩은 로컬 서버가 처리, 클라이언트는 텍스트만 보냄.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Effect } from "effect"
|
|
9
|
+
import * as Log from "@saeeol/core/util/log"
|
|
10
|
+
import * as HttpApiBuilder from "effect/unstable/httpapi"
|
|
11
|
+
import * as LTM from "@/ltm"
|
|
12
|
+
import * as Embedder from "@/provider/local/embedder"
|
|
13
|
+
import { LTMHttpApi } from "../groups/ltm"
|
|
14
|
+
|
|
15
|
+
const log = Log.create({ service: "server/handlers/ltm" })
|
|
16
|
+
|
|
17
|
+
export const ltmHandlers = HttpApiBuilder.group(LTMHttpApi, "ltm", (handlers) =>
|
|
18
|
+
Effect.gen(function* () {
|
|
19
|
+
const config = LTM.Config.DEFAULT_LTM_CONFIG
|
|
20
|
+
|
|
21
|
+
return handlers
|
|
22
|
+
.handle("ingest", ({ payload }) =>
|
|
23
|
+
Effect.gen(function* () {
|
|
24
|
+
if (!config.enabled) {
|
|
25
|
+
yield* log.info("LTM ingest skipped — disabled")
|
|
26
|
+
return HttpApiBuilder.fail({ status: 400 as const, body: { message: "LTM is disabled" } })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const embedderStatus = Embedder.status()
|
|
30
|
+
if (!embedderStatus || embedderStatus.status !== "running") {
|
|
31
|
+
yield* log.info("LTM ingest skipped — embedder not running")
|
|
32
|
+
return HttpApiBuilder.fail({ status: 503 as const, body: { message: "Embedding server not running" } })
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const vector = yield* Effect.tryPromise(() => Embedder.embedOne(payload.summary))
|
|
36
|
+
const id = `${payload.type[0]}:${payload.projectID ?? "global"}:${Date.now()}`
|
|
37
|
+
const memory: LTM.Memory = {
|
|
38
|
+
id,
|
|
39
|
+
type: payload.type,
|
|
40
|
+
content: payload.content.slice(0, 2000),
|
|
41
|
+
summary: payload.summary,
|
|
42
|
+
vector,
|
|
43
|
+
metadata: {
|
|
44
|
+
source: `external:${payload.projectID ?? "unknown"}`,
|
|
45
|
+
timestamp: Date.now(),
|
|
46
|
+
projectID: payload.projectID,
|
|
47
|
+
sessionID: payload.sessionID,
|
|
48
|
+
tags: payload.tags ?? [],
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
yield* Effect.tryPromise(() => LTM.Store.upsert(memory))
|
|
53
|
+
yield* log.info("LTM ingest", { id, type: payload.type })
|
|
54
|
+
|
|
55
|
+
return { id, success: true }
|
|
56
|
+
}),
|
|
57
|
+
)
|
|
58
|
+
.handle("search", ({ payload }) =>
|
|
59
|
+
Effect.gen(function* () {
|
|
60
|
+
if (!config.enabled) {
|
|
61
|
+
return { memories: [], count: 0 }
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const embedderStatus = Embedder.status()
|
|
65
|
+
if (!embedderStatus || embedderStatus.status !== "running") {
|
|
66
|
+
return { memories: [], count: 0 }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const vector = yield* Effect.tryPromise(() => Embedder.embedOne(payload.query))
|
|
70
|
+
const memories = yield* Effect.tryPromise(() =>
|
|
71
|
+
LTM.Store.search(vector, {
|
|
72
|
+
topK: payload.topK ?? config.retrieval.topK,
|
|
73
|
+
minScore: payload.minScore ?? config.retrieval.minScore,
|
|
74
|
+
type: payload.type,
|
|
75
|
+
}),
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
// projectID 필터 (store 레벨에서 안 되면 여기서)
|
|
79
|
+
const filtered = payload.projectID
|
|
80
|
+
? memories.filter((m) => m.metadata.projectID === payload.projectID)
|
|
81
|
+
: memories
|
|
82
|
+
|
|
83
|
+
// vector는 응답에서 제거 (용량 절약)
|
|
84
|
+
const lean = filtered.map((m) => ({
|
|
85
|
+
id: m.id,
|
|
86
|
+
type: m.type,
|
|
87
|
+
summary: m.summary,
|
|
88
|
+
content: m.content,
|
|
89
|
+
score: m.score,
|
|
90
|
+
metadata: {
|
|
91
|
+
source: m.metadata.source,
|
|
92
|
+
timestamp: m.metadata.timestamp,
|
|
93
|
+
projectID: m.metadata.projectID,
|
|
94
|
+
tags: m.metadata.tags,
|
|
95
|
+
},
|
|
96
|
+
}))
|
|
97
|
+
|
|
98
|
+
return { memories: lean, count: lean.length }
|
|
99
|
+
}),
|
|
100
|
+
)
|
|
101
|
+
.handle("delete", ({ payload }) =>
|
|
102
|
+
Effect.gen(function* () {
|
|
103
|
+
yield* Effect.tryPromise(() => LTM.Store.remove(payload.ids))
|
|
104
|
+
return { removed: payload.ids.length }
|
|
105
|
+
}),
|
|
106
|
+
)
|
|
107
|
+
.handle("status", () =>
|
|
108
|
+
Effect.gen(function* () {
|
|
109
|
+
const embedder = Embedder.status()
|
|
110
|
+
const count = yield* Effect.tryPromise(() => LTM.Store.count())
|
|
111
|
+
return {
|
|
112
|
+
enabled: config.enabled && embedder?.status === "running",
|
|
113
|
+
memoryCount: count,
|
|
114
|
+
}
|
|
115
|
+
}),
|
|
116
|
+
)
|
|
117
|
+
}),
|
|
118
|
+
)
|
|
@@ -27,7 +27,9 @@ import { EventRoutes } from "./event"
|
|
|
27
27
|
import { SyncRoutes } from "./sync"
|
|
28
28
|
import { InstanceMiddleware } from "./middleware"
|
|
29
29
|
import { jsonRequest } from "./trace"
|
|
30
|
-
import { register as registerSaeeolRoutes } from "@/saeeol/server/instance"
|
|
30
|
+
import { register as registerSaeeolRoutes } from "@/saeeol/server/instance"
|
|
31
|
+
import * as LTM from "@/ltm"
|
|
32
|
+
import * as Embedder from "@/provider/local/embedder"
|
|
31
33
|
|
|
32
34
|
export const InstanceRoutes = (upgrade: UpgradeWebSocket): Hono => {
|
|
33
35
|
const app = new Hono()
|
|
@@ -47,6 +49,99 @@ export const InstanceRoutes = (upgrade: UpgradeWebSocket): Hono => {
|
|
|
47
49
|
.route("/", EventRoutes())
|
|
48
50
|
.route("/mcp", McpRoutes())
|
|
49
51
|
.route("/tui", TuiRoutes())
|
|
52
|
+
// ── LTM (Long-Term Memory) ──
|
|
53
|
+
.post(
|
|
54
|
+
"/ltm/ingest",
|
|
55
|
+
describeRoute({
|
|
56
|
+
summary: "Store a memory in LTM",
|
|
57
|
+
operationId: "ltm.ingest",
|
|
58
|
+
responses: { 200: { description: "Memory stored" } },
|
|
59
|
+
}),
|
|
60
|
+
async (c) => {
|
|
61
|
+
const body = await c.req.json<{ type: "episodic" | "semantic" | "procedural"; content: string; summary: string; projectID?: string; sessionID?: string; tags?: string[] }>()
|
|
62
|
+
const embedderStatus = Embedder.status()
|
|
63
|
+
if (!embedderStatus || embedderStatus.status !== "running") {
|
|
64
|
+
return c.json({ error: "Embedding server not running" }, 503)
|
|
65
|
+
}
|
|
66
|
+
const vector = await Embedder.embedOne(body.summary)
|
|
67
|
+
const id = `${body.type[0]}:${body.projectID ?? "global"}:${Date.now()}`
|
|
68
|
+
const memory: LTM.Memory = {
|
|
69
|
+
id,
|
|
70
|
+
type: body.type,
|
|
71
|
+
content: body.content.slice(0, 2000),
|
|
72
|
+
summary: body.summary,
|
|
73
|
+
vector,
|
|
74
|
+
metadata: {
|
|
75
|
+
source: `external:${body.projectID ?? "unknown"}`,
|
|
76
|
+
timestamp: Date.now(),
|
|
77
|
+
projectID: body.projectID,
|
|
78
|
+
sessionID: body.sessionID,
|
|
79
|
+
tags: body.tags ?? [],
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
await LTM.Store.upsert(memory)
|
|
83
|
+
return c.json({ id, success: true })
|
|
84
|
+
},
|
|
85
|
+
)
|
|
86
|
+
.post(
|
|
87
|
+
"/ltm/search",
|
|
88
|
+
describeRoute({
|
|
89
|
+
summary: "Search LTM memories by query",
|
|
90
|
+
operationId: "ltm.search",
|
|
91
|
+
responses: { 200: { description: "Search results" } },
|
|
92
|
+
}),
|
|
93
|
+
async (c) => {
|
|
94
|
+
const body = await c.req.json<{ query: string; topK?: number; minScore?: number; type?: "episodic" | "semantic" | "procedural"; projectID?: string }>()
|
|
95
|
+
const embedderStatus = Embedder.status()
|
|
96
|
+
if (!embedderStatus || embedderStatus.status !== "running") {
|
|
97
|
+
return c.json({ memories: [], count: 0 })
|
|
98
|
+
}
|
|
99
|
+
const vector = await Embedder.embedOne(body.query)
|
|
100
|
+
const memories = await LTM.Store.search(vector, {
|
|
101
|
+
topK: body.topK ?? 5,
|
|
102
|
+
minScore: body.minScore ?? 0.7,
|
|
103
|
+
type: body.type,
|
|
104
|
+
})
|
|
105
|
+
const filtered = body.projectID
|
|
106
|
+
? memories.filter((m) => m.metadata.projectID === body.projectID)
|
|
107
|
+
: memories
|
|
108
|
+
const lean = filtered.map((m) => ({
|
|
109
|
+
id: m.id,
|
|
110
|
+
type: m.type,
|
|
111
|
+
summary: m.summary,
|
|
112
|
+
content: m.content,
|
|
113
|
+
score: m.score,
|
|
114
|
+
metadata: { source: m.metadata.source, timestamp: m.metadata.timestamp, projectID: m.metadata.projectID, tags: m.metadata.tags },
|
|
115
|
+
}))
|
|
116
|
+
return c.json({ memories: lean, count: lean.length })
|
|
117
|
+
},
|
|
118
|
+
)
|
|
119
|
+
.post(
|
|
120
|
+
"/ltm/delete",
|
|
121
|
+
describeRoute({
|
|
122
|
+
summary: "Delete LTM memories by ID",
|
|
123
|
+
operationId: "ltm.delete",
|
|
124
|
+
responses: { 200: { description: "Deleted" } },
|
|
125
|
+
}),
|
|
126
|
+
async (c) => {
|
|
127
|
+
const body = await c.req.json<{ ids: string[] }>()
|
|
128
|
+
await LTM.Store.remove(body.ids)
|
|
129
|
+
return c.json({ removed: body.ids.length })
|
|
130
|
+
},
|
|
131
|
+
)
|
|
132
|
+
.get(
|
|
133
|
+
"/ltm/status",
|
|
134
|
+
describeRoute({
|
|
135
|
+
summary: "Get LTM status",
|
|
136
|
+
operationId: "ltm.status",
|
|
137
|
+
responses: { 200: { description: "LTM status" } },
|
|
138
|
+
}),
|
|
139
|
+
async (c) => {
|
|
140
|
+
const embedder = Embedder.status()
|
|
141
|
+
const count = await LTM.Store.count()
|
|
142
|
+
return c.json({ enabled: embedder?.status === "running", memoryCount: count })
|
|
143
|
+
},
|
|
144
|
+
)
|
|
50
145
|
.post(
|
|
51
146
|
"/instance/dispose",
|
|
52
147
|
describeRoute({
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
=== input-typed (280 bytes) ===
|
|
2
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
=== input-cursor-lr (280 bytes) ===
|
|
6
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
=== input-cursor-ud (280 bytes) ===
|
|
10
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
=== input-cursor-home-end (280 bytes) ===
|
|
14
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
=== input-ctrl-a (280 bytes) ===
|
|
18
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
=== input-ctrl-e (280 bytes) ===
|
|
22
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
=== input-ctrl-b (280 bytes) ===
|
|
26
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
=== input-ctrl-f (280 bytes) ===
|
|
30
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
=== input-alt-f (280 bytes) ===
|
|
34
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
=== input-alt-b (280 bytes) ===
|
|
38
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
=== input-ctrl-left (280 bytes) ===
|
|
42
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
=== input-ctrl-right (280 bytes) ===
|
|
46
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
=== input-select-lr (280 bytes) ===
|
|
50
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
=== input-select-ud (280 bytes) ===
|
|
54
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
=== input-alt-a (280 bytes) ===
|
|
58
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
=== input-alt-e (280 bytes) ===
|
|
62
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
=== input-backspace (280 bytes) ===
|
|
66
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
=== input-delete (280 bytes) ===
|
|
70
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
=== input-ctrl-k (280 bytes) ===
|
|
74
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
=== input-ctrl-u (280 bytes) ===
|
|
78
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
=== input-ctrl-w (280 bytes) ===
|
|
82
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
=== input-ctrl-d (280 bytes) ===
|
|
86
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
=== input-alt-d (280 bytes) ===
|
|
90
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
=== input-clear-ctrl-c (280 bytes) ===
|
|
94
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
=== input-undo-ctrl-minus (280 bytes) ===
|
|
98
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
=== input-redo (280 bytes) ===
|
|
102
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
=== input-submit (280 bytes) ===
|
|
106
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
=== input-cleanup (280 bytes) ===
|
|
110
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
=== leader-l-session-list (280 bytes) ===
|
|
2
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
=== leader-m-model-list (280 bytes) ===
|
|
6
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
=== leader-a-agent-list (280 bytes) ===
|
|
10
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
=== leader-s-status (280 bytes) ===
|
|
14
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
=== leader-t-theme-list (280 bytes) ===
|
|
18
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
=== leader-g-timeline (280 bytes) ===
|
|
22
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
=== leader-b-sidebar-open (280 bytes) ===
|
|
26
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
=== leader-b-sidebar-close (280 bytes) ===
|
|
30
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
=== leader-n-new-session (280 bytes) ===
|
|
34
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
=== leader-c-compact (280 bytes) ===
|
|
38
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
=== leader-h-conceal-toggle (280 bytes) ===
|
|
42
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
=== leader-eq-feedback-up (280 bytes) ===
|
|
46
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
=== leader-minus-feedback-down (280 bytes) ===
|
|
50
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
=== leader-y-copy (280 bytes) ===
|
|
54
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
=== leader-u-undo (280 bytes) ===
|
|
58
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
=== leader-r-redo (280 bytes) ===
|
|
62
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
=== leader-down-child-first (280 bytes) ===
|
|
66
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
=== leader-q-exit (280 bytes) ===
|
|
70
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
=== scroll-page-up (280 bytes) ===
|
|
2
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
=== scroll-page-down (280 bytes) ===
|
|
6
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
=== scroll-ctrl-page-up (280 bytes) ===
|
|
10
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
=== scroll-ctrl-page-down (280 bytes) ===
|
|
14
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
=== scroll-ctrl-up (280 bytes) ===
|
|
18
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
=== scroll-ctrl-down (280 bytes) ===
|
|
22
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
=== scroll-ctrl-g-first (280 bytes) ===
|
|
26
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
=== scroll-home (280 bytes) ===
|
|
30
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
=== scroll-end (280 bytes) ===
|
|
34
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
=== nav-tab-agent-next (280 bytes) ===
|
|
38
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
=== nav-shift-tab-agent-prev (280 bytes) ===
|
|
42
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
=== nav-f2-model-next (280 bytes) ===
|
|
46
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
=== nav-shift-f2-model-prev (280 bytes) ===
|
|
50
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
=== nav-ctrl-p-palette (280 bytes) ===
|
|
54
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
=== nav-ctrl-t-variant (280 bytes) ===
|
|
58
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
=== nav-escape-interrupt (280 bytes) ===
|
|
62
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
=== nav-ctrl-d-exit (280 bytes) ===
|
|
66
|
+
s service=default e=Export named 'jsx' not found in module 'C:\Users\PC\Desktop\SAEEOL\node_modules\.bun\@opentui+solid@0.2.2+37848aaf691d3d45\node_modules\@opentui\solid\jsx-runtime.d.ts'. exception
|