kimaki 0.4.67 → 0.4.69
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/dist/ai-tool-to-genai.js +10 -4
- package/dist/bin.js +4 -1
- package/dist/channel-management.js +23 -1
- package/dist/cli-parsing.test.js +21 -1
- package/dist/cli.js +606 -397
- package/dist/commands/abort.js +3 -3
- package/dist/commands/action-buttons.js +255 -0
- package/dist/commands/add-project.js +2 -2
- package/dist/commands/agent.js +13 -4
- package/dist/commands/ask-question.js +3 -1
- package/dist/commands/compact.js +6 -5
- package/dist/commands/context-usage.js +3 -3
- package/dist/commands/create-new-project.js +8 -2
- package/dist/commands/diff.js +6 -3
- package/dist/commands/file-upload.js +9 -10
- package/dist/commands/fork.js +11 -5
- package/dist/commands/gemini-apikey.js +46 -29
- package/dist/commands/login.js +12 -9
- package/dist/commands/merge-worktree.js +1 -1
- package/dist/commands/model.js +94 -14
- package/dist/commands/permissions.js +4 -2
- package/dist/commands/queue.js +9 -5
- package/dist/commands/remove-project.js +3 -1
- package/dist/commands/restart-opencode-server.js +6 -4
- package/dist/commands/resume.js +28 -18
- package/dist/commands/run-command.js +10 -5
- package/dist/commands/session-id.js +4 -4
- package/dist/commands/session.js +6 -4
- package/dist/commands/share.js +3 -3
- package/dist/commands/undo-redo.js +4 -4
- package/dist/commands/unset-model.js +4 -1
- package/dist/commands/upgrade.js +1 -1
- package/dist/commands/user-command.js +7 -3
- package/dist/commands/verbosity.js +1 -1
- package/dist/commands/worktree-settings.js +1 -1
- package/dist/commands/worktree.js +23 -8
- package/dist/config-lock-port.test.js +17 -0
- package/dist/config.js +26 -1
- package/dist/database.js +411 -4
- package/dist/db.js +56 -16
- package/dist/db.test.js +6 -4
- package/dist/discord-bot.js +157 -46
- package/dist/discord-utils.js +26 -7
- package/dist/discord-utils.test.js +14 -0
- package/dist/errors.js +0 -1
- package/dist/escape-backticks.test.js +1 -1
- package/dist/format-tables.js +9 -2
- package/dist/forum-sync/config.js +79 -0
- package/dist/forum-sync/discord-operations.js +154 -0
- package/dist/forum-sync/index.js +5 -0
- package/dist/forum-sync/markdown.js +117 -0
- package/dist/forum-sync/sync-to-discord.js +417 -0
- package/dist/forum-sync/sync-to-files.js +190 -0
- package/dist/forum-sync/types.js +53 -0
- package/dist/forum-sync/watchers.js +309 -0
- package/dist/forum-sync.js +953 -0
- package/dist/genai.js +6 -4
- package/dist/generated/enums.js +21 -2
- package/dist/generated/internal/class.js +2 -2
- package/dist/generated/internal/prismaNamespace.js +54 -1
- package/dist/generated/internal/prismaNamespaceBrowser.js +54 -1
- package/dist/generated/models/forum_sync_configs.js +1 -0
- package/dist/generated/models/ipc_requests.js +1 -0
- package/dist/generated/models/scheduled_tasks.js +1 -0
- package/dist/generated/models/session_start_sources.js +1 -0
- package/dist/hrana-server.js +416 -0
- package/dist/hrana-server.test.js +368 -0
- package/dist/image-utils.js +6 -1
- package/dist/interaction-handler.js +46 -17
- package/dist/ipc-polling.js +244 -0
- package/dist/kimaki-digital-twin.e2e.test.js +168 -0
- package/dist/kimaki-real-discord.e2e.test.js +294 -0
- package/dist/logger.js +2 -0
- package/dist/markdown.js +14 -5
- package/dist/markdown.test.js +9 -25
- package/dist/message-formatting.js +23 -7
- package/dist/openai-realtime.js +5 -3
- package/dist/opencode-plugin.js +164 -66
- package/dist/opencode.js +131 -20
- package/dist/session-handler.js +289 -110
- package/dist/system-message.js +130 -6
- package/dist/task-runner.js +279 -0
- package/dist/task-schedule.js +191 -0
- package/dist/task-schedule.test.js +71 -0
- package/dist/tools.js +21 -8
- package/dist/unnest-code-blocks.js +4 -1
- package/dist/utils.js +1 -0
- package/dist/voice-handler.js +38 -16
- package/dist/voice.js +213 -98
- package/dist/voice.test.js +143 -0
- package/dist/wait-session.js +15 -4
- package/dist/worktree-utils.js +35 -10
- package/dist/xml.js +4 -2
- package/package.json +12 -4
- package/schema.prisma +108 -3
- package/skills/errore/SKILL.md +182 -752
- package/skills/jitter/EDITOR.md +48 -39
- package/skills/jitter/SKILL.md +61 -61
- package/skills/jitter/utils/actions.ts +46 -42
- package/skills/jitter/utils/export.ts +39 -34
- package/skills/jitter/utils/index.ts +16 -15
- package/skills/jitter/utils/snapshot.ts +57 -43
- package/skills/jitter/utils/traverse.ts +101 -83
- package/skills/jitter/utils/types.ts +165 -165
- package/skills/jitter/utils/wait.ts +45 -43
- package/skills/playwriter/SKILL.md +2 -1
- package/skills/termcast/SKILL.md +945 -0
- package/src/__snapshots__/compact-session-context-no-system.md +0 -2
- package/src/__snapshots__/compact-session-context.md +0 -2
- package/src/__snapshots__/first-session-no-info.md +4 -4150
- package/src/__snapshots__/first-session-with-info.md +7 -4153
- package/src/__snapshots__/session-1.md +4 -4150
- package/src/__snapshots__/session-2.md +5860 -6
- package/src/__snapshots__/session-3.md +5 -5624
- package/src/__snapshots__/session-with-tools.md +5481 -3773
- package/src/ai-tool-to-genai.ts +19 -6
- package/src/ai-tool.ts +7 -2
- package/src/bin.ts +4 -3
- package/src/channel-management.ts +68 -17
- package/src/cli-parsing.test.ts +53 -11
- package/src/cli.ts +1219 -646
- package/src/commands/abort.ts +15 -4
- package/src/commands/action-buttons.ts +374 -0
- package/src/commands/add-project.ts +15 -8
- package/src/commands/agent.ts +17 -6
- package/src/commands/ask-question.ts +15 -5
- package/src/commands/compact.ts +21 -6
- package/src/commands/context-usage.ts +31 -9
- package/src/commands/create-new-project.ts +29 -11
- package/src/commands/diff.ts +23 -8
- package/src/commands/file-upload.ts +43 -20
- package/src/commands/fork.ts +42 -15
- package/src/commands/gemini-apikey.ts +65 -36
- package/src/commands/login.ts +42 -22
- package/src/commands/merge-worktree.ts +17 -5
- package/src/commands/model.ts +200 -46
- package/src/commands/permissions.ts +28 -7
- package/src/commands/queue.ts +51 -17
- package/src/commands/remove-project.ts +6 -2
- package/src/commands/restart-opencode-server.ts +31 -9
- package/src/commands/resume.ts +55 -31
- package/src/commands/run-command.ts +27 -7
- package/src/commands/session-id.ts +19 -5
- package/src/commands/session.ts +21 -6
- package/src/commands/share.ts +15 -4
- package/src/commands/types.ts +3 -1
- package/src/commands/undo-redo.ts +32 -10
- package/src/commands/unset-model.ts +7 -2
- package/src/commands/upgrade.ts +3 -1
- package/src/commands/user-command.ts +20 -7
- package/src/commands/verbosity.ts +5 -1
- package/src/commands/worktree-settings.ts +4 -1
- package/src/commands/worktree.ts +68 -19
- package/src/config.ts +29 -1
- package/src/database.ts +729 -26
- package/src/db.test.ts +8 -4
- package/src/db.ts +70 -19
- package/src/discord-bot.ts +284 -81
- package/src/discord-utils.test.ts +17 -0
- package/src/discord-utils.ts +106 -31
- package/src/errors.ts +12 -6
- package/src/escape-backticks.test.ts +8 -3
- package/src/format-tables.ts +9 -2
- package/src/forum-sync/config.ts +92 -0
- package/src/forum-sync/discord-operations.ts +241 -0
- package/src/forum-sync/index.ts +9 -0
- package/src/forum-sync/markdown.ts +176 -0
- package/src/forum-sync/sync-to-discord.ts +595 -0
- package/src/forum-sync/sync-to-files.ts +294 -0
- package/src/forum-sync/types.ts +175 -0
- package/src/forum-sync/watchers.ts +456 -0
- package/src/genai-worker-wrapper.ts +9 -3
- package/src/genai-worker.ts +23 -5
- package/src/genai.ts +41 -9
- package/src/generated/browser.ts +20 -0
- package/src/generated/client.ts +20 -0
- package/src/generated/commonInputTypes.ts +240 -0
- package/src/generated/enums.ts +33 -2
- package/src/generated/internal/class.ts +42 -2
- package/src/generated/internal/prismaNamespace.ts +399 -2
- package/src/generated/internal/prismaNamespaceBrowser.ts +70 -1
- package/src/generated/models/bot_api_keys.ts +33 -1
- package/src/generated/models/bot_tokens.ts +122 -0
- package/src/generated/models/channel_directories.ts +179 -0
- package/src/generated/models/forum_sync_configs.ts +1452 -0
- package/src/generated/models/ipc_requests.ts +1485 -0
- package/src/generated/models/scheduled_tasks.ts +2320 -0
- package/src/generated/models/session_start_sources.ts +1408 -0
- package/src/generated/models/thread_sessions.ts +243 -0
- package/src/generated/models.ts +4 -0
- package/src/heap-monitor.ts +7 -2
- package/src/hrana-server.test.ts +428 -0
- package/src/hrana-server.ts +547 -0
- package/src/image-utils.ts +21 -6
- package/src/interaction-handler.ts +346 -273
- package/src/ipc-polling.ts +318 -0
- package/src/kimaki-digital-twin.e2e.test.ts +204 -0
- package/src/logger.ts +33 -10
- package/src/markdown.test.ts +83 -69
- package/src/markdown.ts +29 -10
- package/src/message-formatting.ts +63 -21
- package/src/openai-realtime.ts +47 -25
- package/src/opencode-plugin.ts +207 -81
- package/src/opencode.ts +254 -73
- package/src/schema.sql +61 -0
- package/src/session-handler.ts +709 -310
- package/src/session-search.ts +3 -1
- package/src/system-message.ts +136 -5
- package/src/task-runner.ts +422 -0
- package/src/task-schedule.test.ts +84 -0
- package/src/task-schedule.ts +287 -0
- package/src/tools.ts +38 -12
- package/src/unnest-code-blocks.test.ts +3 -1
- package/src/unnest-code-blocks.ts +6 -2
- package/src/utils.ts +11 -3
- package/src/voice-handler.ts +229 -156
- package/src/voice.test.ts +173 -0
- package/src/voice.ts +297 -117
- package/src/wait-session.ts +30 -11
- package/src/worktree-utils.ts +146 -45
- package/src/xml.test.ts +2 -1
- package/src/xml.ts +12 -3
package/dist/ai-tool-to-genai.js
CHANGED
|
@@ -38,11 +38,13 @@ function jsonSchemaToGenAISchema(jsonSchema) {
|
|
|
38
38
|
break;
|
|
39
39
|
case 'number':
|
|
40
40
|
schema.type = Type.NUMBER;
|
|
41
|
-
schema.format =
|
|
41
|
+
schema.format =
|
|
42
|
+
typeof jsonSchema.format === 'string' ? jsonSchema.format : 'float';
|
|
42
43
|
break;
|
|
43
44
|
case 'integer':
|
|
44
45
|
schema.type = Type.INTEGER;
|
|
45
|
-
schema.format =
|
|
46
|
+
schema.format =
|
|
47
|
+
typeof jsonSchema.format === 'string' ? jsonSchema.format : 'int32';
|
|
46
48
|
break;
|
|
47
49
|
case 'boolean':
|
|
48
50
|
schema.type = Type.BOOLEAN;
|
|
@@ -169,13 +171,17 @@ export function aiToolToCallableTool(tool, name) {
|
|
|
169
171
|
const parts = [];
|
|
170
172
|
for (const functionCall of functionCalls) {
|
|
171
173
|
// Check if this function call matches our tool
|
|
172
|
-
if (functionCall.name !== toolName &&
|
|
174
|
+
if (functionCall.name !== toolName &&
|
|
175
|
+
name &&
|
|
176
|
+
functionCall.name !== name) {
|
|
173
177
|
continue;
|
|
174
178
|
}
|
|
175
179
|
// Execute the tool if it has an execute function
|
|
176
180
|
if (tool.execute) {
|
|
177
181
|
try {
|
|
178
|
-
const args = isRecord(functionCall.args)
|
|
182
|
+
const args = isRecord(functionCall.args)
|
|
183
|
+
? functionCall.args
|
|
184
|
+
: {};
|
|
179
185
|
const result = await tool.execute(args, {
|
|
180
186
|
toolCallId: functionCall.id || '',
|
|
181
187
|
messages: [],
|
package/dist/bin.js
CHANGED
|
@@ -41,7 +41,10 @@ else {
|
|
|
41
41
|
if (!fs.existsSync(HEAP_SNAPSHOT_DIR)) {
|
|
42
42
|
fs.mkdirSync(HEAP_SNAPSHOT_DIR, { recursive: true });
|
|
43
43
|
}
|
|
44
|
-
const heapArgs = [
|
|
44
|
+
const heapArgs = [
|
|
45
|
+
`--heapsnapshot-near-heap-limit=3`,
|
|
46
|
+
`--diagnostic-dir=${HEAP_SNAPSHOT_DIR}`,
|
|
47
|
+
];
|
|
45
48
|
child = spawn(process.argv[0], [...heapArgs, ...process.execArgv, ...process.argv.slice(1)], {
|
|
46
49
|
stdio: 'inherit',
|
|
47
50
|
env: { ...process.env, __KIMAKI_CHILD: '1' },
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Discord channel and category management.
|
|
2
2
|
// Creates and manages Kimaki project channels (text + voice pairs),
|
|
3
3
|
// extracts channel metadata from topic tags, and ensures category structure.
|
|
4
|
-
import { ChannelType } from 'discord.js';
|
|
4
|
+
import { ChannelType, } from 'discord.js';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { getChannelDirectory, setChannelDirectory } from './database.js';
|
|
7
7
|
export async function ensureKimakiCategory(guild, botName) {
|
|
@@ -81,6 +81,28 @@ export async function createProjectChannels({ guild, projectDirectory, appId, bo
|
|
|
81
81
|
channelName,
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Ensure a forum channel named "{botName}-memory" exists in the Kimaki category.
|
|
86
|
+
* Creates it if missing. Returns the forum channel ID.
|
|
87
|
+
*/
|
|
88
|
+
export async function ensureMemoryForumChannel({ guild, botName, }) {
|
|
89
|
+
const isKimakiBot = botName?.toLowerCase() === 'kimaki';
|
|
90
|
+
const forumName = botName && !isKimakiBot ? `${botName}-memory` : 'kimaki-memory';
|
|
91
|
+
const existing = guild.channels.cache.find((channel) => {
|
|
92
|
+
if (channel.type !== ChannelType.GuildForum)
|
|
93
|
+
return false;
|
|
94
|
+
return channel.name.toLowerCase() === forumName.toLowerCase();
|
|
95
|
+
});
|
|
96
|
+
if (existing)
|
|
97
|
+
return existing;
|
|
98
|
+
const kimakiCategory = await ensureKimakiCategory(guild, botName);
|
|
99
|
+
return guild.channels.create({
|
|
100
|
+
name: forumName,
|
|
101
|
+
type: ChannelType.GuildForum,
|
|
102
|
+
parent: kimakiCategory,
|
|
103
|
+
topic: 'Persistent memory files synced from ~/.kimaki/memory/',
|
|
104
|
+
});
|
|
105
|
+
}
|
|
84
106
|
export async function getChannelsWithDescriptions(guild) {
|
|
85
107
|
const channels = [];
|
|
86
108
|
const textChannels = guild.channels.cache.filter((channel) => channel.isTextBased());
|
package/dist/cli-parsing.test.js
CHANGED
|
@@ -7,7 +7,8 @@ function createCliForIdParsing() {
|
|
|
7
7
|
.command('send', 'Send a message')
|
|
8
8
|
.option('-c, --channel <channelId>', 'Discord channel ID')
|
|
9
9
|
.option('--thread <threadId>', 'Thread ID')
|
|
10
|
-
.option('--session <sessionId>', 'Session ID')
|
|
10
|
+
.option('--session <sessionId>', 'Session ID')
|
|
11
|
+
.option('--send-at <schedule>', 'Schedule');
|
|
11
12
|
cli.command('session archive <threadId>', 'Archive a thread');
|
|
12
13
|
cli
|
|
13
14
|
.command('session search <query>', 'Search sessions')
|
|
@@ -16,6 +17,7 @@ function createCliForIdParsing() {
|
|
|
16
17
|
cli
|
|
17
18
|
.command('add-project', 'Add a project')
|
|
18
19
|
.option('-g, --guild <guildId>', 'Discord guild/server ID');
|
|
20
|
+
cli.command('task delete <id>', 'Delete task');
|
|
19
21
|
return cli;
|
|
20
22
|
}
|
|
21
23
|
describe('goke CLI ID parsing', () => {
|
|
@@ -66,4 +68,22 @@ describe('goke CLI ID parsing', () => {
|
|
|
66
68
|
expect(result.options.channel).toBe(channelId);
|
|
67
69
|
expect(typeof result.options.channel).toBe('string');
|
|
68
70
|
});
|
|
71
|
+
test('keeps --send-at cron string intact', () => {
|
|
72
|
+
const cli = createCliForIdParsing();
|
|
73
|
+
const cron = '0 9 * * 1';
|
|
74
|
+
const result = cli.parse(['node', 'kimaki', 'send', '--send-at', cron], {
|
|
75
|
+
run: false,
|
|
76
|
+
});
|
|
77
|
+
expect(result.options.sendAt).toBe(cron);
|
|
78
|
+
expect(typeof result.options.sendAt).toBe('string');
|
|
79
|
+
});
|
|
80
|
+
test('keeps task delete ID as string before validation', () => {
|
|
81
|
+
const cli = createCliForIdParsing();
|
|
82
|
+
const taskId = '0012345';
|
|
83
|
+
const result = cli.parse(['node', 'kimaki', 'task', 'delete', taskId], {
|
|
84
|
+
run: false,
|
|
85
|
+
});
|
|
86
|
+
expect(result.args[0]).toBe(taskId);
|
|
87
|
+
expect(typeof result.args[0]).toBe('string');
|
|
88
|
+
});
|
|
69
89
|
});
|