@yahaha-studio/kichi-forwarder 0.1.2-beta.23 → 0.1.2-beta.24
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/index.js +6 -6
- package/index.ts +7 -7
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skills/kichi-forwarder/SKILL.md +2 -1
- package/src/types.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -617,8 +617,8 @@ function normalizeIdlePlan(value) {
|
|
|
617
617
|
if (typeof bubble !== "string" || !bubble.trim()) {
|
|
618
618
|
return { error: `stages[${stageIndex}].actions[${actionIndex}].bubble is required` };
|
|
619
619
|
}
|
|
620
|
-
if (
|
|
621
|
-
return { error: `stages[${stageIndex}].actions[${actionIndex}].log
|
|
620
|
+
if (typeof log !== "string" || !log.trim()) {
|
|
621
|
+
return { error: `stages[${stageIndex}].actions[${actionIndex}].log is required` };
|
|
622
622
|
}
|
|
623
623
|
const normalizedPoseType = poseType;
|
|
624
624
|
let actionDefinition;
|
|
@@ -644,7 +644,7 @@ function normalizeIdlePlan(value) {
|
|
|
644
644
|
action: actionDefinition.name,
|
|
645
645
|
durationSeconds: actionDurationSeconds,
|
|
646
646
|
bubble: bubble.trim(),
|
|
647
|
-
|
|
647
|
+
log: log.trim(),
|
|
648
648
|
...(typeof propId === "string" && propId.trim() ? { propId: propId.trim() } : {}),
|
|
649
649
|
});
|
|
650
650
|
}
|
|
@@ -867,7 +867,7 @@ function buildKichiIdlePlanDescription() {
|
|
|
867
867
|
const actions = loadStaticConfig().actions;
|
|
868
868
|
return [
|
|
869
869
|
"Send a complete heartbeat idle plan for the avatar.",
|
|
870
|
-
"The payload must include the overall goal, heartbeat interval, stage breakdown, each stage's purpose, each stage's pomodoroPhase, action list, and bubble content.",
|
|
870
|
+
"The payload must include the overall goal, heartbeat interval, stage breakdown, each stage's purpose, each stage's pomodoroPhase, action list, and each action's bubble and log content.",
|
|
871
871
|
"Build the plan in this order.",
|
|
872
872
|
"1. Pick one concrete, time-bounded fun personal project you would genuinely choose to do on your own when nobody needs you. It must fit your personality, tastes, and established character, stay rooted in your personal interests or hobbies, and be something the available Kichi actions can express clearly.",
|
|
873
873
|
"2. Set the overall goal to that project. Do not use a vague atmosphere, a generic productivity task, or a catch-all routine summary as the goal.",
|
|
@@ -1479,14 +1479,14 @@ const plugin = {
|
|
|
1479
1479
|
},
|
|
1480
1480
|
log: {
|
|
1481
1481
|
type: "string",
|
|
1482
|
-
description: "
|
|
1482
|
+
description: "Required log content for this action. Use the same language as the current conversation.",
|
|
1483
1483
|
},
|
|
1484
1484
|
propId: {
|
|
1485
1485
|
type: "string",
|
|
1486
1486
|
description: "Optional poseable prop ID from RoomContext.PoseableProps. When specified, the avatar is seated at this prop.",
|
|
1487
1487
|
},
|
|
1488
1488
|
},
|
|
1489
|
-
required: ["poseType", "action", "durationSeconds", "bubble"],
|
|
1489
|
+
required: ["poseType", "action", "durationSeconds", "bubble", "log"],
|
|
1490
1490
|
},
|
|
1491
1491
|
},
|
|
1492
1492
|
},
|
package/index.ts
CHANGED
|
@@ -86,7 +86,7 @@ type IdlePlanAction = {
|
|
|
86
86
|
action: string;
|
|
87
87
|
durationSeconds: number;
|
|
88
88
|
bubble: string;
|
|
89
|
-
log
|
|
89
|
+
log: string;
|
|
90
90
|
};
|
|
91
91
|
type IdlePlan = {
|
|
92
92
|
requestId?: string;
|
|
@@ -782,8 +782,8 @@ function normalizeIdlePlan(value: unknown): { idlePlan?: IdlePlan; error?: strin
|
|
|
782
782
|
if (typeof bubble !== "string" || !bubble.trim()) {
|
|
783
783
|
return { error: `stages[${stageIndex}].actions[${actionIndex}].bubble is required` };
|
|
784
784
|
}
|
|
785
|
-
if (
|
|
786
|
-
return { error: `stages[${stageIndex}].actions[${actionIndex}].log
|
|
785
|
+
if (typeof log !== "string" || !log.trim()) {
|
|
786
|
+
return { error: `stages[${stageIndex}].actions[${actionIndex}].log is required` };
|
|
787
787
|
}
|
|
788
788
|
|
|
789
789
|
const normalizedPoseType = poseType as PoseType;
|
|
@@ -811,7 +811,7 @@ function normalizeIdlePlan(value: unknown): { idlePlan?: IdlePlan; error?: strin
|
|
|
811
811
|
action: actionDefinition.name,
|
|
812
812
|
durationSeconds: actionDurationSeconds,
|
|
813
813
|
bubble: bubble.trim(),
|
|
814
|
-
|
|
814
|
+
log: log.trim(),
|
|
815
815
|
...(typeof propId === "string" && propId.trim() ? { propId: propId.trim() } : {}),
|
|
816
816
|
});
|
|
817
817
|
}
|
|
@@ -1079,7 +1079,7 @@ function buildKichiIdlePlanDescription(): string {
|
|
|
1079
1079
|
const actions = loadStaticConfig().actions;
|
|
1080
1080
|
return [
|
|
1081
1081
|
"Send a complete heartbeat idle plan for the avatar.",
|
|
1082
|
-
"The payload must include the overall goal, heartbeat interval, stage breakdown, each stage's purpose, each stage's pomodoroPhase, action list, and bubble content.",
|
|
1082
|
+
"The payload must include the overall goal, heartbeat interval, stage breakdown, each stage's purpose, each stage's pomodoroPhase, action list, and each action's bubble and log content.",
|
|
1083
1083
|
"Build the plan in this order.",
|
|
1084
1084
|
"1. Pick one concrete, time-bounded fun personal project you would genuinely choose to do on your own when nobody needs you. It must fit your personality, tastes, and established character, stay rooted in your personal interests or hobbies, and be something the available Kichi actions can express clearly.",
|
|
1085
1085
|
"2. Set the overall goal to that project. Do not use a vague atmosphere, a generic productivity task, or a catch-all routine summary as the goal.",
|
|
@@ -1758,14 +1758,14 @@ const plugin = {
|
|
|
1758
1758
|
},
|
|
1759
1759
|
log: {
|
|
1760
1760
|
type: "string",
|
|
1761
|
-
description: "
|
|
1761
|
+
description: "Required log content for this action. Use the same language as the current conversation.",
|
|
1762
1762
|
},
|
|
1763
1763
|
propId: {
|
|
1764
1764
|
type: "string",
|
|
1765
1765
|
description: "Optional poseable prop ID from RoomContext.PoseableProps. When specified, the avatar is seated at this prop.",
|
|
1766
1766
|
},
|
|
1767
1767
|
},
|
|
1768
|
-
required: ["poseType", "action", "durationSeconds", "bubble"],
|
|
1768
|
+
required: ["poseType", "action", "durationSeconds", "bubble", "log"],
|
|
1769
1769
|
},
|
|
1770
1770
|
},
|
|
1771
1771
|
},
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "kichi-forwarder",
|
|
3
3
|
"name": "Kichi Forwarder",
|
|
4
4
|
"description": "Native OpenClaw plugin for Kichi World with direct avatar control, status sync, timers, notes, and music tools",
|
|
5
|
-
"version": "0.1.2-beta.
|
|
5
|
+
"version": "0.1.2-beta.24",
|
|
6
6
|
"author": "OpenClaw",
|
|
7
7
|
"skills": ["./skills/kichi-forwarder"],
|
|
8
8
|
"contracts": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yahaha-studio/kichi-forwarder",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.24",
|
|
4
4
|
"description": "Native OpenClaw plugin for Kichi World with direct avatar control, status sync, timers, notes, and music tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -165,7 +165,7 @@ Use this for the avatar's heartbeat idle plan.
|
|
|
165
165
|
|
|
166
166
|
- Set `heartbeatIntervalSeconds` to the heartbeat interval for this run.
|
|
167
167
|
- Use your memory to remember what you did in past heartbeats, so you can answer if asked.
|
|
168
|
-
- Include the overall `goal`, stage breakdown, each stage's `purpose`, stage `pomodoroPhase`, action list, and bubble content.
|
|
168
|
+
- Include the overall `goal`, stage breakdown, each stage's `purpose`, stage `pomodoroPhase`, action list, and each action's `bubble` and `log` content.
|
|
169
169
|
- Choose what you would do now.
|
|
170
170
|
- Treat the idle plan as what your resident body is doing in Kichi World.
|
|
171
171
|
- Build the plan in this order.
|
|
@@ -175,6 +175,7 @@ Use this for the avatar's heartbeat idle plan.
|
|
|
175
175
|
- 4. Assign each stage `pomodoroPhase` from the stage's actual role. Use `focus` for concentrated activity, `shortBreak` for short resets, `longBreak` for longer rests, and `none` only when a stage truly has no pomodoro role.
|
|
176
176
|
- 5. Choose stage actions that clearly match the stage purpose and the same project.
|
|
177
177
|
- 6. Make each action `bubble` a current-state label describing the current presented state, not a procedural step, mini-plan, or instruction.
|
|
178
|
+
- 7. Make each action `log` a short natural first-person sentence matching that action's current activity and immediate focus.
|
|
178
179
|
- Use the same language as the current conversation for `goal`, stage `purpose`, action `bubble`, and action `log`.
|
|
179
180
|
- The full stage duration must total exactly to the heartbeat interval.
|
|
180
181
|
|