@mind-your-now/myn 0.4.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/LICENSE +21 -0
- package/README.md +318 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +147 -0
- package/dist/index.js.map +1 -0
- package/dist/src/client.d.ts +40 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +95 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/tools/briefing.d.ts +44 -0
- package/dist/src/tools/briefing.d.ts.map +1 -0
- package/dist/src/tools/briefing.js +116 -0
- package/dist/src/tools/briefing.js.map +1 -0
- package/dist/src/tools/calendar.d.ts +56 -0
- package/dist/src/tools/calendar.d.ts.map +1 -0
- package/dist/src/tools/calendar.js +206 -0
- package/dist/src/tools/calendar.js.map +1 -0
- package/dist/src/tools/capabilityHash.d.ts +26 -0
- package/dist/src/tools/capabilityHash.d.ts.map +1 -0
- package/dist/src/tools/capabilityHash.js +48 -0
- package/dist/src/tools/capabilityHash.js.map +1 -0
- package/dist/src/tools/habits.d.ts +43 -0
- package/dist/src/tools/habits.d.ts.map +1 -0
- package/dist/src/tools/habits.js +123 -0
- package/dist/src/tools/habits.js.map +1 -0
- package/dist/src/tools/household.d.ts +44 -0
- package/dist/src/tools/household.d.ts.map +1 -0
- package/dist/src/tools/household.js +146 -0
- package/dist/src/tools/household.js.map +1 -0
- package/dist/src/tools/lists.d.ts +45 -0
- package/dist/src/tools/lists.d.ts.map +1 -0
- package/dist/src/tools/lists.js +167 -0
- package/dist/src/tools/lists.js.map +1 -0
- package/dist/src/tools/memory.d.ts +45 -0
- package/dist/src/tools/memory.d.ts.map +1 -0
- package/dist/src/tools/memory.js +131 -0
- package/dist/src/tools/memory.js.map +1 -0
- package/dist/src/tools/myn_a2a_pairing.d.ts +42 -0
- package/dist/src/tools/myn_a2a_pairing.d.ts.map +1 -0
- package/dist/src/tools/myn_a2a_pairing.js +166 -0
- package/dist/src/tools/myn_a2a_pairing.js.map +1 -0
- package/dist/src/tools/planning.d.ts +56 -0
- package/dist/src/tools/planning.d.ts.map +1 -0
- package/dist/src/tools/planning.js +94 -0
- package/dist/src/tools/planning.js.map +1 -0
- package/dist/src/tools/profile.d.ts +47 -0
- package/dist/src/tools/profile.d.ts.map +1 -0
- package/dist/src/tools/profile.js +125 -0
- package/dist/src/tools/profile.js.map +1 -0
- package/dist/src/tools/projects.d.ts +45 -0
- package/dist/src/tools/projects.d.ts.map +1 -0
- package/dist/src/tools/projects.js +106 -0
- package/dist/src/tools/projects.js.map +1 -0
- package/dist/src/tools/search.d.ts +46 -0
- package/dist/src/tools/search.d.ts.map +1 -0
- package/dist/src/tools/search.js +93 -0
- package/dist/src/tools/search.js.map +1 -0
- package/dist/src/tools/syncOnMismatch.d.ts +48 -0
- package/dist/src/tools/syncOnMismatch.d.ts.map +1 -0
- package/dist/src/tools/syncOnMismatch.js +94 -0
- package/dist/src/tools/syncOnMismatch.js.map +1 -0
- package/dist/src/tools/tasks.d.ts +52 -0
- package/dist/src/tools/tasks.d.ts.map +1 -0
- package/dist/src/tools/tasks.js +200 -0
- package/dist/src/tools/tasks.js.map +1 -0
- package/dist/src/tools/timers.d.ts +48 -0
- package/dist/src/tools/timers.d.ts.map +1 -0
- package/dist/src/tools/timers.js +138 -0
- package/dist/src/tools/timers.js.map +1 -0
- package/openclaw.plugin.json +30 -0
- package/package.json +74 -0
- package/skills/myn/SKILL.md +54 -0
- package/skills/myn/references/authentication.md +83 -0
- package/skills/myn/references/briefing-api.md +187 -0
- package/skills/myn/references/calendar-api.md +139 -0
- package/skills/myn/references/habits-api.md +257 -0
- package/skills/myn/references/household-api.md +175 -0
- package/skills/myn/references/lists-api.md +180 -0
- package/skills/myn/references/memory-api.md +95 -0
- package/skills/myn/references/planning-api.md +191 -0
- package/skills/myn/references/profile-api.md +148 -0
- package/skills/myn/references/projects-api.md +127 -0
- package/skills/myn/references/search-api.md +97 -0
- package/skills/myn/references/tasks-api.md +187 -0
- package/skills/myn/references/timers-api.md +171 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* myn_tasks tool - Task CRUD, lifecycle, and search
|
|
3
|
+
*/
|
|
4
|
+
import type { MynApiClient } from '../client.js';
|
|
5
|
+
export declare const TasksInputSchema: import("@sinclair/typebox").TObject<{
|
|
6
|
+
action: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"list">, import("@sinclair/typebox").TLiteral<"get">, import("@sinclair/typebox").TLiteral<"create">, import("@sinclair/typebox").TLiteral<"update">, import("@sinclair/typebox").TLiteral<"complete">, import("@sinclair/typebox").TLiteral<"archive">, import("@sinclair/typebox").TLiteral<"search">]>;
|
|
7
|
+
status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"PENDING">, import("@sinclair/typebox").TLiteral<"IN_PROGRESS">, import("@sinclair/typebox").TLiteral<"COMPLETED">, import("@sinclair/typebox").TLiteral<"ARCHIVED">]>>;
|
|
8
|
+
priority: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"CRITICAL">, import("@sinclair/typebox").TLiteral<"OPPORTUNITY_NOW">, import("@sinclair/typebox").TLiteral<"OVER_THE_HORIZON">, import("@sinclair/typebox").TLiteral<"PARKING_LOT">]>>;
|
|
9
|
+
projectId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
10
|
+
startDate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
11
|
+
endDate: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
12
|
+
limit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
13
|
+
offset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
14
|
+
taskId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
15
|
+
title: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
16
|
+
description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
17
|
+
taskType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"TASK">, import("@sinclair/typebox").TLiteral<"HABIT">, import("@sinclair/typebox").TLiteral<"CHORE">]>>;
|
|
18
|
+
duration: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
19
|
+
id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
20
|
+
recurrenceRule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
21
|
+
updates: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
|
|
22
|
+
query: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
23
|
+
includeArchived: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
24
|
+
}>;
|
|
25
|
+
export type TasksInput = typeof TasksInputSchema.static;
|
|
26
|
+
export declare function executeTasks(client: MynApiClient, input: TasksInput): Promise<{
|
|
27
|
+
success: true;
|
|
28
|
+
data: unknown;
|
|
29
|
+
} | {
|
|
30
|
+
success: false;
|
|
31
|
+
error: string;
|
|
32
|
+
details?: unknown;
|
|
33
|
+
}>;
|
|
34
|
+
export declare function registerTasksTool(api: OpenClawPluginApi, client: MynApiClient): void;
|
|
35
|
+
interface OpenClawPluginApi {
|
|
36
|
+
registerTool(tool: {
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
inputSchema: unknown;
|
|
41
|
+
execute: (input: unknown) => Promise<unknown>;
|
|
42
|
+
}): void;
|
|
43
|
+
logger: {
|
|
44
|
+
debug(message: string): void;
|
|
45
|
+
info(message: string): void;
|
|
46
|
+
warn(message: string): void;
|
|
47
|
+
error(message: string): void;
|
|
48
|
+
};
|
|
49
|
+
pluginConfig?: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAwBjD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;EAiC3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC;AAExD,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA0BlG;AA4GD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAUpF;AAGD,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,GAAG,IAAI,CAAC;IACT,MAAM,EAAE;QACN,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* myn_tasks tool - Task CRUD, lifecycle, and search
|
|
3
|
+
*/
|
|
4
|
+
import { Type } from '@sinclair/typebox';
|
|
5
|
+
import { jsonResult, errorResult } from '../client.js';
|
|
6
|
+
// Schema definitions
|
|
7
|
+
const PrioritySchema = Type.Union([
|
|
8
|
+
Type.Literal('CRITICAL'),
|
|
9
|
+
Type.Literal('OPPORTUNITY_NOW'),
|
|
10
|
+
Type.Literal('OVER_THE_HORIZON'),
|
|
11
|
+
Type.Literal('PARKING_LOT')
|
|
12
|
+
]);
|
|
13
|
+
const TaskTypeSchema = Type.Union([
|
|
14
|
+
Type.Literal('TASK'),
|
|
15
|
+
Type.Literal('HABIT'),
|
|
16
|
+
Type.Literal('CHORE')
|
|
17
|
+
]);
|
|
18
|
+
const TaskStatusSchema = Type.Union([
|
|
19
|
+
Type.Literal('PENDING'),
|
|
20
|
+
Type.Literal('IN_PROGRESS'),
|
|
21
|
+
Type.Literal('COMPLETED'),
|
|
22
|
+
Type.Literal('ARCHIVED')
|
|
23
|
+
]);
|
|
24
|
+
export const TasksInputSchema = Type.Object({
|
|
25
|
+
action: Type.Union([
|
|
26
|
+
Type.Literal('list'),
|
|
27
|
+
Type.Literal('get'),
|
|
28
|
+
Type.Literal('create'),
|
|
29
|
+
Type.Literal('update'),
|
|
30
|
+
Type.Literal('complete'),
|
|
31
|
+
Type.Literal('archive'),
|
|
32
|
+
Type.Literal('search')
|
|
33
|
+
]),
|
|
34
|
+
// List parameters
|
|
35
|
+
status: Type.Optional(TaskStatusSchema),
|
|
36
|
+
priority: Type.Optional(PrioritySchema),
|
|
37
|
+
projectId: Type.Optional(Type.String()),
|
|
38
|
+
startDate: Type.Optional(Type.String({ format: 'date' })),
|
|
39
|
+
endDate: Type.Optional(Type.String({ format: 'date' })),
|
|
40
|
+
limit: Type.Optional(Type.Number({ default: 20 })),
|
|
41
|
+
offset: Type.Optional(Type.Number({ default: 0 })),
|
|
42
|
+
// Get/Update/Complete/Archive parameters
|
|
43
|
+
taskId: Type.Optional(Type.String({ format: 'uuid' })),
|
|
44
|
+
// Create/Update parameters
|
|
45
|
+
title: Type.Optional(Type.String({ minLength: 1, maxLength: 200 })),
|
|
46
|
+
description: Type.Optional(Type.String({ maxLength: 2000 })),
|
|
47
|
+
taskType: Type.Optional(TaskTypeSchema),
|
|
48
|
+
duration: Type.Optional(Type.String()), // "30m", "1h", "1h30m"
|
|
49
|
+
// Create specific
|
|
50
|
+
id: Type.Optional(Type.String({ format: 'uuid' })), // Client-generated UUID
|
|
51
|
+
recurrenceRule: Type.Optional(Type.String()), // For HABIT/CHORE types
|
|
52
|
+
// Update specific
|
|
53
|
+
updates: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
|
|
54
|
+
// Search parameters
|
|
55
|
+
query: Type.Optional(Type.String()),
|
|
56
|
+
includeArchived: Type.Optional(Type.Boolean({ default: false }))
|
|
57
|
+
});
|
|
58
|
+
export async function executeTasks(client, input) {
|
|
59
|
+
try {
|
|
60
|
+
switch (input.action) {
|
|
61
|
+
case 'list':
|
|
62
|
+
return await listTasks(client, input);
|
|
63
|
+
case 'get':
|
|
64
|
+
return await getTask(client, input);
|
|
65
|
+
case 'create':
|
|
66
|
+
return await createTask(client, input);
|
|
67
|
+
case 'update':
|
|
68
|
+
return await updateTask(client, input);
|
|
69
|
+
case 'complete':
|
|
70
|
+
return await completeTask(client, input);
|
|
71
|
+
case 'archive':
|
|
72
|
+
return await archiveTask(client, input);
|
|
73
|
+
case 'search':
|
|
74
|
+
return await searchTasks(client, input);
|
|
75
|
+
default:
|
|
76
|
+
return errorResult(`Unknown action: ${input.action}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error instanceof Error) {
|
|
81
|
+
return errorResult(error.message);
|
|
82
|
+
}
|
|
83
|
+
return errorResult('Unknown error occurred');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function listTasks(client, input) {
|
|
87
|
+
const params = new URLSearchParams();
|
|
88
|
+
if (input.status)
|
|
89
|
+
params.append('status', input.status);
|
|
90
|
+
if (input.priority)
|
|
91
|
+
params.append('priority', input.priority);
|
|
92
|
+
if (input.projectId)
|
|
93
|
+
params.append('projectId', input.projectId);
|
|
94
|
+
if (input.startDate)
|
|
95
|
+
params.append('startDate', input.startDate);
|
|
96
|
+
if (input.endDate)
|
|
97
|
+
params.append('endDate', input.endDate);
|
|
98
|
+
if (input.limit)
|
|
99
|
+
params.append('limit', input.limit.toString());
|
|
100
|
+
if (input.offset)
|
|
101
|
+
params.append('offset', input.offset.toString());
|
|
102
|
+
const queryString = params.toString() ? `?${params.toString()}` : '';
|
|
103
|
+
const data = await client.get(`/api/v2/unified-tasks${queryString}`);
|
|
104
|
+
return jsonResult(data);
|
|
105
|
+
}
|
|
106
|
+
async function getTask(client, input) {
|
|
107
|
+
if (!input.taskId) {
|
|
108
|
+
return errorResult('taskId is required for get action');
|
|
109
|
+
}
|
|
110
|
+
const data = await client.get(`/api/v2/unified-tasks/${input.taskId}`);
|
|
111
|
+
return jsonResult(data);
|
|
112
|
+
}
|
|
113
|
+
async function createTask(client, input) {
|
|
114
|
+
if (!input.title) {
|
|
115
|
+
return errorResult('title is required for create action');
|
|
116
|
+
}
|
|
117
|
+
if (!input.priority) {
|
|
118
|
+
return errorResult('priority is required for create action (CRITICAL, OPPORTUNITY_NOW, OVER_THE_HORIZON, PARKING_LOT)');
|
|
119
|
+
}
|
|
120
|
+
if (!input.taskType) {
|
|
121
|
+
return errorResult('taskType is required for create action (TASK, HABIT, CHORE)');
|
|
122
|
+
}
|
|
123
|
+
if (!input.startDate) {
|
|
124
|
+
return errorResult('startDate is required for create action');
|
|
125
|
+
}
|
|
126
|
+
if (!input.id) {
|
|
127
|
+
return errorResult('id (client-generated UUID) is required for create action');
|
|
128
|
+
}
|
|
129
|
+
const body = {
|
|
130
|
+
id: input.id,
|
|
131
|
+
title: input.title,
|
|
132
|
+
taskType: input.taskType,
|
|
133
|
+
priority: input.priority,
|
|
134
|
+
startDate: input.startDate
|
|
135
|
+
};
|
|
136
|
+
if (input.description)
|
|
137
|
+
body.description = input.description;
|
|
138
|
+
if (input.duration)
|
|
139
|
+
body.duration = input.duration;
|
|
140
|
+
if (input.projectId)
|
|
141
|
+
body.projectId = input.projectId;
|
|
142
|
+
if (input.recurrenceRule)
|
|
143
|
+
body.recurrenceRule = input.recurrenceRule;
|
|
144
|
+
// Validation: HABIT and CHORE must have recurrenceRule
|
|
145
|
+
if ((input.taskType === 'HABIT' || input.taskType === 'CHORE') && !input.recurrenceRule) {
|
|
146
|
+
return errorResult(`${input.taskType} type requires recurrenceRule`);
|
|
147
|
+
}
|
|
148
|
+
const data = await client.post('/api/v2/unified-tasks', body);
|
|
149
|
+
return jsonResult(data);
|
|
150
|
+
}
|
|
151
|
+
async function updateTask(client, input) {
|
|
152
|
+
if (!input.taskId) {
|
|
153
|
+
return errorResult('taskId is required for update action');
|
|
154
|
+
}
|
|
155
|
+
if (!input.updates || Object.keys(input.updates).length === 0) {
|
|
156
|
+
return errorResult('updates object is required for update action');
|
|
157
|
+
}
|
|
158
|
+
const data = await client.patch(`/api/v2/unified-tasks/${input.taskId}`, input.updates);
|
|
159
|
+
return jsonResult(data);
|
|
160
|
+
}
|
|
161
|
+
async function completeTask(client, input) {
|
|
162
|
+
if (!input.taskId) {
|
|
163
|
+
return errorResult('taskId is required for complete action');
|
|
164
|
+
}
|
|
165
|
+
const data = await client.post(`/api/v2/unified-tasks/${input.taskId}/complete`, {});
|
|
166
|
+
return jsonResult(data);
|
|
167
|
+
}
|
|
168
|
+
async function archiveTask(client, input) {
|
|
169
|
+
if (!input.taskId) {
|
|
170
|
+
return errorResult('taskId is required for archive action');
|
|
171
|
+
}
|
|
172
|
+
const data = await client.post(`/api/v2/unified-tasks/${input.taskId}/archive`, {});
|
|
173
|
+
return jsonResult(data);
|
|
174
|
+
}
|
|
175
|
+
async function searchTasks(client, input) {
|
|
176
|
+
const params = new URLSearchParams();
|
|
177
|
+
if (input.query)
|
|
178
|
+
params.append('q', input.query);
|
|
179
|
+
if (input.includeArchived)
|
|
180
|
+
params.append('includeArchived', 'true');
|
|
181
|
+
if (input.limit)
|
|
182
|
+
params.append('limit', input.limit.toString());
|
|
183
|
+
if (input.offset)
|
|
184
|
+
params.append('offset', input.offset.toString());
|
|
185
|
+
const queryString = params.toString() ? `?${params.toString()}` : '';
|
|
186
|
+
const data = await client.get(`/api/v2/search${queryString}`);
|
|
187
|
+
return jsonResult(data);
|
|
188
|
+
}
|
|
189
|
+
export function registerTasksTool(api, client) {
|
|
190
|
+
api.registerTool({
|
|
191
|
+
id: 'myn_tasks',
|
|
192
|
+
name: 'MYN Tasks',
|
|
193
|
+
description: 'Manage tasks, habits, and chores. Actions: list, get, create, update, complete, archive, search.',
|
|
194
|
+
inputSchema: TasksInputSchema,
|
|
195
|
+
async execute(input) {
|
|
196
|
+
return executeTasks(client, input);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* myn_timers tool - Countdown, alarm, and pomodoro timers
|
|
3
|
+
*/
|
|
4
|
+
import type { MynApiClient } from '../client.js';
|
|
5
|
+
export declare const TimersInputSchema: import("@sinclair/typebox").TObject<{
|
|
6
|
+
action: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"create_countdown">, import("@sinclair/typebox").TLiteral<"create_alarm">, import("@sinclair/typebox").TLiteral<"list">, import("@sinclair/typebox").TLiteral<"cancel">, import("@sinclair/typebox").TLiteral<"snooze">, import("@sinclair/typebox").TLiteral<"pomodoro">]>;
|
|
7
|
+
duration: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
8
|
+
durationMinutes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
9
|
+
label: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
10
|
+
alarmTime: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
11
|
+
recurrence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
12
|
+
sound: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
13
|
+
timerId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
14
|
+
snoozeMinutes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
15
|
+
workDuration: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
16
|
+
breakDuration: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
17
|
+
longBreakDuration: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
18
|
+
sessions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
19
|
+
autoStart: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
|
|
20
|
+
}>;
|
|
21
|
+
export type TimersInput = typeof TimersInputSchema.static;
|
|
22
|
+
export declare function executeTimers(client: MynApiClient, input: TimersInput): Promise<{
|
|
23
|
+
success: true;
|
|
24
|
+
data: unknown;
|
|
25
|
+
} | {
|
|
26
|
+
success: false;
|
|
27
|
+
error: string;
|
|
28
|
+
details?: unknown;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function registerTimersTool(api: OpenClawPluginApi, client: MynApiClient): void;
|
|
31
|
+
interface OpenClawPluginApi {
|
|
32
|
+
registerTool(tool: {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
inputSchema: unknown;
|
|
37
|
+
execute: (input: unknown) => Promise<unknown>;
|
|
38
|
+
}): void;
|
|
39
|
+
logger: {
|
|
40
|
+
debug(message: string): void;
|
|
41
|
+
info(message: string): void;
|
|
42
|
+
warn(message: string): void;
|
|
43
|
+
error(message: string): void;
|
|
44
|
+
};
|
|
45
|
+
pluginConfig?: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=timers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timers.d.ts","sourceRoot":"","sources":["../../../src/tools/timers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EA2B5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC;AAE1D,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAwBlG;AA8ID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAUrF;AAGD,UAAU,iBAAiB;IACzB,YAAY,CAAC,IAAI,EAAE;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC/C,GAAG,IAAI,CAAC;IACT,MAAM,EAAE;QACN,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* myn_timers tool - Countdown, alarm, and pomodoro timers
|
|
3
|
+
*/
|
|
4
|
+
import { Type } from '@sinclair/typebox';
|
|
5
|
+
import { jsonResult, errorResult } from '../client.js';
|
|
6
|
+
export const TimersInputSchema = Type.Object({
|
|
7
|
+
action: Type.Union([
|
|
8
|
+
Type.Literal('create_countdown'),
|
|
9
|
+
Type.Literal('create_alarm'),
|
|
10
|
+
Type.Literal('list'),
|
|
11
|
+
Type.Literal('cancel'),
|
|
12
|
+
Type.Literal('snooze'),
|
|
13
|
+
Type.Literal('pomodoro')
|
|
14
|
+
]),
|
|
15
|
+
// create_countdown parameters
|
|
16
|
+
duration: Type.Optional(Type.Number({ description: 'Duration in seconds' })),
|
|
17
|
+
durationMinutes: Type.Optional(Type.Number({ description: 'Duration in minutes' })),
|
|
18
|
+
label: Type.Optional(Type.String({ description: 'Timer label/description' })),
|
|
19
|
+
// create_alarm parameters
|
|
20
|
+
alarmTime: Type.Optional(Type.String({ format: 'date-time', description: 'ISO 8601 datetime for alarm' })),
|
|
21
|
+
recurrence: Type.Optional(Type.String({ description: 'Recurrence pattern (e.g., "daily", "weekdays")' })),
|
|
22
|
+
sound: Type.Optional(Type.String()),
|
|
23
|
+
// cancel/snooze parameters
|
|
24
|
+
timerId: Type.Optional(Type.String({ format: 'uuid' })),
|
|
25
|
+
// snooze parameters
|
|
26
|
+
snoozeMinutes: Type.Optional(Type.Number({ default: 5 })),
|
|
27
|
+
// pomodoro parameters
|
|
28
|
+
workDuration: Type.Optional(Type.Number({ default: 25, description: 'Work duration in minutes' })),
|
|
29
|
+
breakDuration: Type.Optional(Type.Number({ default: 5, description: 'Break duration in minutes' })),
|
|
30
|
+
longBreakDuration: Type.Optional(Type.Number({ default: 15, description: 'Long break duration in minutes' })),
|
|
31
|
+
sessions: Type.Optional(Type.Number({ default: 4, description: 'Number of pomodoro sessions' })),
|
|
32
|
+
autoStart: Type.Optional(Type.Boolean({ default: false }))
|
|
33
|
+
});
|
|
34
|
+
export async function executeTimers(client, input) {
|
|
35
|
+
try {
|
|
36
|
+
switch (input.action) {
|
|
37
|
+
case 'create_countdown':
|
|
38
|
+
return await createCountdown(client, input);
|
|
39
|
+
case 'create_alarm':
|
|
40
|
+
return await createAlarm(client, input);
|
|
41
|
+
case 'list':
|
|
42
|
+
return await listTimers(client);
|
|
43
|
+
case 'cancel':
|
|
44
|
+
return await cancelTimer(client, input);
|
|
45
|
+
case 'snooze':
|
|
46
|
+
return await snoozeTimer(client, input);
|
|
47
|
+
case 'pomodoro':
|
|
48
|
+
return await createPomodoro(client, input);
|
|
49
|
+
default:
|
|
50
|
+
return errorResult(`Unknown action: ${input.action}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error instanceof Error) {
|
|
55
|
+
return errorResult(error.message);
|
|
56
|
+
}
|
|
57
|
+
return errorResult('Unknown error occurred');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function createCountdown(client, input) {
|
|
61
|
+
let durationSeconds = input.duration;
|
|
62
|
+
if (!durationSeconds && input.durationMinutes) {
|
|
63
|
+
durationSeconds = input.durationMinutes * 60;
|
|
64
|
+
}
|
|
65
|
+
if (!durationSeconds) {
|
|
66
|
+
return errorResult('duration (seconds) or durationMinutes is required for create_countdown action');
|
|
67
|
+
}
|
|
68
|
+
const body = {
|
|
69
|
+
type: 'COUNTDOWN',
|
|
70
|
+
duration: durationSeconds
|
|
71
|
+
};
|
|
72
|
+
if (input.label)
|
|
73
|
+
body.label = input.label;
|
|
74
|
+
const data = await client.post('/api/v2/timers/countdown', body);
|
|
75
|
+
return jsonResult(data);
|
|
76
|
+
}
|
|
77
|
+
async function createAlarm(client, input) {
|
|
78
|
+
if (!input.alarmTime) {
|
|
79
|
+
return errorResult('alarmTime is required for create_alarm action');
|
|
80
|
+
}
|
|
81
|
+
const body = {
|
|
82
|
+
name: input.label ?? 'Alarm',
|
|
83
|
+
alarmTime: input.alarmTime
|
|
84
|
+
};
|
|
85
|
+
if (input.recurrence)
|
|
86
|
+
body.recurrence = input.recurrence;
|
|
87
|
+
if (input.sound)
|
|
88
|
+
body.completionSound = input.sound;
|
|
89
|
+
const data = await client.post('/api/v2/timers/alarm', body);
|
|
90
|
+
return jsonResult(data);
|
|
91
|
+
}
|
|
92
|
+
async function listTimers(client) {
|
|
93
|
+
const data = await client.get('/api/v2/timers');
|
|
94
|
+
return jsonResult(data);
|
|
95
|
+
}
|
|
96
|
+
async function cancelTimer(client, input) {
|
|
97
|
+
if (!input.timerId) {
|
|
98
|
+
return errorResult('timerId is required for cancel action');
|
|
99
|
+
}
|
|
100
|
+
const data = await client.post(`/api/v2/timers/${input.timerId}/cancel`);
|
|
101
|
+
return jsonResult(data);
|
|
102
|
+
}
|
|
103
|
+
async function snoozeTimer(client, input) {
|
|
104
|
+
if (!input.timerId) {
|
|
105
|
+
return errorResult('timerId is required for snooze action');
|
|
106
|
+
}
|
|
107
|
+
const body = {
|
|
108
|
+
snoozeMinutes: input.snoozeMinutes ?? 5
|
|
109
|
+
};
|
|
110
|
+
const data = await client.post(`/api/v2/timers/${input.timerId}/snooze`, body);
|
|
111
|
+
return jsonResult(data);
|
|
112
|
+
}
|
|
113
|
+
async function createPomodoro(client, input) {
|
|
114
|
+
const body = {
|
|
115
|
+
type: 'POMODORO',
|
|
116
|
+
workDuration: (input.workDuration ?? 25) * 60, // Convert to seconds
|
|
117
|
+
breakDuration: (input.breakDuration ?? 5) * 60,
|
|
118
|
+
longBreakDuration: (input.longBreakDuration ?? 15) * 60,
|
|
119
|
+
sessions: input.sessions ?? 4,
|
|
120
|
+
autoStart: input.autoStart ?? false
|
|
121
|
+
};
|
|
122
|
+
if (input.label)
|
|
123
|
+
body.label = input.label;
|
|
124
|
+
const data = await client.post('/api/v2/timers/countdown', body);
|
|
125
|
+
return jsonResult(data);
|
|
126
|
+
}
|
|
127
|
+
export function registerTimersTool(api, client) {
|
|
128
|
+
api.registerTool({
|
|
129
|
+
id: 'myn_timers',
|
|
130
|
+
name: 'MYN Timers',
|
|
131
|
+
description: 'Manage countdowns, alarms, and pomodoro timers. Actions: create_countdown, create_alarm, list, cancel, snooze, pomodoro.',
|
|
132
|
+
inputSchema: TimersInputSchema,
|
|
133
|
+
async execute(input) {
|
|
134
|
+
return executeTimers(client, input);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=timers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/tools/timers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "myn",
|
|
3
|
+
"name": "Mind Your Now",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "AI-powered task and life management for OpenClaw agents",
|
|
6
|
+
"author": "Mind Your Now <team@mindyournow.com>",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"entry": "dist/index.js",
|
|
9
|
+
"skills": ["skills/myn"],
|
|
10
|
+
"configSchema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"apiKey": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "MYN API key with AGENT_FULL scope",
|
|
16
|
+
"x-secret": true
|
|
17
|
+
},
|
|
18
|
+
"baseUrl": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "MYN API base URL",
|
|
21
|
+
"default": "https://api.mindyournow.com"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"required": ["apiKey"]
|
|
25
|
+
},
|
|
26
|
+
"uiHints": {
|
|
27
|
+
"icon": "🎯",
|
|
28
|
+
"color": "#6366F1"
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mind-your-now/myn",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "OpenClaw plugin for Mind Your Now - AI-powered task and life management",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"openclaw": {
|
|
9
|
+
"extensions": [
|
|
10
|
+
"./dist/index.js"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"prebuild": "node scripts/sync-skills.js",
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"dev": "tsc --watch",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"lint": "eslint . --ext .ts",
|
|
27
|
+
"prepublishOnly": "npm run build"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"openclaw",
|
|
31
|
+
"plugin",
|
|
32
|
+
"mind-your-now",
|
|
33
|
+
"myn",
|
|
34
|
+
"task-management",
|
|
35
|
+
"ai",
|
|
36
|
+
"agent"
|
|
37
|
+
],
|
|
38
|
+
"author": "Mind Your Now <team@mindyournow.com>",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/mindyournow/openclaw-plugin.git"
|
|
43
|
+
},
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/mindyournow/openclaw-plugin/issues"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://github.com/mindyournow/openclaw-plugin#readme",
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^22.0.0",
|
|
50
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
51
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
52
|
+
"eslint": "^9.0.0",
|
|
53
|
+
"openclaw": "^2026.2.22",
|
|
54
|
+
"typescript": "^5.7.0",
|
|
55
|
+
"vitest": "^3.0.0"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@mind-your-now/skills": "^0.1.0",
|
|
59
|
+
"@sinclair/typebox": "^0.34.0"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"openclaw": ">=2026.2.22"
|
|
63
|
+
},
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=20.0.0"
|
|
66
|
+
},
|
|
67
|
+
"files": [
|
|
68
|
+
"dist",
|
|
69
|
+
"openclaw.plugin.json",
|
|
70
|
+
"skills",
|
|
71
|
+
"README.md",
|
|
72
|
+
"LICENSE"
|
|
73
|
+
]
|
|
74
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Mind Your Now — OpenClaw Tool Reference
|
|
2
|
+
|
|
3
|
+
This skill maps MYN API operations to OpenClaw tool names. For full MYN philosophy, priority system, and API details, see the base skill from `@mind-your-now/skills`.
|
|
4
|
+
|
|
5
|
+
## Tool Mapping
|
|
6
|
+
|
|
7
|
+
Use these OpenClaw tool names instead of raw REST calls:
|
|
8
|
+
|
|
9
|
+
| OpenClaw Tool | Actions | REST Equivalent | Reference |
|
|
10
|
+
|---------------|---------|-----------------|-----------|
|
|
11
|
+
| `myn_tasks` | list, get, create, update, complete, archive, search | `/api/v2/unified-tasks` | [references/tasks-api.md](references/tasks-api.md) |
|
|
12
|
+
| `myn_briefing` | status, generate, get, apply_correction, complete_session | `/api/v2/compass/*` | [references/briefing-api.md](references/briefing-api.md) |
|
|
13
|
+
| `myn_calendar` | list_events, create_event, delete_event, meetings | `/api/v2/calendar/*` | [references/calendar-api.md](references/calendar-api.md) |
|
|
14
|
+
| `myn_habits` | streaks, skip, chains, schedule, reminders | `/api/v1/habit-chains/*` | [references/habits-api.md](references/habits-api.md) |
|
|
15
|
+
| `myn_lists` | get, add, toggle, bulk_add, convert_to_tasks | `/api/v1/households/*/grocery-list` | [references/lists-api.md](references/lists-api.md) |
|
|
16
|
+
| `myn_timers` | create_countdown, create_alarm, list, cancel, snooze, pomodoro | `/api/v2/timers` | [references/timers-api.md](references/timers-api.md) |
|
|
17
|
+
| `myn_search` | search | `/api/v2/search` | [references/search-api.md](references/search-api.md) |
|
|
18
|
+
| `myn_memory` | remember, recall, forget, search | `/api/v1/customers/memories` | [references/memory-api.md](references/memory-api.md) |
|
|
19
|
+
| `myn_profile` | get_info, get_goals, update_goals, preferences | `/api/v1/customers/*` | [references/profile-api.md](references/profile-api.md) |
|
|
20
|
+
| `myn_household` | members, invite, chores, chore_schedule, chore_complete | `/api/v1/households/*` | [references/household-api.md](references/household-api.md) |
|
|
21
|
+
| `myn_projects` | list, get, create, move_task | `/api/project` | [references/projects-api.md](references/projects-api.md) |
|
|
22
|
+
| `myn_planning` | plan, schedule_all, reschedule | `/api/schedules/*` | [references/planning-api.md](references/planning-api.md) |
|
|
23
|
+
|
|
24
|
+
## Quick Reference
|
|
25
|
+
|
|
26
|
+
### MYN Priority System
|
|
27
|
+
|
|
28
|
+
| Priority | Max Items | Meaning |
|
|
29
|
+
|----------|-----------|---------|
|
|
30
|
+
| `CRITICAL` | 5 | Must complete today (Going Home Test) |
|
|
31
|
+
| `OPPORTUNITY_NOW` | 20 | Soon but not burning |
|
|
32
|
+
| `OVER_THE_HORIZON` | unlimited | 10+ days out, off radar |
|
|
33
|
+
| `PARKING_LOT` | unlimited | Someday, review periodically |
|
|
34
|
+
|
|
35
|
+
### Task Creation (Required Fields)
|
|
36
|
+
|
|
37
|
+
Every `myn_tasks create` call needs: `id` (UUID), `title`, `taskType`, `priority`, `startDate`.
|
|
38
|
+
|
|
39
|
+
### Morning Routine
|
|
40
|
+
|
|
41
|
+
1. `myn_briefing` action=status
|
|
42
|
+
2. `myn_briefing` action=generate
|
|
43
|
+
3. Review and apply corrections
|
|
44
|
+
4. `myn_briefing` action=complete_session
|
|
45
|
+
|
|
46
|
+
### Overload Handling
|
|
47
|
+
|
|
48
|
+
1. `myn_tasks` action=list, priority=CRITICAL — check count
|
|
49
|
+
2. If >= 5, help user move items to OPPORTUNITY_NOW
|
|
50
|
+
3. `myn_planning` action=reschedule for bulk rescheduling
|
|
51
|
+
|
|
52
|
+
## Base Skills
|
|
53
|
+
|
|
54
|
+
Detailed API documentation lives in `references/` (synced from `@mind-your-now/skills` at build time). See those files for endpoint parameters, request/response shapes, and curl examples.
|