@ghostpaw/questlog 0.7.0 → 0.9.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/README.md +95 -18
- package/SKILL.md +29 -15
- package/dist/chunk-3B6FMHZU.js +384 -0
- package/dist/chunk-3Y5F3SMB.js +4308 -0
- package/dist/chunk-RUSE7ZFF.js +58 -0
- package/dist/chunk-SVWAEAKC.js +5 -0
- package/dist/cli.js +11 -7468
- package/dist/cli_main-ED5BJPSR.js +626 -0
- package/dist/index.cjs +64 -45
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +64 -45
- package/dist/mcp-server.js +71 -46
- package/dist/mcp.cjs +65 -46
- package/dist/mcp.js +65 -46
- package/dist/open_questlog_db-SH3DAU4C.js +2 -0
- package/dist/questlog_skill_spec-JLZH3JL2.js +807 -0
- package/dist/serve_questlog_mcp-J4ZHNEOT.js +212 -0
- package/dist/skill_markdown-7HCMSJYR.js +80 -0
- package/package.json +7 -3
- package/skills/questlog/SKILL.md +29 -15
package/dist/index.cjs
CHANGED
|
@@ -3282,6 +3282,17 @@ function useToolNext(tool, message, suggestedInput = {}) {
|
|
|
3282
3282
|
};
|
|
3283
3283
|
}
|
|
3284
3284
|
|
|
3285
|
+
// src/tools/quest_resolution_fields.ts
|
|
3286
|
+
function questResolutionFields({
|
|
3287
|
+
outcome,
|
|
3288
|
+
resolvedAt
|
|
3289
|
+
}) {
|
|
3290
|
+
const fields = {};
|
|
3291
|
+
if (outcome != null) fields.outcome = outcome;
|
|
3292
|
+
if (resolvedAt != null) fields.resolvedAt = resolvedAt;
|
|
3293
|
+
return fields;
|
|
3294
|
+
}
|
|
3295
|
+
|
|
3285
3296
|
// src/tools/tool_ref.ts
|
|
3286
3297
|
function toQuestRef(quest) {
|
|
3287
3298
|
return {
|
|
@@ -3289,15 +3300,12 @@ function toQuestRef(quest) {
|
|
|
3289
3300
|
id: quest.id,
|
|
3290
3301
|
title: quest.title,
|
|
3291
3302
|
markerId: "markerId" in quest ? quest.markerId : null,
|
|
3292
|
-
state: "state" in quest ? quest.state : deriveQuestState(
|
|
3293
|
-
startedAt: quest.startedAt,
|
|
3294
|
-
resolvedAt: quest.resolvedAt,
|
|
3295
|
-
success: quest.success
|
|
3296
|
-
})
|
|
3303
|
+
state: "state" in quest ? quest.state : deriveQuestState(quest)
|
|
3297
3304
|
};
|
|
3298
3305
|
}
|
|
3299
3306
|
function toQuestListItem(quest) {
|
|
3300
3307
|
return {
|
|
3308
|
+
...questResolutionFields(quest),
|
|
3301
3309
|
...toQuestRef(quest),
|
|
3302
3310
|
subtitle: quest.objective,
|
|
3303
3311
|
dueAt: quest.effectiveDueAt,
|
|
@@ -3429,55 +3437,56 @@ var captureRumorTool = defineQuestlogTool({
|
|
|
3429
3437
|
});
|
|
3430
3438
|
|
|
3431
3439
|
// src/tools/inspect_questlog_item_tool.ts
|
|
3440
|
+
function compactFields(detail, keys) {
|
|
3441
|
+
const compact = {};
|
|
3442
|
+
for (const key of keys) compact[key] = detail[key];
|
|
3443
|
+
return compact;
|
|
3444
|
+
}
|
|
3432
3445
|
function toQuestCompactDetail(detail) {
|
|
3433
3446
|
return {
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3447
|
+
...questResolutionFields(detail),
|
|
3448
|
+
...compactFields(detail, [
|
|
3449
|
+
"id",
|
|
3450
|
+
"title",
|
|
3451
|
+
"objective",
|
|
3452
|
+
"state",
|
|
3453
|
+
"markerId",
|
|
3454
|
+
"available",
|
|
3455
|
+
"effectiveDueAt",
|
|
3456
|
+
"tagNames",
|
|
3457
|
+
"questlineId",
|
|
3458
|
+
"sourceRumorId",
|
|
3459
|
+
"spawnedFromRepeatableId"
|
|
3460
|
+
])
|
|
3445
3461
|
};
|
|
3446
3462
|
}
|
|
3447
3463
|
function toQuestlineCompactDetail(detail) {
|
|
3448
|
-
return
|
|
3449
|
-
id
|
|
3450
|
-
title
|
|
3451
|
-
description
|
|
3452
|
-
dueAt
|
|
3453
|
-
archivedAt
|
|
3454
|
-
totalQuests
|
|
3455
|
-
availableQuests
|
|
3456
|
-
overdueQuests
|
|
3457
|
-
sourceRumorId
|
|
3458
|
-
|
|
3464
|
+
return compactFields(detail, [
|
|
3465
|
+
"id",
|
|
3466
|
+
"title",
|
|
3467
|
+
"description",
|
|
3468
|
+
"dueAt",
|
|
3469
|
+
"archivedAt",
|
|
3470
|
+
"totalQuests",
|
|
3471
|
+
"availableQuests",
|
|
3472
|
+
"overdueQuests",
|
|
3473
|
+
"sourceRumorId"
|
|
3474
|
+
]);
|
|
3459
3475
|
}
|
|
3460
3476
|
function toRepeatableQuestCompactDetail(detail) {
|
|
3461
|
-
return
|
|
3462
|
-
id
|
|
3463
|
-
title
|
|
3464
|
-
objective
|
|
3465
|
-
rrule
|
|
3466
|
-
anchorAt
|
|
3467
|
-
questlineId
|
|
3468
|
-
archivedAt
|
|
3469
|
-
deletedAt
|
|
3470
|
-
|
|
3477
|
+
return compactFields(detail, [
|
|
3478
|
+
"id",
|
|
3479
|
+
"title",
|
|
3480
|
+
"objective",
|
|
3481
|
+
"rrule",
|
|
3482
|
+
"anchorAt",
|
|
3483
|
+
"questlineId",
|
|
3484
|
+
"archivedAt",
|
|
3485
|
+
"deletedAt"
|
|
3486
|
+
]);
|
|
3471
3487
|
}
|
|
3472
3488
|
function toRumorCompactDetail(detail) {
|
|
3473
|
-
return
|
|
3474
|
-
id: detail.id,
|
|
3475
|
-
title: detail.title,
|
|
3476
|
-
details: detail.details,
|
|
3477
|
-
state: detail.state,
|
|
3478
|
-
markerId: detail.markerId,
|
|
3479
|
-
outputs: detail.outputs
|
|
3480
|
-
};
|
|
3489
|
+
return compactFields(detail, ["id", "title", "details", "state", "markerId", "outputs"]);
|
|
3481
3490
|
}
|
|
3482
3491
|
function inspectQuestlogItemToolHandler(db, input) {
|
|
3483
3492
|
const detailLevel = input.detailLevel ?? "compact";
|
|
@@ -4743,6 +4752,16 @@ var rewardWorkTool = defineQuestlogTool({
|
|
|
4743
4752
|
function runQuestToolHandler(db, input) {
|
|
4744
4753
|
try {
|
|
4745
4754
|
const current = getQuestDetail(db, input.questId);
|
|
4755
|
+
if (input.action !== "start" && input.action !== "log_effort") {
|
|
4756
|
+
const outcome = input.outcome;
|
|
4757
|
+
if (typeof outcome !== "string") {
|
|
4758
|
+
return toolNeedsClarification(
|
|
4759
|
+
"missing_required_choice",
|
|
4760
|
+
`What outcome should be recorded for quest \`${current.title}\`?`,
|
|
4761
|
+
["outcome"]
|
|
4762
|
+
);
|
|
4763
|
+
}
|
|
4764
|
+
}
|
|
4746
4765
|
switch (input.action) {
|
|
4747
4766
|
case "start": {
|
|
4748
4767
|
if (current.resolvedAt != null) {
|
package/dist/index.d.cts
CHANGED
|
@@ -1005,6 +1005,8 @@ interface ToolEntityRef {
|
|
|
1005
1005
|
state?: string | null | undefined;
|
|
1006
1006
|
}
|
|
1007
1007
|
interface ToolListItem extends ToolEntityRef {
|
|
1008
|
+
outcome?: string;
|
|
1009
|
+
resolvedAt?: number;
|
|
1008
1010
|
subtitle?: string | undefined;
|
|
1009
1011
|
snippet?: string | undefined;
|
|
1010
1012
|
dueAt?: number | null | undefined;
|
|
@@ -1151,6 +1153,8 @@ interface InspectQuestlogItemToolData {
|
|
|
1151
1153
|
detailLevel: 'compact' | 'full';
|
|
1152
1154
|
}
|
|
1153
1155
|
interface QuestCompactDetail {
|
|
1156
|
+
outcome?: string;
|
|
1157
|
+
resolvedAt?: number;
|
|
1154
1158
|
id: number;
|
|
1155
1159
|
title: string;
|
|
1156
1160
|
objective: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1005,6 +1005,8 @@ interface ToolEntityRef {
|
|
|
1005
1005
|
state?: string | null | undefined;
|
|
1006
1006
|
}
|
|
1007
1007
|
interface ToolListItem extends ToolEntityRef {
|
|
1008
|
+
outcome?: string;
|
|
1009
|
+
resolvedAt?: number;
|
|
1008
1010
|
subtitle?: string | undefined;
|
|
1009
1011
|
snippet?: string | undefined;
|
|
1010
1012
|
dueAt?: number | null | undefined;
|
|
@@ -1151,6 +1153,8 @@ interface InspectQuestlogItemToolData {
|
|
|
1151
1153
|
detailLevel: 'compact' | 'full';
|
|
1152
1154
|
}
|
|
1153
1155
|
interface QuestCompactDetail {
|
|
1156
|
+
outcome?: string;
|
|
1157
|
+
resolvedAt?: number;
|
|
1154
1158
|
id: number;
|
|
1155
1159
|
title: string;
|
|
1156
1160
|
objective: string;
|
package/dist/index.js
CHANGED
|
@@ -3280,6 +3280,17 @@ function useToolNext(tool, message, suggestedInput = {}) {
|
|
|
3280
3280
|
};
|
|
3281
3281
|
}
|
|
3282
3282
|
|
|
3283
|
+
// src/tools/quest_resolution_fields.ts
|
|
3284
|
+
function questResolutionFields({
|
|
3285
|
+
outcome,
|
|
3286
|
+
resolvedAt
|
|
3287
|
+
}) {
|
|
3288
|
+
const fields = {};
|
|
3289
|
+
if (outcome != null) fields.outcome = outcome;
|
|
3290
|
+
if (resolvedAt != null) fields.resolvedAt = resolvedAt;
|
|
3291
|
+
return fields;
|
|
3292
|
+
}
|
|
3293
|
+
|
|
3283
3294
|
// src/tools/tool_ref.ts
|
|
3284
3295
|
function toQuestRef(quest) {
|
|
3285
3296
|
return {
|
|
@@ -3287,15 +3298,12 @@ function toQuestRef(quest) {
|
|
|
3287
3298
|
id: quest.id,
|
|
3288
3299
|
title: quest.title,
|
|
3289
3300
|
markerId: "markerId" in quest ? quest.markerId : null,
|
|
3290
|
-
state: "state" in quest ? quest.state : deriveQuestState(
|
|
3291
|
-
startedAt: quest.startedAt,
|
|
3292
|
-
resolvedAt: quest.resolvedAt,
|
|
3293
|
-
success: quest.success
|
|
3294
|
-
})
|
|
3301
|
+
state: "state" in quest ? quest.state : deriveQuestState(quest)
|
|
3295
3302
|
};
|
|
3296
3303
|
}
|
|
3297
3304
|
function toQuestListItem(quest) {
|
|
3298
3305
|
return {
|
|
3306
|
+
...questResolutionFields(quest),
|
|
3299
3307
|
...toQuestRef(quest),
|
|
3300
3308
|
subtitle: quest.objective,
|
|
3301
3309
|
dueAt: quest.effectiveDueAt,
|
|
@@ -3427,55 +3435,56 @@ var captureRumorTool = defineQuestlogTool({
|
|
|
3427
3435
|
});
|
|
3428
3436
|
|
|
3429
3437
|
// src/tools/inspect_questlog_item_tool.ts
|
|
3438
|
+
function compactFields(detail, keys) {
|
|
3439
|
+
const compact = {};
|
|
3440
|
+
for (const key of keys) compact[key] = detail[key];
|
|
3441
|
+
return compact;
|
|
3442
|
+
}
|
|
3430
3443
|
function toQuestCompactDetail(detail) {
|
|
3431
3444
|
return {
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3445
|
+
...questResolutionFields(detail),
|
|
3446
|
+
...compactFields(detail, [
|
|
3447
|
+
"id",
|
|
3448
|
+
"title",
|
|
3449
|
+
"objective",
|
|
3450
|
+
"state",
|
|
3451
|
+
"markerId",
|
|
3452
|
+
"available",
|
|
3453
|
+
"effectiveDueAt",
|
|
3454
|
+
"tagNames",
|
|
3455
|
+
"questlineId",
|
|
3456
|
+
"sourceRumorId",
|
|
3457
|
+
"spawnedFromRepeatableId"
|
|
3458
|
+
])
|
|
3443
3459
|
};
|
|
3444
3460
|
}
|
|
3445
3461
|
function toQuestlineCompactDetail(detail) {
|
|
3446
|
-
return
|
|
3447
|
-
id
|
|
3448
|
-
title
|
|
3449
|
-
description
|
|
3450
|
-
dueAt
|
|
3451
|
-
archivedAt
|
|
3452
|
-
totalQuests
|
|
3453
|
-
availableQuests
|
|
3454
|
-
overdueQuests
|
|
3455
|
-
sourceRumorId
|
|
3456
|
-
|
|
3462
|
+
return compactFields(detail, [
|
|
3463
|
+
"id",
|
|
3464
|
+
"title",
|
|
3465
|
+
"description",
|
|
3466
|
+
"dueAt",
|
|
3467
|
+
"archivedAt",
|
|
3468
|
+
"totalQuests",
|
|
3469
|
+
"availableQuests",
|
|
3470
|
+
"overdueQuests",
|
|
3471
|
+
"sourceRumorId"
|
|
3472
|
+
]);
|
|
3457
3473
|
}
|
|
3458
3474
|
function toRepeatableQuestCompactDetail(detail) {
|
|
3459
|
-
return
|
|
3460
|
-
id
|
|
3461
|
-
title
|
|
3462
|
-
objective
|
|
3463
|
-
rrule
|
|
3464
|
-
anchorAt
|
|
3465
|
-
questlineId
|
|
3466
|
-
archivedAt
|
|
3467
|
-
deletedAt
|
|
3468
|
-
|
|
3475
|
+
return compactFields(detail, [
|
|
3476
|
+
"id",
|
|
3477
|
+
"title",
|
|
3478
|
+
"objective",
|
|
3479
|
+
"rrule",
|
|
3480
|
+
"anchorAt",
|
|
3481
|
+
"questlineId",
|
|
3482
|
+
"archivedAt",
|
|
3483
|
+
"deletedAt"
|
|
3484
|
+
]);
|
|
3469
3485
|
}
|
|
3470
3486
|
function toRumorCompactDetail(detail) {
|
|
3471
|
-
return
|
|
3472
|
-
id: detail.id,
|
|
3473
|
-
title: detail.title,
|
|
3474
|
-
details: detail.details,
|
|
3475
|
-
state: detail.state,
|
|
3476
|
-
markerId: detail.markerId,
|
|
3477
|
-
outputs: detail.outputs
|
|
3478
|
-
};
|
|
3487
|
+
return compactFields(detail, ["id", "title", "details", "state", "markerId", "outputs"]);
|
|
3479
3488
|
}
|
|
3480
3489
|
function inspectQuestlogItemToolHandler(db, input) {
|
|
3481
3490
|
const detailLevel = input.detailLevel ?? "compact";
|
|
@@ -4741,6 +4750,16 @@ var rewardWorkTool = defineQuestlogTool({
|
|
|
4741
4750
|
function runQuestToolHandler(db, input) {
|
|
4742
4751
|
try {
|
|
4743
4752
|
const current = getQuestDetail(db, input.questId);
|
|
4753
|
+
if (input.action !== "start" && input.action !== "log_effort") {
|
|
4754
|
+
const outcome = input.outcome;
|
|
4755
|
+
if (typeof outcome !== "string") {
|
|
4756
|
+
return toolNeedsClarification(
|
|
4757
|
+
"missing_required_choice",
|
|
4758
|
+
`What outcome should be recorded for quest \`${current.title}\`?`,
|
|
4759
|
+
["outcome"]
|
|
4760
|
+
);
|
|
4761
|
+
}
|
|
4762
|
+
}
|
|
4744
4763
|
switch (input.action) {
|
|
4745
4764
|
case "start": {
|
|
4746
4765
|
if (current.resolvedAt != null) {
|
package/dist/mcp-server.js
CHANGED
|
@@ -677,7 +677,7 @@ var init_open_questlog_db = __esm({
|
|
|
677
677
|
var questlogVersion;
|
|
678
678
|
var init_version = __esm({
|
|
679
679
|
"src/version.ts"() {
|
|
680
|
-
questlogVersion = "0.
|
|
680
|
+
questlogVersion = "0.9.0";
|
|
681
681
|
}
|
|
682
682
|
});
|
|
683
683
|
|
|
@@ -1082,6 +1082,21 @@ var init_derive_quest_state = __esm({
|
|
|
1082
1082
|
}
|
|
1083
1083
|
});
|
|
1084
1084
|
|
|
1085
|
+
// src/tools/quest_resolution_fields.ts
|
|
1086
|
+
function questResolutionFields({
|
|
1087
|
+
outcome,
|
|
1088
|
+
resolvedAt
|
|
1089
|
+
}) {
|
|
1090
|
+
const fields = {};
|
|
1091
|
+
if (outcome != null) fields.outcome = outcome;
|
|
1092
|
+
if (resolvedAt != null) fields.resolvedAt = resolvedAt;
|
|
1093
|
+
return fields;
|
|
1094
|
+
}
|
|
1095
|
+
var init_quest_resolution_fields = __esm({
|
|
1096
|
+
"src/tools/quest_resolution_fields.ts"() {
|
|
1097
|
+
}
|
|
1098
|
+
});
|
|
1099
|
+
|
|
1085
1100
|
// src/tools/tool_ref.ts
|
|
1086
1101
|
function toQuestRef(quest) {
|
|
1087
1102
|
return {
|
|
@@ -1089,15 +1104,12 @@ function toQuestRef(quest) {
|
|
|
1089
1104
|
id: quest.id,
|
|
1090
1105
|
title: quest.title,
|
|
1091
1106
|
markerId: "markerId" in quest ? quest.markerId : null,
|
|
1092
|
-
state: "state" in quest ? quest.state : deriveQuestState(
|
|
1093
|
-
startedAt: quest.startedAt,
|
|
1094
|
-
resolvedAt: quest.resolvedAt,
|
|
1095
|
-
success: quest.success
|
|
1096
|
-
})
|
|
1107
|
+
state: "state" in quest ? quest.state : deriveQuestState(quest)
|
|
1097
1108
|
};
|
|
1098
1109
|
}
|
|
1099
1110
|
function toQuestListItem(quest) {
|
|
1100
1111
|
return {
|
|
1112
|
+
...questResolutionFields(quest),
|
|
1101
1113
|
...toQuestRef(quest),
|
|
1102
1114
|
subtitle: quest.objective,
|
|
1103
1115
|
dueAt: quest.effectiveDueAt,
|
|
@@ -1175,6 +1187,7 @@ var init_tool_ref = __esm({
|
|
|
1175
1187
|
"src/tools/tool_ref.ts"() {
|
|
1176
1188
|
init_derive_quest_state();
|
|
1177
1189
|
init_derive_rumor_state();
|
|
1190
|
+
init_quest_resolution_fields();
|
|
1178
1191
|
}
|
|
1179
1192
|
});
|
|
1180
1193
|
|
|
@@ -1710,55 +1723,56 @@ var init_get_rumor_detail = __esm({
|
|
|
1710
1723
|
});
|
|
1711
1724
|
|
|
1712
1725
|
// src/tools/inspect_questlog_item_tool.ts
|
|
1726
|
+
function compactFields(detail, keys) {
|
|
1727
|
+
const compact = {};
|
|
1728
|
+
for (const key of keys) compact[key] = detail[key];
|
|
1729
|
+
return compact;
|
|
1730
|
+
}
|
|
1713
1731
|
function toQuestCompactDetail(detail) {
|
|
1714
1732
|
return {
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1733
|
+
...questResolutionFields(detail),
|
|
1734
|
+
...compactFields(detail, [
|
|
1735
|
+
"id",
|
|
1736
|
+
"title",
|
|
1737
|
+
"objective",
|
|
1738
|
+
"state",
|
|
1739
|
+
"markerId",
|
|
1740
|
+
"available",
|
|
1741
|
+
"effectiveDueAt",
|
|
1742
|
+
"tagNames",
|
|
1743
|
+
"questlineId",
|
|
1744
|
+
"sourceRumorId",
|
|
1745
|
+
"spawnedFromRepeatableId"
|
|
1746
|
+
])
|
|
1726
1747
|
};
|
|
1727
1748
|
}
|
|
1728
1749
|
function toQuestlineCompactDetail(detail) {
|
|
1729
|
-
return
|
|
1730
|
-
id
|
|
1731
|
-
title
|
|
1732
|
-
description
|
|
1733
|
-
dueAt
|
|
1734
|
-
archivedAt
|
|
1735
|
-
totalQuests
|
|
1736
|
-
availableQuests
|
|
1737
|
-
overdueQuests
|
|
1738
|
-
sourceRumorId
|
|
1739
|
-
|
|
1750
|
+
return compactFields(detail, [
|
|
1751
|
+
"id",
|
|
1752
|
+
"title",
|
|
1753
|
+
"description",
|
|
1754
|
+
"dueAt",
|
|
1755
|
+
"archivedAt",
|
|
1756
|
+
"totalQuests",
|
|
1757
|
+
"availableQuests",
|
|
1758
|
+
"overdueQuests",
|
|
1759
|
+
"sourceRumorId"
|
|
1760
|
+
]);
|
|
1740
1761
|
}
|
|
1741
1762
|
function toRepeatableQuestCompactDetail(detail) {
|
|
1742
|
-
return
|
|
1743
|
-
id
|
|
1744
|
-
title
|
|
1745
|
-
objective
|
|
1746
|
-
rrule
|
|
1747
|
-
anchorAt
|
|
1748
|
-
questlineId
|
|
1749
|
-
archivedAt
|
|
1750
|
-
deletedAt
|
|
1751
|
-
|
|
1763
|
+
return compactFields(detail, [
|
|
1764
|
+
"id",
|
|
1765
|
+
"title",
|
|
1766
|
+
"objective",
|
|
1767
|
+
"rrule",
|
|
1768
|
+
"anchorAt",
|
|
1769
|
+
"questlineId",
|
|
1770
|
+
"archivedAt",
|
|
1771
|
+
"deletedAt"
|
|
1772
|
+
]);
|
|
1752
1773
|
}
|
|
1753
1774
|
function toRumorCompactDetail(detail) {
|
|
1754
|
-
return
|
|
1755
|
-
id: detail.id,
|
|
1756
|
-
title: detail.title,
|
|
1757
|
-
details: detail.details,
|
|
1758
|
-
state: detail.state,
|
|
1759
|
-
markerId: detail.markerId,
|
|
1760
|
-
outputs: detail.outputs
|
|
1761
|
-
};
|
|
1775
|
+
return compactFields(detail, ["id", "title", "details", "state", "markerId", "outputs"]);
|
|
1762
1776
|
}
|
|
1763
1777
|
function inspectQuestlogItemToolHandler(db, input) {
|
|
1764
1778
|
const detailLevel = input.detailLevel ?? "compact";
|
|
@@ -1865,6 +1879,7 @@ var init_inspect_questlog_item_tool = __esm({
|
|
|
1865
1879
|
init_get_quest_detail();
|
|
1866
1880
|
init_get_repeatable_quest_or_throw();
|
|
1867
1881
|
init_get_rumor_detail();
|
|
1882
|
+
init_quest_resolution_fields();
|
|
1868
1883
|
init_tool_errors();
|
|
1869
1884
|
init_tool_metadata();
|
|
1870
1885
|
init_tool_names();
|
|
@@ -4611,6 +4626,16 @@ var init_reward_work_tool = __esm({
|
|
|
4611
4626
|
function runQuestToolHandler(db, input) {
|
|
4612
4627
|
try {
|
|
4613
4628
|
const current = getQuestDetail(db, input.questId);
|
|
4629
|
+
if (input.action !== "start" && input.action !== "log_effort") {
|
|
4630
|
+
const outcome = input.outcome;
|
|
4631
|
+
if (typeof outcome !== "string") {
|
|
4632
|
+
return toolNeedsClarification(
|
|
4633
|
+
"missing_required_choice",
|
|
4634
|
+
`What outcome should be recorded for quest \`${current.title}\`?`,
|
|
4635
|
+
["outcome"]
|
|
4636
|
+
);
|
|
4637
|
+
}
|
|
4638
|
+
}
|
|
4614
4639
|
switch (input.action) {
|
|
4615
4640
|
case "start": {
|
|
4616
4641
|
if (current.resolvedAt != null) {
|
package/dist/mcp.cjs
CHANGED
|
@@ -386,7 +386,7 @@ async function openQuestlogDb(path) {
|
|
|
386
386
|
}
|
|
387
387
|
|
|
388
388
|
// src/version.ts
|
|
389
|
-
var questlogVersion = "0.
|
|
389
|
+
var questlogVersion = "0.9.0";
|
|
390
390
|
|
|
391
391
|
// src/surface/questlog_mcp_instructions.ts
|
|
392
392
|
var questlogMcpInstructions = "Questlog manages local tasks, calendar commitments, and recurring work. Search before creating work, inspect before changing it, and keep uncertain work as rumors. Use unlock prerequisites to sequence work. run_quest refuses blocked starts unless force is true. Review commitments and resolve work with an honest outcome.";
|
|
@@ -723,6 +723,17 @@ function deriveQuestState(quest) {
|
|
|
723
723
|
return "open";
|
|
724
724
|
}
|
|
725
725
|
|
|
726
|
+
// src/tools/quest_resolution_fields.ts
|
|
727
|
+
function questResolutionFields({
|
|
728
|
+
outcome,
|
|
729
|
+
resolvedAt
|
|
730
|
+
}) {
|
|
731
|
+
const fields = {};
|
|
732
|
+
if (outcome != null) fields.outcome = outcome;
|
|
733
|
+
if (resolvedAt != null) fields.resolvedAt = resolvedAt;
|
|
734
|
+
return fields;
|
|
735
|
+
}
|
|
736
|
+
|
|
726
737
|
// src/tools/tool_ref.ts
|
|
727
738
|
function toQuestRef(quest) {
|
|
728
739
|
return {
|
|
@@ -730,15 +741,12 @@ function toQuestRef(quest) {
|
|
|
730
741
|
id: quest.id,
|
|
731
742
|
title: quest.title,
|
|
732
743
|
markerId: "markerId" in quest ? quest.markerId : null,
|
|
733
|
-
state: "state" in quest ? quest.state : deriveQuestState(
|
|
734
|
-
startedAt: quest.startedAt,
|
|
735
|
-
resolvedAt: quest.resolvedAt,
|
|
736
|
-
success: quest.success
|
|
737
|
-
})
|
|
744
|
+
state: "state" in quest ? quest.state : deriveQuestState(quest)
|
|
738
745
|
};
|
|
739
746
|
}
|
|
740
747
|
function toQuestListItem(quest) {
|
|
741
748
|
return {
|
|
749
|
+
...questResolutionFields(quest),
|
|
742
750
|
...toQuestRef(quest),
|
|
743
751
|
subtitle: quest.objective,
|
|
744
752
|
dueAt: quest.effectiveDueAt,
|
|
@@ -1264,55 +1272,56 @@ function getRumorDetail(db, rumorId) {
|
|
|
1264
1272
|
}
|
|
1265
1273
|
|
|
1266
1274
|
// src/tools/inspect_questlog_item_tool.ts
|
|
1275
|
+
function compactFields(detail, keys) {
|
|
1276
|
+
const compact = {};
|
|
1277
|
+
for (const key of keys) compact[key] = detail[key];
|
|
1278
|
+
return compact;
|
|
1279
|
+
}
|
|
1267
1280
|
function toQuestCompactDetail(detail) {
|
|
1268
1281
|
return {
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1282
|
+
...questResolutionFields(detail),
|
|
1283
|
+
...compactFields(detail, [
|
|
1284
|
+
"id",
|
|
1285
|
+
"title",
|
|
1286
|
+
"objective",
|
|
1287
|
+
"state",
|
|
1288
|
+
"markerId",
|
|
1289
|
+
"available",
|
|
1290
|
+
"effectiveDueAt",
|
|
1291
|
+
"tagNames",
|
|
1292
|
+
"questlineId",
|
|
1293
|
+
"sourceRumorId",
|
|
1294
|
+
"spawnedFromRepeatableId"
|
|
1295
|
+
])
|
|
1280
1296
|
};
|
|
1281
1297
|
}
|
|
1282
1298
|
function toQuestlineCompactDetail(detail) {
|
|
1283
|
-
return
|
|
1284
|
-
id
|
|
1285
|
-
title
|
|
1286
|
-
description
|
|
1287
|
-
dueAt
|
|
1288
|
-
archivedAt
|
|
1289
|
-
totalQuests
|
|
1290
|
-
availableQuests
|
|
1291
|
-
overdueQuests
|
|
1292
|
-
sourceRumorId
|
|
1293
|
-
|
|
1299
|
+
return compactFields(detail, [
|
|
1300
|
+
"id",
|
|
1301
|
+
"title",
|
|
1302
|
+
"description",
|
|
1303
|
+
"dueAt",
|
|
1304
|
+
"archivedAt",
|
|
1305
|
+
"totalQuests",
|
|
1306
|
+
"availableQuests",
|
|
1307
|
+
"overdueQuests",
|
|
1308
|
+
"sourceRumorId"
|
|
1309
|
+
]);
|
|
1294
1310
|
}
|
|
1295
1311
|
function toRepeatableQuestCompactDetail(detail) {
|
|
1296
|
-
return
|
|
1297
|
-
id
|
|
1298
|
-
title
|
|
1299
|
-
objective
|
|
1300
|
-
rrule
|
|
1301
|
-
anchorAt
|
|
1302
|
-
questlineId
|
|
1303
|
-
archivedAt
|
|
1304
|
-
deletedAt
|
|
1305
|
-
|
|
1312
|
+
return compactFields(detail, [
|
|
1313
|
+
"id",
|
|
1314
|
+
"title",
|
|
1315
|
+
"objective",
|
|
1316
|
+
"rrule",
|
|
1317
|
+
"anchorAt",
|
|
1318
|
+
"questlineId",
|
|
1319
|
+
"archivedAt",
|
|
1320
|
+
"deletedAt"
|
|
1321
|
+
]);
|
|
1306
1322
|
}
|
|
1307
1323
|
function toRumorCompactDetail(detail) {
|
|
1308
|
-
return
|
|
1309
|
-
id: detail.id,
|
|
1310
|
-
title: detail.title,
|
|
1311
|
-
details: detail.details,
|
|
1312
|
-
state: detail.state,
|
|
1313
|
-
markerId: detail.markerId,
|
|
1314
|
-
outputs: detail.outputs
|
|
1315
|
-
};
|
|
1324
|
+
return compactFields(detail, ["id", "title", "details", "state", "markerId", "outputs"]);
|
|
1316
1325
|
}
|
|
1317
1326
|
function inspectQuestlogItemToolHandler(db, input) {
|
|
1318
1327
|
const detailLevel = input.detailLevel ?? "compact";
|
|
@@ -3599,6 +3608,16 @@ var rewardWorkTool = defineQuestlogTool({
|
|
|
3599
3608
|
function runQuestToolHandler(db, input) {
|
|
3600
3609
|
try {
|
|
3601
3610
|
const current = getQuestDetail(db, input.questId);
|
|
3611
|
+
if (input.action !== "start" && input.action !== "log_effort") {
|
|
3612
|
+
const outcome = input.outcome;
|
|
3613
|
+
if (typeof outcome !== "string") {
|
|
3614
|
+
return toolNeedsClarification(
|
|
3615
|
+
"missing_required_choice",
|
|
3616
|
+
`What outcome should be recorded for quest \`${current.title}\`?`,
|
|
3617
|
+
["outcome"]
|
|
3618
|
+
);
|
|
3619
|
+
}
|
|
3620
|
+
}
|
|
3602
3621
|
switch (input.action) {
|
|
3603
3622
|
case "start": {
|
|
3604
3623
|
if (current.resolvedAt != null) {
|