@martin0309205/prism 0.1.7 → 0.2.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/assets/claude-md/CLAUDE.md +7 -3
- package/dist/jobs.d.ts +43 -0
- package/dist/jobs.js +117 -0
- package/dist/jobs.js.map +1 -0
- package/dist/surfaces/slack.d.ts +9 -0
- package/dist/surfaces/slack.js +235 -34
- package/dist/surfaces/slack.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,10 +10,14 @@ Produce the deliverable they asked for, drop it at the root of `cwd`, then reply
|
|
|
10
10
|
|
|
11
11
|
| Surface | What they see |
|
|
12
12
|
|---|---|
|
|
13
|
-
| **Slack** | Files at cwd root are uploaded to the thread. Your stdout becomes the comment next to the file (Prism converts Markdown to Slack mrkdwn). |
|
|
13
|
+
| **Slack** | Files at cwd root are uploaded to the thread. Your stdout becomes the comment next to the file (Prism converts Markdown to Slack mrkdwn). The user can react with ✅ (validate, archives the deliverable), 🔄 (iterate — Prism re-spawns you with the user's thread feedback + the previous deliverable copied to `_work/_previous/` as a reference), or 🗑️ (trash). |
|
|
14
14
|
| **HTTP** | JSON response: file URLs + your stdout as `text`. |
|
|
15
15
|
| **CLI** | Files copied to their `--out` directory. Stdout streamed to terminal. |
|
|
16
16
|
|
|
17
|
+
## When you're spawned for an iteration
|
|
18
|
+
|
|
19
|
+
If your brief starts with `[ITÉRATION du livrable précédent]`, you're being re-run because the user wasn't fully happy. The brief includes the original brief, the user's feedback, and a reference to `_work/_previous/` containing the prior deliverable(s). **Reuse that reference**: for image regenerations via `astry-image-higgsfield`, pass the previous PNG as `--image <id>` to Higgsfield (after `higgsfield upload`), so the new generation stays close to the prior one but applies the feedback. Don't start from scratch — that's what loses the user's work.
|
|
20
|
+
|
|
17
21
|
## Output conventions (CRITICAL)
|
|
18
22
|
|
|
19
23
|
- **Final deliverables** at the root of `cwd`: the `.pdf`, the `.png`, the `.docx`, etc. Naming convention: `Astry_<Topic>_<Variant>.<ext>` in PascalCase.
|
|
@@ -40,9 +44,9 @@ Only ask back when the brief is genuinely ambiguous about the output **type** (e
|
|
|
40
44
|
- `astry-design-system` — Astry brand contract + queryable token registry at `brand.astry.agency/r`. The single source of truth — colours, logos, fonts, team names, voice. **Never hardcode brand values in your output**; fetch them at render time.
|
|
41
45
|
- `astry-pdf` — generate a brand-aligned multi-page PDF (Chrome headless).
|
|
42
46
|
- `astry-linkedin-image` — generate a 1200×1200 brand-aligned LinkedIn image (HTML deterministic, on-brand strict). **Default for announcements, recruitment, milestones, launches, quote cards, stat cards** — anything text-driven.
|
|
43
|
-
- `astry-image-higgsfield` — generate a real AI image via the Higgsfield
|
|
47
|
+
- `astry-image-higgsfield` — generate a real AI image via the Higgsfield CLI (model imposed: `gpt_image_2`). Fetches the lockup logo and an optional mood-matched mascot from the registry, uploads them as reference images, then runs `higgsfield generate create gpt_image_2 --image <id> ... --wait`. **Opt-in only when the brief explicitly says "higgsfield", "vraie image", "image AI", "moodboard", "scène", "hero image", or similar narrative/editorial intent.** Don't activate for text-driven posts; the HTML skill is on-brand-stricter and free.
|
|
44
48
|
|
|
45
|
-
For LinkedIn announcements, the default is **image + text combo** via `astry-linkedin-image` — produce the visual, then the post copy in stdout. Switch to `astry-image-higgsfield` only when the brief asks for a generated visual
|
|
49
|
+
For LinkedIn announcements, the default is **image + text combo** via `astry-linkedin-image` — produce the visual, then the post copy in stdout. Switch to `astry-image-higgsfield` **only** when the brief explicitly asks for a generated visual.
|
|
46
50
|
|
|
47
51
|
## Style for stdout (the reply)
|
|
48
52
|
|
package/dist/jobs.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface SlackJobAnchors {
|
|
2
|
+
channel: string;
|
|
3
|
+
thread_ts: string;
|
|
4
|
+
user_msg_ts: string;
|
|
5
|
+
bot_msg_ts?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface JobFeedback {
|
|
8
|
+
likes: number;
|
|
9
|
+
dislikes: number;
|
|
10
|
+
validated_at?: string;
|
|
11
|
+
trashed_at?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface JobMeta {
|
|
14
|
+
job_id: string;
|
|
15
|
+
surface: 'slack' | 'http' | 'cli';
|
|
16
|
+
brief: string;
|
|
17
|
+
workdir: string;
|
|
18
|
+
files: string[];
|
|
19
|
+
created_at: string;
|
|
20
|
+
duration_ms?: number;
|
|
21
|
+
exit_code?: number;
|
|
22
|
+
timed_out?: boolean;
|
|
23
|
+
text?: string;
|
|
24
|
+
slack?: SlackJobAnchors;
|
|
25
|
+
feedback?: JobFeedback;
|
|
26
|
+
parent_job_id?: string;
|
|
27
|
+
iteration_index?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function jobsRoot(instance: string): string;
|
|
30
|
+
export declare function jobDir(instance: string, jobId: string): string;
|
|
31
|
+
export declare function archiveRoot(instance: string): string;
|
|
32
|
+
export declare function readJob(instance: string, jobId: string): JobMeta | null;
|
|
33
|
+
export declare function writeJob(instance: string, job: JobMeta): void;
|
|
34
|
+
/** Copies the deliverable files into the job's archive dir; returns archived paths. */
|
|
35
|
+
export declare function persistJobFiles(instance: string, jobId: string, files: string[]): string[];
|
|
36
|
+
/** Linear scan; fine for thousands of jobs. Add an index file if it ever gets slow. */
|
|
37
|
+
export declare function findJobByBotMessage(instance: string, channel: string, bot_msg_ts: string): JobMeta | null;
|
|
38
|
+
export declare function listJobs(instance: string, opts?: {
|
|
39
|
+
limit?: number;
|
|
40
|
+
surface?: JobMeta['surface'];
|
|
41
|
+
}): JobMeta[];
|
|
42
|
+
export declare function moveJobToArchive(instance: string, jobId: string, bucket: 'validated' | 'trash'): string;
|
|
43
|
+
export declare function recordFeedback(instance: string, jobId: string, kind: 'like' | 'dislike' | 'validate' | 'trash'): JobMeta | null;
|
package/dist/jobs.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import { basename, join } from 'node:path';
|
|
3
|
+
import { instanceRoot } from './config.js';
|
|
4
|
+
export function jobsRoot(instance) {
|
|
5
|
+
return join(instanceRoot(instance), 'jobs');
|
|
6
|
+
}
|
|
7
|
+
export function jobDir(instance, jobId) {
|
|
8
|
+
return join(jobsRoot(instance), jobId);
|
|
9
|
+
}
|
|
10
|
+
export function archiveRoot(instance) {
|
|
11
|
+
return join(instanceRoot(instance), 'archive');
|
|
12
|
+
}
|
|
13
|
+
export function readJob(instance, jobId) {
|
|
14
|
+
const path = join(jobDir(instance, jobId), 'meta.json');
|
|
15
|
+
if (!existsSync(path))
|
|
16
|
+
return null;
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function writeJob(instance, job) {
|
|
25
|
+
const dir = jobDir(instance, job.job_id);
|
|
26
|
+
mkdirSync(dir, { recursive: true });
|
|
27
|
+
writeFileSync(join(dir, 'meta.json'), JSON.stringify(job, null, 2));
|
|
28
|
+
}
|
|
29
|
+
/** Copies the deliverable files into the job's archive dir; returns archived paths. */
|
|
30
|
+
export function persistJobFiles(instance, jobId, files) {
|
|
31
|
+
const dir = join(jobDir(instance, jobId), 'files');
|
|
32
|
+
mkdirSync(dir, { recursive: true });
|
|
33
|
+
const archived = [];
|
|
34
|
+
for (const src of files) {
|
|
35
|
+
if (!existsSync(src))
|
|
36
|
+
continue;
|
|
37
|
+
const dst = join(dir, basename(src));
|
|
38
|
+
try {
|
|
39
|
+
copyFileSync(src, dst);
|
|
40
|
+
archived.push(dst);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// ignore individual copy errors
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return archived;
|
|
47
|
+
}
|
|
48
|
+
/** Linear scan; fine for thousands of jobs. Add an index file if it ever gets slow. */
|
|
49
|
+
export function findJobByBotMessage(instance, channel, bot_msg_ts) {
|
|
50
|
+
const root = jobsRoot(instance);
|
|
51
|
+
if (!existsSync(root))
|
|
52
|
+
return null;
|
|
53
|
+
for (const id of readdirSync(root)) {
|
|
54
|
+
const j = readJob(instance, id);
|
|
55
|
+
if (!j?.slack)
|
|
56
|
+
continue;
|
|
57
|
+
if (j.slack.channel === channel && j.slack.bot_msg_ts === bot_msg_ts)
|
|
58
|
+
return j;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
export function listJobs(instance, opts = {}) {
|
|
63
|
+
const root = jobsRoot(instance);
|
|
64
|
+
if (!existsSync(root))
|
|
65
|
+
return [];
|
|
66
|
+
const out = [];
|
|
67
|
+
for (const id of readdirSync(root)) {
|
|
68
|
+
const j = readJob(instance, id);
|
|
69
|
+
if (!j)
|
|
70
|
+
continue;
|
|
71
|
+
if (opts.surface && j.surface !== opts.surface)
|
|
72
|
+
continue;
|
|
73
|
+
out.push(j);
|
|
74
|
+
}
|
|
75
|
+
out.sort((a, b) => b.created_at.localeCompare(a.created_at));
|
|
76
|
+
return opts.limit ? out.slice(0, opts.limit) : out;
|
|
77
|
+
}
|
|
78
|
+
export function moveJobToArchive(instance, jobId, bucket) {
|
|
79
|
+
const job = readJob(instance, jobId);
|
|
80
|
+
if (!job)
|
|
81
|
+
throw new Error(`job ${jobId} not found`);
|
|
82
|
+
const dst = join(archiveRoot(instance), bucket, jobId);
|
|
83
|
+
mkdirSync(dst, { recursive: true });
|
|
84
|
+
// Copy the meta + files (don't delete the original — keep history queryable)
|
|
85
|
+
writeFileSync(join(dst, 'meta.json'), JSON.stringify(job, null, 2));
|
|
86
|
+
if (job.files.length > 0) {
|
|
87
|
+
const filesDir = join(dst, 'files');
|
|
88
|
+
mkdirSync(filesDir, { recursive: true });
|
|
89
|
+
for (const f of job.files) {
|
|
90
|
+
if (!existsSync(f))
|
|
91
|
+
continue;
|
|
92
|
+
try {
|
|
93
|
+
copyFileSync(f, join(filesDir, basename(f)));
|
|
94
|
+
}
|
|
95
|
+
catch { /* skip */ }
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return dst;
|
|
99
|
+
}
|
|
100
|
+
export function recordFeedback(instance, jobId, kind) {
|
|
101
|
+
const job = readJob(instance, jobId);
|
|
102
|
+
if (!job)
|
|
103
|
+
return null;
|
|
104
|
+
const fb = job.feedback ?? { likes: 0, dislikes: 0 };
|
|
105
|
+
if (kind === 'like')
|
|
106
|
+
fb.likes += 1;
|
|
107
|
+
else if (kind === 'dislike')
|
|
108
|
+
fb.dislikes += 1;
|
|
109
|
+
else if (kind === 'validate')
|
|
110
|
+
fb.validated_at = new Date().toISOString();
|
|
111
|
+
else if (kind === 'trash')
|
|
112
|
+
fb.trashed_at = new Date().toISOString();
|
|
113
|
+
job.feedback = fb;
|
|
114
|
+
writeJob(instance, job);
|
|
115
|
+
return job;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=jobs.js.map
|
package/dist/jobs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/surfaces/slack.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import bolt from '@slack/bolt';
|
|
2
2
|
import type { PrismConfig } from '../config.js';
|
|
3
3
|
import type { Logger } from '../logger.js';
|
|
4
|
+
import { readJob } from '../jobs.js';
|
|
5
|
+
export declare const ACTION_EMOJI: {
|
|
6
|
+
readonly validate: "white_check_mark";
|
|
7
|
+
readonly iterate: "arrows_counterclockwise";
|
|
8
|
+
readonly trash: "wastebasket";
|
|
9
|
+
readonly like: "+1";
|
|
10
|
+
readonly dislike: "-1";
|
|
11
|
+
};
|
|
4
12
|
export interface SlackServerOptions {
|
|
5
13
|
config: PrismConfig;
|
|
6
14
|
env: Record<string, string>;
|
|
@@ -8,3 +16,4 @@ export interface SlackServerOptions {
|
|
|
8
16
|
}
|
|
9
17
|
export declare function startSlackServer(opts: SlackServerOptions): Promise<bolt.App>;
|
|
10
18
|
export declare function toSlackMrkdwn(md: string): string;
|
|
19
|
+
export { readJob };
|
package/dist/surfaces/slack.js
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import bolt from '@slack/bolt';
|
|
2
|
-
import { readFileSync, statSync } from 'node:fs';
|
|
3
|
-
import {
|
|
2
|
+
import { copyFileSync, mkdirSync, mkdtempSync, readFileSync, statSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { basename, join } from 'node:path';
|
|
5
|
+
import { ulid } from 'ulid';
|
|
4
6
|
import { generate } from '../runner.js';
|
|
7
|
+
import { findJobByBotMessage, moveJobToArchive, persistJobFiles, readJob, recordFeedback, writeJob, } from '../jobs.js';
|
|
5
8
|
const { App } = bolt;
|
|
9
|
+
export const ACTION_EMOJI = {
|
|
10
|
+
validate: 'white_check_mark',
|
|
11
|
+
iterate: 'arrows_counterclockwise',
|
|
12
|
+
trash: 'wastebasket',
|
|
13
|
+
like: '+1',
|
|
14
|
+
dislike: '-1',
|
|
15
|
+
};
|
|
16
|
+
const ACTION_EMOJI_VALUES = Object.values(ACTION_EMOJI);
|
|
6
17
|
export async function startSlackServer(opts) {
|
|
7
18
|
const { config, env, logger } = opts;
|
|
8
19
|
const botToken = env.SLACK_BOT_TOKEN ?? process.env.SLACK_BOT_TOKEN;
|
|
@@ -37,12 +48,16 @@ export async function startSlackServer(opts) {
|
|
|
37
48
|
}
|
|
38
49
|
const brief = stripMention(event.text ?? '', botUserId).trim();
|
|
39
50
|
if (!brief) {
|
|
40
|
-
await say({
|
|
51
|
+
await say({
|
|
52
|
+
thread_ts: threadTs,
|
|
53
|
+
text: 'Donne-moi un brief — ex: `@prism fais un PDF récap du meeting Endemol`',
|
|
54
|
+
});
|
|
41
55
|
return;
|
|
42
56
|
}
|
|
43
57
|
const work = (async () => {
|
|
44
|
-
|
|
45
|
-
|
|
58
|
+
const job_id = `j_${ulid()}`;
|
|
59
|
+
logger.info('slack.mention.start', { jobId: job_id, channel, ts, user, briefLen: brief.length });
|
|
60
|
+
await client.reactions.add({ channel, timestamp: ts, name: 'hourglass_flowing_sand' }).catch(() => undefined);
|
|
46
61
|
try {
|
|
47
62
|
const result = await generate({
|
|
48
63
|
brief,
|
|
@@ -50,27 +65,47 @@ export async function startSlackServer(opts) {
|
|
|
50
65
|
claude_bin: config.claude.bin,
|
|
51
66
|
env,
|
|
52
67
|
});
|
|
68
|
+
// Archive deliverables under jobs/<id>/files/
|
|
69
|
+
const archived = persistJobFiles(config.instance, job_id, result.files);
|
|
53
70
|
const slackText = result.text ? toSlackMrkdwn(result.text) : '';
|
|
54
|
-
|
|
55
|
-
|
|
71
|
+
// Post: files first (so they render at top), then the comment that users react on.
|
|
72
|
+
if (result.files.length > 0) {
|
|
73
|
+
await uploadFilesToThread({ client, channel, threadTs, files: result.files, logger });
|
|
56
74
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
75
|
+
const reply = await client.chat.postMessage({
|
|
76
|
+
channel,
|
|
77
|
+
thread_ts: threadTs,
|
|
78
|
+
text: slackText || (result.files.length > 0 ? '_(livré)_' : '_(rien à livrer)_'),
|
|
79
|
+
});
|
|
80
|
+
const bot_msg_ts = reply.ts ?? undefined;
|
|
81
|
+
// Persist the job
|
|
82
|
+
const job = {
|
|
83
|
+
job_id,
|
|
84
|
+
surface: 'slack',
|
|
85
|
+
brief,
|
|
86
|
+
workdir: result.workdir,
|
|
87
|
+
files: archived,
|
|
88
|
+
created_at: new Date().toISOString(),
|
|
89
|
+
duration_ms: result.duration_ms,
|
|
90
|
+
exit_code: result.exit_code,
|
|
91
|
+
timed_out: result.timed_out,
|
|
92
|
+
text: result.text,
|
|
93
|
+
slack: { channel, thread_ts: threadTs, user_msg_ts: ts, bot_msg_ts },
|
|
94
|
+
feedback: { likes: 0, dislikes: 0 },
|
|
95
|
+
iteration_index: 0,
|
|
96
|
+
};
|
|
97
|
+
writeJob(config.instance, job);
|
|
98
|
+
// Pre-apply the action "buttons" so the user can just click the same emoji
|
|
99
|
+
if (bot_msg_ts) {
|
|
100
|
+
for (const name of [ACTION_EMOJI.validate, ACTION_EMOJI.iterate, ACTION_EMOJI.trash]) {
|
|
101
|
+
await client.reactions.add({ channel, timestamp: bot_msg_ts, name }).catch(() => undefined);
|
|
102
|
+
}
|
|
66
103
|
}
|
|
67
|
-
await reaction;
|
|
68
104
|
await client.reactions.remove({ channel, timestamp: ts, name: 'hourglass_flowing_sand' }).catch(() => undefined);
|
|
69
105
|
await client.reactions.add({ channel, timestamp: ts, name: 'white_check_mark' }).catch(() => undefined);
|
|
70
106
|
logger.info('slack.mention.done', {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
files: result.files.length,
|
|
107
|
+
jobId: job_id,
|
|
108
|
+
files: archived.length,
|
|
74
109
|
durationMs: result.duration_ms,
|
|
75
110
|
exitCode: result.exit_code,
|
|
76
111
|
timedOut: result.timed_out,
|
|
@@ -89,6 +124,51 @@ export async function startSlackServer(opts) {
|
|
|
89
124
|
inflight.set(dedupKey, work);
|
|
90
125
|
await work;
|
|
91
126
|
});
|
|
127
|
+
// Reaction-based "action buttons" on bot replies
|
|
128
|
+
app.event('reaction_added', async ({ event, client }) => {
|
|
129
|
+
if (event.user === botUserId)
|
|
130
|
+
return; // don't react to our own pre-applied reactions
|
|
131
|
+
if (event.item.type !== 'message')
|
|
132
|
+
return;
|
|
133
|
+
if (!ACTION_EMOJI_VALUES.includes(event.reaction))
|
|
134
|
+
return;
|
|
135
|
+
const channel = event.item.channel;
|
|
136
|
+
const ts = event.item.ts;
|
|
137
|
+
if (!channel || !ts)
|
|
138
|
+
return;
|
|
139
|
+
const job = findJobByBotMessage(config.instance, channel, ts);
|
|
140
|
+
if (!job) {
|
|
141
|
+
logger.debug('slack.reaction.no_job', { channel, ts, reaction: event.reaction, user: event.user });
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
logger.info('slack.reaction', { jobId: job.job_id, reaction: event.reaction, user: event.user });
|
|
145
|
+
try {
|
|
146
|
+
switch (event.reaction) {
|
|
147
|
+
case ACTION_EMOJI.validate:
|
|
148
|
+
await handleValidate(job, client, config, logger);
|
|
149
|
+
break;
|
|
150
|
+
case ACTION_EMOJI.trash:
|
|
151
|
+
await handleTrash(job, client, config, logger);
|
|
152
|
+
break;
|
|
153
|
+
case ACTION_EMOJI.iterate:
|
|
154
|
+
await handleIterate(job, client, config, env, logger, botUserId);
|
|
155
|
+
break;
|
|
156
|
+
case ACTION_EMOJI.like:
|
|
157
|
+
recordFeedback(config.instance, job.job_id, 'like');
|
|
158
|
+
break;
|
|
159
|
+
case ACTION_EMOJI.dislike:
|
|
160
|
+
recordFeedback(config.instance, job.job_id, 'dislike');
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
logger.error('slack.reaction.error', {
|
|
166
|
+
jobId: job.job_id,
|
|
167
|
+
reaction: event.reaction,
|
|
168
|
+
err: err.message,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
92
172
|
await app.start();
|
|
93
173
|
logger.info('slack.listening');
|
|
94
174
|
return app;
|
|
@@ -99,31 +179,19 @@ function stripMention(text, botUserId) {
|
|
|
99
179
|
return text.replace(new RegExp(`<@${botUserId}>`, 'g'), '').trim();
|
|
100
180
|
}
|
|
101
181
|
// Convert standard Markdown (what Claude emits) to Slack mrkdwn.
|
|
102
|
-
// Slack's mrkdwn ≠ CommonMark: *bold* (single star), no headers, • for bullets,
|
|
103
|
-
// <url|label> for links, ~strike~ uses single ~, no nested formatting.
|
|
104
182
|
export function toSlackMrkdwn(md) {
|
|
105
183
|
let out = md;
|
|
106
|
-
// Strip code fences but keep their contents — preserves mrkdwn block style
|
|
107
|
-
// by replacing ```lang\n...\n``` with ```...``` (Slack supports the latter).
|
|
108
184
|
out = out.replace(/```[a-zA-Z0-9_-]*\n([\s\S]*?)```/g, '```$1```');
|
|
109
|
-
// Headers → bold standalone line
|
|
110
185
|
out = out.replace(/^[ \t]{0,3}#{1,6}[ \t]+(.+?)[ \t]*#*[ \t]*$/gm, '*$1*');
|
|
111
|
-
// Bold: **text** or __text__ → *text*
|
|
112
186
|
out = out.replace(/\*\*([^\n*]+)\*\*/g, '*$1*');
|
|
113
187
|
out = out.replace(/__([^\n_]+)__/g, '*$1*');
|
|
114
|
-
// Links: [label](url) → <url|label>
|
|
115
188
|
out = out.replace(/\[([^\]\n]+)\]\(([^)\s]+)\)/g, '<$2|$1>');
|
|
116
|
-
// Bullet list markers ( -, *, + at start of line, after optional indent )
|
|
117
|
-
// → bullet character. Keep indent for nested feel.
|
|
118
189
|
out = out.replace(/^([ \t]*)[-*+][ \t]+/gm, '$1• ');
|
|
119
|
-
// Numbered lists are fine as-is in Slack.
|
|
120
|
-
// Horizontal rules (---, ***, ___) → blank line
|
|
121
190
|
out = out.replace(/^[ \t]*(?:-[ \t]*-[ \t]*-+|\*[ \t]*\*[ \t]*\*+|_[ \t]*_[ \t]*_+)[ \t]*$/gm, '');
|
|
122
|
-
// Collapse 3+ consecutive blank lines to 2 (Slack already collapses, just tidy).
|
|
123
191
|
out = out.replace(/\n{3,}/g, '\n\n');
|
|
124
192
|
return out.trim();
|
|
125
193
|
}
|
|
126
|
-
async function uploadFilesToThread({ client, channel, threadTs, files,
|
|
194
|
+
async function uploadFilesToThread({ client, channel, threadTs, files, logger }) {
|
|
127
195
|
const file_uploads = files.map((path) => ({
|
|
128
196
|
file: readFileSync(path),
|
|
129
197
|
filename: basename(path),
|
|
@@ -141,8 +209,141 @@ async function uploadFilesToThread({ client, channel, threadTs, files, comment,
|
|
|
141
209
|
await client.filesUploadV2({
|
|
142
210
|
channel_id: channel,
|
|
143
211
|
thread_ts: threadTs,
|
|
144
|
-
initial_comment: comment || undefined,
|
|
145
212
|
file_uploads,
|
|
146
213
|
});
|
|
147
214
|
}
|
|
215
|
+
// ------- action handlers -------
|
|
216
|
+
async function handleValidate(job, client, config, logger) {
|
|
217
|
+
if (!job.slack?.bot_msg_ts)
|
|
218
|
+
return;
|
|
219
|
+
recordFeedback(config.instance, job.job_id, 'validate');
|
|
220
|
+
const dst = moveJobToArchive(config.instance, job.job_id, 'validated');
|
|
221
|
+
logger.info('slack.action.validated', { jobId: job.job_id, dst });
|
|
222
|
+
await client.reactions.add({
|
|
223
|
+
channel: job.slack.channel,
|
|
224
|
+
timestamp: job.slack.bot_msg_ts,
|
|
225
|
+
name: 'floppy_disk',
|
|
226
|
+
}).catch(() => undefined);
|
|
227
|
+
}
|
|
228
|
+
async function handleTrash(job, client, config, logger) {
|
|
229
|
+
if (!job.slack?.bot_msg_ts)
|
|
230
|
+
return;
|
|
231
|
+
recordFeedback(config.instance, job.job_id, 'trash');
|
|
232
|
+
const dst = moveJobToArchive(config.instance, job.job_id, 'trash');
|
|
233
|
+
logger.info('slack.action.trashed', { jobId: job.job_id, dst });
|
|
234
|
+
// No extra emoji — the wastebasket reaction itself is the visual confirmation.
|
|
235
|
+
}
|
|
236
|
+
async function handleIterate(job, client, config, env, logger, botUserId) {
|
|
237
|
+
if (!job.slack)
|
|
238
|
+
return;
|
|
239
|
+
const { channel, thread_ts, bot_msg_ts } = job.slack;
|
|
240
|
+
// Fetch thread replies; pull anything posted after this job by a non-bot user.
|
|
241
|
+
const replies = await client.conversations.replies({ channel, ts: thread_ts, limit: 200 });
|
|
242
|
+
const cutoff = new Date(job.created_at).getTime() / 1000;
|
|
243
|
+
const userFeedback = (replies.messages ?? [])
|
|
244
|
+
.filter((m) => m.user && m.user !== botUserId && parseFloat(m.ts ?? '0') > cutoff)
|
|
245
|
+
.map((m) => (m.text ?? '').trim())
|
|
246
|
+
.filter(Boolean)
|
|
247
|
+
.join('\n\n');
|
|
248
|
+
if (!userFeedback) {
|
|
249
|
+
await client.chat.postMessage({
|
|
250
|
+
channel,
|
|
251
|
+
thread_ts,
|
|
252
|
+
text: '🔄 Précise dans ce thread ce que tu veux changer (couleur, mood, format, texte…), puis re-clique sur 🔄.',
|
|
253
|
+
}).catch(() => undefined);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
// Indicate iteration in progress
|
|
257
|
+
await client.reactions.add({
|
|
258
|
+
channel,
|
|
259
|
+
timestamp: bot_msg_ts,
|
|
260
|
+
name: 'hourglass_flowing_sand',
|
|
261
|
+
}).catch(() => undefined);
|
|
262
|
+
const new_job_id = `j_${ulid()}`;
|
|
263
|
+
const newWorkdir = mkdtempSync(join(tmpdir(), 'prism-'));
|
|
264
|
+
// Copy previous deliverables into _work/_previous so Claude can pick them up
|
|
265
|
+
// as reference images (e.g. for higgsfield re-render). _work/ is ignored by
|
|
266
|
+
// the runner, so they don't get re-shipped.
|
|
267
|
+
const prevDir = join(newWorkdir, '_work', '_previous');
|
|
268
|
+
mkdirSync(prevDir, { recursive: true });
|
|
269
|
+
for (const f of job.files) {
|
|
270
|
+
try {
|
|
271
|
+
copyFileSync(f, join(prevDir, basename(f)));
|
|
272
|
+
}
|
|
273
|
+
catch { /* skip */ }
|
|
274
|
+
}
|
|
275
|
+
const newBrief = [
|
|
276
|
+
'[ITÉRATION du livrable précédent]',
|
|
277
|
+
'',
|
|
278
|
+
`Brief original : ${job.brief}`,
|
|
279
|
+
'',
|
|
280
|
+
'Feedback à appliquer :',
|
|
281
|
+
userFeedback,
|
|
282
|
+
'',
|
|
283
|
+
`Le livrable précédent est dans \`_work/_previous/\` (${job.files.map((f) => basename(f)).join(', ')}).`,
|
|
284
|
+
'Quand tu re-render via une skill (astry-image-higgsfield, astry-pdf, astry-linkedin-image), passe-le comme reference image / contexte si pertinent.',
|
|
285
|
+
].join('\n');
|
|
286
|
+
let newResult;
|
|
287
|
+
try {
|
|
288
|
+
newResult = await generate({
|
|
289
|
+
brief: newBrief,
|
|
290
|
+
workdir: newWorkdir,
|
|
291
|
+
timeout_ms: config.claude.timeout_ms,
|
|
292
|
+
claude_bin: config.claude.bin,
|
|
293
|
+
env,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
await client.chat.postMessage({
|
|
298
|
+
channel,
|
|
299
|
+
thread_ts,
|
|
300
|
+
text: `❌ itération échouée: ${err.message}`,
|
|
301
|
+
}).catch(() => undefined);
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
await client.reactions.remove({ channel, timestamp: bot_msg_ts, name: 'hourglass_flowing_sand' }).catch(() => undefined);
|
|
306
|
+
}
|
|
307
|
+
const archived = persistJobFiles(config.instance, new_job_id, newResult.files);
|
|
308
|
+
const slackText = newResult.text ? toSlackMrkdwn(newResult.text) : '';
|
|
309
|
+
if (newResult.files.length > 0) {
|
|
310
|
+
await uploadFilesToThread({ client, channel, threadTs: thread_ts, files: newResult.files, logger });
|
|
311
|
+
}
|
|
312
|
+
const reply = await client.chat.postMessage({
|
|
313
|
+
channel,
|
|
314
|
+
thread_ts,
|
|
315
|
+
text: slackText || '_(itération sans texte)_',
|
|
316
|
+
});
|
|
317
|
+
const newBotMsgTs = reply.ts ?? undefined;
|
|
318
|
+
const newJob = {
|
|
319
|
+
job_id: new_job_id,
|
|
320
|
+
surface: 'slack',
|
|
321
|
+
brief: newBrief,
|
|
322
|
+
workdir: newResult.workdir,
|
|
323
|
+
files: archived,
|
|
324
|
+
created_at: new Date().toISOString(),
|
|
325
|
+
duration_ms: newResult.duration_ms,
|
|
326
|
+
exit_code: newResult.exit_code,
|
|
327
|
+
timed_out: newResult.timed_out,
|
|
328
|
+
text: newResult.text,
|
|
329
|
+
slack: { channel, thread_ts, user_msg_ts: job.slack.user_msg_ts, bot_msg_ts: newBotMsgTs },
|
|
330
|
+
feedback: { likes: 0, dislikes: 0 },
|
|
331
|
+
parent_job_id: job.job_id,
|
|
332
|
+
iteration_index: (job.iteration_index ?? 0) + 1,
|
|
333
|
+
};
|
|
334
|
+
writeJob(config.instance, newJob);
|
|
335
|
+
if (newBotMsgTs) {
|
|
336
|
+
for (const name of [ACTION_EMOJI.validate, ACTION_EMOJI.iterate, ACTION_EMOJI.trash]) {
|
|
337
|
+
await client.reactions.add({ channel, timestamp: newBotMsgTs, name }).catch(() => undefined);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
logger.info('slack.action.iterated', {
|
|
341
|
+
parentJobId: job.job_id,
|
|
342
|
+
newJobId: new_job_id,
|
|
343
|
+
files: archived.length,
|
|
344
|
+
iterationIndex: newJob.iteration_index,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
// Re-export readJob for any future CLI reuse
|
|
348
|
+
export { readJob };
|
|
148
349
|
//# sourceMappingURL=slack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/surfaces/slack.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/surfaces/slack.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED