palmier 0.1.5 → 0.1.6
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/commands/serve.js +15 -10
- package/package.json +1 -1
- package/src/commands/serve.ts +25 -17
package/dist/commands/serve.js
CHANGED
|
@@ -75,25 +75,30 @@ export async function serveCommand() {
|
|
|
75
75
|
msg.respond(sc.encode(JSON.stringify(response)));
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
+
function toKebab(str) {
|
|
79
|
+
return str.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
80
|
+
}
|
|
81
|
+
function flattenTask(task, status) {
|
|
82
|
+
return { ...task.frontmatter, body: task.body, ...(status != null ? { status } : {}) };
|
|
83
|
+
}
|
|
78
84
|
async function handleRpc(request) {
|
|
79
85
|
switch (request.method) {
|
|
80
86
|
case "task.list": {
|
|
81
87
|
const tasks = listTasks(config.projectRoot);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}));
|
|
86
|
-
return { tasks: tasksWithStatus };
|
|
88
|
+
return {
|
|
89
|
+
tasks: tasks.map((task) => flattenTask(task, getTaskStatus(task.frontmatter.id))),
|
|
90
|
+
};
|
|
87
91
|
}
|
|
88
92
|
case "task.create": {
|
|
89
93
|
const params = request.params;
|
|
90
|
-
const
|
|
94
|
+
const id = toKebab(params.name);
|
|
95
|
+
const taskDir = getTaskDir(config.projectRoot, id);
|
|
91
96
|
const task = {
|
|
92
97
|
frontmatter: {
|
|
93
|
-
id
|
|
98
|
+
id,
|
|
94
99
|
name: params.name,
|
|
95
100
|
user_prompt: params.user_prompt,
|
|
96
|
-
triggers: params.triggers
|
|
101
|
+
triggers: params.triggers ?? [],
|
|
97
102
|
requires_confirmation: params.requires_confirmation ?? true,
|
|
98
103
|
suppress_permissions: params.suppress_permissions ?? false,
|
|
99
104
|
enabled: params.enabled ?? true,
|
|
@@ -102,7 +107,7 @@ export async function serveCommand() {
|
|
|
102
107
|
};
|
|
103
108
|
writeTaskFile(taskDir, task);
|
|
104
109
|
installTaskTimer(config, task);
|
|
105
|
-
return
|
|
110
|
+
return flattenTask(task);
|
|
106
111
|
}
|
|
107
112
|
case "task.update": {
|
|
108
113
|
const params = request.params;
|
|
@@ -127,7 +132,7 @@ export async function serveCommand() {
|
|
|
127
132
|
// Reinstall timer with updated config
|
|
128
133
|
removeTaskTimer(params.id);
|
|
129
134
|
installTaskTimer(config, existing);
|
|
130
|
-
return
|
|
135
|
+
return flattenTask(existing, getTaskStatus(params.id));
|
|
131
136
|
}
|
|
132
137
|
case "task.delete": {
|
|
133
138
|
const params = request.params;
|
package/package.json
CHANGED
package/src/commands/serve.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { loadConfig } from "../config.js";
|
|
|
5
5
|
import { connectNats } from "../nats-client.js";
|
|
6
6
|
import { listTasks, parseTaskFile, writeTaskFile, getTaskDir } from "../task.js";
|
|
7
7
|
import { installTaskTimer, removeTaskTimer, getTaskStatus } from "../systemd.js";
|
|
8
|
-
import type {
|
|
8
|
+
import type { ParsedTask, RpcMessage } from "../types.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Start the persistent NATS RPC handler.
|
|
@@ -86,36 +86,44 @@ export async function serveCommand(): Promise<void> {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
function toKebab(str: string): string {
|
|
90
|
+
return str.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function flattenTask(task: ParsedTask, status?: unknown) {
|
|
94
|
+
return { ...task.frontmatter, body: task.body, ...(status != null ? { status } : {}) };
|
|
95
|
+
}
|
|
96
|
+
|
|
89
97
|
async function handleRpc(request: RpcMessage): Promise<unknown> {
|
|
90
98
|
switch (request.method) {
|
|
91
99
|
case "task.list": {
|
|
92
100
|
const tasks = listTasks(config.projectRoot);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
101
|
+
return {
|
|
102
|
+
tasks: tasks.map((task) =>
|
|
103
|
+
flattenTask(task, getTaskStatus(task.frontmatter.id))
|
|
104
|
+
),
|
|
105
|
+
};
|
|
98
106
|
}
|
|
99
107
|
|
|
100
108
|
case "task.create": {
|
|
101
109
|
const params = request.params as {
|
|
102
|
-
id: string;
|
|
103
110
|
name: string;
|
|
104
111
|
user_prompt: string;
|
|
105
|
-
triggers
|
|
106
|
-
requires_confirmation
|
|
107
|
-
suppress_permissions
|
|
108
|
-
enabled
|
|
109
|
-
body
|
|
112
|
+
triggers?: Array<{ type: "cron" | "once"; value: string }>;
|
|
113
|
+
requires_confirmation?: boolean;
|
|
114
|
+
suppress_permissions?: boolean;
|
|
115
|
+
enabled?: boolean;
|
|
116
|
+
body?: string;
|
|
110
117
|
};
|
|
111
118
|
|
|
112
|
-
const
|
|
119
|
+
const id = toKebab(params.name);
|
|
120
|
+
const taskDir = getTaskDir(config.projectRoot, id);
|
|
113
121
|
const task = {
|
|
114
122
|
frontmatter: {
|
|
115
|
-
id
|
|
123
|
+
id,
|
|
116
124
|
name: params.name,
|
|
117
125
|
user_prompt: params.user_prompt,
|
|
118
|
-
triggers: params.triggers
|
|
126
|
+
triggers: params.triggers ?? [],
|
|
119
127
|
requires_confirmation: params.requires_confirmation ?? true,
|
|
120
128
|
suppress_permissions: params.suppress_permissions ?? false,
|
|
121
129
|
enabled: params.enabled ?? true,
|
|
@@ -126,7 +134,7 @@ export async function serveCommand(): Promise<void> {
|
|
|
126
134
|
writeTaskFile(taskDir, task);
|
|
127
135
|
installTaskTimer(config, task);
|
|
128
136
|
|
|
129
|
-
return
|
|
137
|
+
return flattenTask(task);
|
|
130
138
|
}
|
|
131
139
|
|
|
132
140
|
case "task.update": {
|
|
@@ -161,7 +169,7 @@ export async function serveCommand(): Promise<void> {
|
|
|
161
169
|
removeTaskTimer(params.id);
|
|
162
170
|
installTaskTimer(config, existing);
|
|
163
171
|
|
|
164
|
-
return
|
|
172
|
+
return flattenTask(existing, getTaskStatus(params.id));
|
|
165
173
|
}
|
|
166
174
|
|
|
167
175
|
case "task.delete": {
|