@bendyline/gilde 0.1.22 → 0.1.23
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/data/connector-types/bl/bluesky-posts/versions/1.0.0/manifest.json +7 -1
- package/data/connector-types/ca/calendar-google/versions/1.0.0/manifest.json +14 -0
- package/data/connector-types/in/instagram-media/manifest.json +1 -1
- package/data/connector-types/in/instagram-media/versions/1.0.0/manifest.json +29 -3
- package/data/connector-types/index.json +1 -1
- package/data/connector-types/li/linkedin-posts/manifest.json +16 -0
- package/data/connector-types/li/linkedin-posts/versions/1.0.0/manifest.json +54 -0
- package/data/connector-types/ma/mail-gmail/versions/1.0.0/manifest.json +14 -0
- package/data/connector-types/ma/mail-microsoft365/versions/1.0.0/manifest.json +14 -1
- package/data/connector-types/ma/mail-outlook/versions/1.0.0/manifest.json +14 -1
- package/data/connector-types/x-/x-posts/manifest.json +1 -1
- package/data/connector-types/x-/x-posts/versions/1.0.0/manifest.json +30 -4
- package/data/craftbook-templates/dr/draft-social-post/manifest.json +2 -1
- package/data/craftbook-templates/dr/draft-social-post/versions/1.0.0/craftbook.json +8 -6
- package/data/craftbook-templates/index.json +1 -1
- package/data/project-types/ca/caregiving-binder/versions/1.1.0/about.md +8 -0
- package/data/project-types/ca/caregiving-binder/versions/1.1.0/care.json +4 -0
- package/data/project-types/ca/caregiving-binder/versions/1.1.0/manifest.json +178 -0
- package/data/project-types/ca/caregiving-binder/versions/1.1.0/meds.json +8 -0
- package/data/project-types/ca/caregiving-binder/versions/1.1.0/mission.md +8 -0
- package/data/project-types/ca/caregiving-binder/versions/1.1.0/pages/dashboard/index.html +265 -0
- package/data/project-types/ch/checkers/versions/1.2.0/about.md +9 -0
- package/data/project-types/ch/checkers/versions/1.2.0/game.json +77 -0
- package/data/project-types/ch/checkers/versions/1.2.0/manifest.json +167 -0
- package/data/project-types/ch/checkers/versions/1.2.0/mission.md +9 -0
- package/data/project-types/ch/checkers/versions/1.2.0/pages/board/index.html +1157 -0
- package/data/project-types/fl/flashcards/versions/1.1.0/about.md +8 -0
- package/data/project-types/fl/flashcards/versions/1.1.0/deck.json +7 -0
- package/data/project-types/fl/flashcards/versions/1.1.0/manifest.json +168 -0
- package/data/project-types/fl/flashcards/versions/1.1.0/mission.md +6 -0
- package/data/project-types/fl/flashcards/versions/1.1.0/pages/review/index.html +476 -0
- package/data/project-types/im/image-feed/versions/1.0.0/pages/gallery/index.html +2 -1
- package/data/project-types/index.json +1 -1
- package/data/project-types/so/social-feed/manifest.json +1 -0
- package/data/project-types/so/social-feed/versions/1.0.0/about.md +2 -2
- package/data/project-types/so/social-feed/versions/1.0.0/manifest.json +6 -0
- package/data/project-types/so/social-feed/versions/1.0.0/pages/dashboard/index.html +4 -2
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"id": "draft-social-post",
|
|
5
5
|
"role": "general",
|
|
6
6
|
"name": "Draft a Social Post",
|
|
7
|
-
"description": "Draft one social post from idea to approved copy. Reads your voice guide and recent posts, grounds the angle in what your feeds actually responded to, drafts the base message, then fits a variant to each platform's limits — Bluesky 300 graphemes, X 280 characters, Instagram captions with the hook in the first 125 characters — with hashtags where idiomatic, alt text for media, and thread splits when the copy runs long. Then it stops for your review: approve, ask for a revision round, or approve and queue to Bluesky through the outbox. Covers social media copywriting, tweet and thread drafting, Bluesky posts, Instagram captions, post scheduling, and a human approval gate. Nothing is ever published without your say-so.",
|
|
7
|
+
"description": "Draft one social post from idea to approved copy. Reads your voice guide and recent posts, grounds the angle in what your feeds actually responded to, drafts the base message, then fits a variant to each platform's limits — Bluesky 300 graphemes, X 280 characters, Instagram captions with the hook in the first 125 characters, LinkedIn up to 3000 characters in a professional register — with hashtags where idiomatic, alt text for media, and thread splits when the copy runs long. Then it stops for your review: approve, ask for a revision round, or approve and queue to Bluesky through the outbox. Covers social media copywriting, tweet and thread drafting, Bluesky posts, Instagram captions, post scheduling, and a human approval gate. Nothing is ever published without your say-so.",
|
|
8
8
|
"tags": [
|
|
9
9
|
"social",
|
|
10
10
|
"post",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"bluesky",
|
|
13
13
|
"twitter",
|
|
14
14
|
"instagram",
|
|
15
|
+
"linkedin",
|
|
15
16
|
"approval"
|
|
16
17
|
],
|
|
17
18
|
"maintainer": {
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"enum": [
|
|
26
26
|
"bluesky",
|
|
27
27
|
"x",
|
|
28
|
-
"instagram"
|
|
28
|
+
"instagram",
|
|
29
|
+
"linkedin"
|
|
29
30
|
]
|
|
30
31
|
},
|
|
31
32
|
"description": "Target platforms. When absent, use whatever handles the project's synced corpora declare, defaulting to bluesky."
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
"description": "Resolve the topic and angle, read the voice, and write the drafting brief.",
|
|
61
62
|
"suggestedRole": "omroeper",
|
|
62
63
|
"capabilityFloor": "small",
|
|
63
|
-
"prompt": "You are preparing the brief for one social post.\n\n1. Resolve the topic. The topic parameter is: \"{{topic}}\". If that value is empty or still reads as a raw {{...}} placeholder, no topic was provided: do the reading below first, pick 2-3 concrete angles worth posting about, and ask the user to choose. Ask with `ask_user_question` if it is in your function schema — one call, `choices` = your angles, `allowWriteIn` true. If `ask_user_question` is NOT in your function schema, post the numbered angles as a short prose reply and end the turn — the user's next message is the answer.\n2. Read the voice: open `voice-guide.md` and `style-guide.md` in the workspace when they exist (`read_file`). Note register, phrases to use or avoid, and the hashtag policy.\n3. Read what we posted lately: call `list_posts` if it is in your function schema, otherwise read `posts/index.json`. Note the last few titles and dates so this post does not repeat one.\n4. Read what resonates: call `list_artifacts` on `data/` in the project artifacts. Each subfolder there is one synced feed corpus (its `_meta.json` says which feed). Read the freshest few records with `read_artifact` and note which recent posts drew likes, reposts, or replies. If there is no `data/` corpus, write \"no synced corpus — working from workspace content alone\" in the brief and continue; never invent engagement facts.\n5. Write `posts/_drafting/brief.md` with `write_file`: the chosen angle (one short paragraph), the target platforms with their limits (Bluesky 300 graphemes, X 280 characters, Instagram caption up to 2200 characters with only the first 125 shown in feed), the key message in one sentence, the campaign tag when \"{{campaign}}\" resolved to a real value, and anything the voice guide demands.\n\nTarget platforms parameter: \"{{platforms}}\". If it is empty or a raw placeholder, use the platforms the project's synced corpora imply, defaulting to bluesky.\n\nWhen `posts/_drafting/brief.md` is written, call `advance_task_step` to move to the draft step.",
|
|
64
|
+
"prompt": "You are preparing the brief for one social post.\n\n1. Resolve the topic. The topic parameter is: \"{{topic}}\". If that value is empty or still reads as a raw {{...}} placeholder, no topic was provided: do the reading below first, pick 2-3 concrete angles worth posting about, and ask the user to choose. Ask with `ask_user_question` if it is in your function schema — one call, `choices` = your angles, `allowWriteIn` true. If `ask_user_question` is NOT in your function schema, post the numbered angles as a short prose reply and end the turn — the user's next message is the answer.\n2. Read the voice: open `voice-guide.md` and `style-guide.md` in the workspace when they exist (`read_file`). Note register, phrases to use or avoid, and the hashtag policy.\n3. Read what we posted lately: call `list_posts` if it is in your function schema, otherwise read `posts/index.json`. Note the last few titles and dates so this post does not repeat one.\n4. Read what resonates: call `list_artifacts` on `data/` in the project artifacts. Each subfolder there is one synced feed corpus (its `_meta.json` says which feed). Read the freshest few records with `read_artifact` and note which recent posts drew likes, reposts, or replies. If there is no `data/` corpus, write \"no synced corpus — working from workspace content alone\" in the brief and continue; never invent engagement facts.\n5. Write `posts/_drafting/brief.md` with `write_file`: the chosen angle (one short paragraph), the target platforms with their limits (Bluesky 300 graphemes, X 280 characters, Instagram caption up to 2200 characters with only the first 125 shown in feed, LinkedIn up to 3000 characters with the hook in the first ~200), the key message in one sentence, the campaign tag when \"{{campaign}}\" resolved to a real value, and anything the voice guide demands.\n\nTarget platforms parameter: \"{{platforms}}\". If it is empty or a raw placeholder, use the platforms the project's synced corpora imply, defaulting to bluesky.\n\nWhen `posts/_drafting/brief.md` is written, call `advance_task_step` to move to the draft step.",
|
|
64
65
|
"advanceWhen": {
|
|
65
66
|
"file": "posts/_drafting/brief.md",
|
|
66
67
|
"minBytes": 200
|
|
@@ -83,7 +84,7 @@
|
|
|
83
84
|
"name": "Draft the post and variants",
|
|
84
85
|
"description": "Write the base copy and one platform-fitted variant per target, each within its limit.",
|
|
85
86
|
"suggestedRole": "copywriter",
|
|
86
|
-
"prompt": "Write the post from `posts/_drafting/brief.md`. Read the brief and `voice-guide.md` (when present) first. If `posts/_drafting/review.md` exists, this is a revision round — read it and honor every note in it.\n\n1. Write `posts/_drafting/post.md` with `write_file`. Frontmatter (YAML between `---` lines): `status: in-review`, `title`, `slug` (lowercase-hyphenated, derived from the title), `platforms` (the target list from the brief), `created` (today, YYYY-MM-DD), `campaign` (only when the brief names one), `tags` (a short YAML list). Body: the base copy — the full message in the project's voice, not yet fitted to any platform.\n2. For each target platform, write `posts/_drafting/variants/<platform>.md` (for example `posts/_drafting/variants/bluesky.md`). Frontmatter: `platform: <name>` and `charCount: <n>` — the honest character count of the variant body. Body: the platform-fitted copy. Bluesky: at most 300 graphemes; hashtags only when they earn their place. X: at most 280 characters. Instagram: caption up to 2200 characters, hook inside the first 125 characters (that is all the feed shows), hashtags grouped at the end where idiomatic. If the copy cannot fit its limit, split it into a numbered thread (1/3, 2/3, ...) inside the same variant file and set `charCount` to the longest part. Where the post carries media, add an `alt-text:` line under the body describing the image for screen readers.\n3. If instagram or another image-led platform is a target, write `posts/_drafting/media/brief.md`: what the image or short clip should show, format and aspect ratio, and any text overlay.\n\nKeep every claim grounded in the brief or workspace files — invent no product facts, prices, or dates. When all files are written, call `advance_task_step` to move to review.",
|
|
87
|
+
"prompt": "Write the post from `posts/_drafting/brief.md`. Read the brief and `voice-guide.md` (when present) first. If `posts/_drafting/review.md` exists, this is a revision round — read it and honor every note in it.\n\n1. Write `posts/_drafting/post.md` with `write_file`. Frontmatter (YAML between `---` lines): `status: in-review`, `title`, `slug` (lowercase-hyphenated, derived from the title), `platforms` (the target list from the brief), `created` (today, YYYY-MM-DD), `campaign` (only when the brief names one), `tags` (a short YAML list). Body: the base copy — the full message in the project's voice, not yet fitted to any platform.\n2. For each target platform, write `posts/_drafting/variants/<platform>.md` (for example `posts/_drafting/variants/bluesky.md`). Frontmatter: `platform: <name>` and `charCount: <n>` — the honest character count of the variant body. Body: the platform-fitted copy. Bluesky: at most 300 graphemes; hashtags only when they earn their place. X: at most 280 characters. Instagram: caption up to 2200 characters, hook inside the first 125 characters (that is all the feed shows), hashtags grouped at the end where idiomatic. LinkedIn (`posts/_drafting/variants/linkedin.md`): at most 3000 characters, professional register — the same voice dressed for a work audience, short paragraphs with the hook in the first two lines, hashtags sparing (3 or fewer) at the end; at 3000 characters the copy should never need splitting. If the copy cannot fit its limit, split it into a numbered thread (1/3, 2/3, ...) inside the same variant file and set `charCount` to the longest part. Where the post carries media, add an `alt-text:` line under the body describing the image for screen readers.\n3. If instagram or another image-led platform is a target, write `posts/_drafting/media/brief.md`: what the image or short clip should show, format and aspect ratio, and any text overlay.\n\nKeep every claim grounded in the brief or workspace files — invent no product facts, prices, or dates. When all files are written, call `advance_task_step` to move to review.",
|
|
87
88
|
"advanceWhen": {
|
|
88
89
|
"file": "posts/_drafting/post.md",
|
|
89
90
|
"minBytes": 200,
|
|
@@ -106,13 +107,14 @@
|
|
|
106
107
|
{
|
|
107
108
|
"kind": "judge",
|
|
108
109
|
"file": "posts/_drafting/post.md",
|
|
109
|
-
"rubric": "Each platform variant under posts/_drafting/variants/ respects its platform's character limit (Bluesky 300 graphemes, X 280 characters, Instagram caption 2200 with the hook in the first 125), and the copy follows the project's voice guide when one exists.",
|
|
110
|
+
"rubric": "Each platform variant under posts/_drafting/variants/ respects its platform's character limit (Bluesky 300 graphemes, X 280 characters, Instagram caption 2200 with the hook in the first 125, LinkedIn 3000), and the copy follows the project's voice guide when one exists.",
|
|
110
111
|
"sourceFiles": [
|
|
111
112
|
"voice-guide.md",
|
|
112
113
|
"posts/_drafting/brief.md",
|
|
113
114
|
"posts/_drafting/variants/bluesky.md",
|
|
114
115
|
"posts/_drafting/variants/x.md",
|
|
115
|
-
"posts/_drafting/variants/instagram.md"
|
|
116
|
+
"posts/_drafting/variants/instagram.md",
|
|
117
|
+
"posts/_drafting/variants/linkedin.md"
|
|
116
118
|
],
|
|
117
119
|
"label": "variants fit their platforms and the voice"
|
|
118
120
|
}
|
|
@@ -159,7 +161,7 @@
|
|
|
159
161
|
"name": "Queue to Bluesky (only when asked)",
|
|
160
162
|
"description": "Queue the approved Bluesky variant through the outbox — skipped unless the review answer asked for it.",
|
|
161
163
|
"suggestedRole": "omroeper",
|
|
162
|
-
"prompt": "First read the task notes with `read_task_notes`. If the recorded review decision
|
|
164
|
+
"prompt": "First read the task notes with `read_task_notes`. If the recorded review decision does NOT ask to queue anything — neither \"approve-and-queue-bluesky\" nor a write-in naming another connected platform (for example LinkedIn) — this step is a no-op: call `advance_task_step` with `next: \"finish\"` immediately and do nothing else.\n\nOtherwise queue the Bluesky publish:\n1. Read the committed bluesky variant (`posts/<created>-<slug>/variants/bluesky.md`).\n2. Call `draft_post` with the variant body (and its alt text when present), then `queue_post` on the returned draft. Queued posts ride the project's outbox, so the user's standing consent settings decide when it actually goes out. These tools exist only when a Bluesky connection is live: if they are not in your function schema, record \"Bluesky queue requested but no live connection — post manually\" with `write_task_note` and continue to the bookkeeping below.\n3. Bookkeeping: set the queued variant's status to `scheduled` and stamp whatever the draft/queue response returned (for example `scheduledFor` and a queue or post id) into the bluesky variant frontmatter — with `update_post` when it is in your function schema, otherwise by editing the variant file with `write_file`.\n\nLinkedIn publishes through the same flow: when a linkedin variant exists and a live LinkedIn connection puts `draft_post`/`queue_post` in your function schema AND the user's review answer asked to queue it, draft and queue that variant the same way (accountId the linkedin binding) — otherwise it stays `approved` for manual posting. X queues through the same flow too: when an x variant exists, a live X connection puts the tools in your function schema, and the review answer asked for it, draft and queue that variant (accountId the x binding) — X posts publish directly once the user's connection allows publishing. Instagram is the exception: Meta only publishes media fetched from a public https URL, so gezel can queue an Instagram post only when the user has provided an already-hosted image URL — record it as a note if they have one, otherwise the instagram variant stays `approved` for posting by hand. For every variant that was NOT queued, write a short manual-posting checklist with `write_task_note`: which variant file carries each platform's copy, each platform's limit, and the media brief path when one exists. Then call `advance_task_step` to finish.",
|
|
163
165
|
"next": "finish"
|
|
164
166
|
},
|
|
165
167
|
{
|