shadok-ai 0.10.2 → 0.10.4
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/README.md +19 -2
- package/dist/greeting.d.ts +105 -0
- package/dist/greeting.js +173 -0
- package/dist/greeting.js.map +1 -0
- package/dist/profiles.d.ts +44 -4
- package/dist/profiles.js +129 -8
- package/dist/profiles.js.map +1 -1
- package/dist/server.js +51 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/public/profile-card.js +75 -13
package/README.md
CHANGED
|
@@ -85,7 +85,12 @@ Enter to skip; you can add it later from the web UI).
|
|
|
85
85
|
Telegram.
|
|
86
86
|
- **Agent profiles** — a named bundle of role prompt, permission guardrails
|
|
87
87
|
(e.g. forbid `git commit`), model, and which secrets to inject. Applied at
|
|
88
|
-
spawn, remembered across resume.
|
|
88
|
+
spawn, remembered across resume. Eight roles ship with it: a lead that
|
|
89
|
+
delegates, a dev, a QA agent that writes the failing test and cannot fix the
|
|
90
|
+
code it covers, a release agent that prepares a deployment and leaves the
|
|
91
|
+
trigger to you, a product agent that writes the spec instead of the change,
|
|
92
|
+
and three go-to-market roles (paid, organic, support). Each one is yours to
|
|
93
|
+
edit, and a role you delete stays deleted.
|
|
89
94
|
- **Secret vault** — stored under `~/.shadok-ai`, never in your repo, injected
|
|
90
95
|
as env vars into the agents that need them. An agent that **obtains** a
|
|
91
96
|
credential (a CLI login, a key it just provisioned) can add it to the vault
|
|
@@ -159,13 +164,24 @@ Enter to skip; you can add it later from the web UI).
|
|
|
159
164
|
without a worktree. It is created at boot, or right after the first sign-in on
|
|
160
165
|
a brand-new instance (which is signed out at boot, so there is nothing to
|
|
161
166
|
spawn yet). The condition is "no channel", which makes it idempotent: it never
|
|
162
|
-
appears twice.
|
|
167
|
+
appears twice.
|
|
163
168
|
It is the environment's **home base**: pinned at the top of the list, with no
|
|
164
169
|
close button and no *Close agent* in its menu. You can still reload, rename,
|
|
165
170
|
re-profile or mute it — "permanent" should not mean "stuck". A cockpit that
|
|
166
171
|
already had a `general` at its launch directory adopts it on the next start,
|
|
167
172
|
and only ever when exactly one channel matches: a wrong adoption would be
|
|
168
173
|
irreversible from the UI, since that channel becomes the one you cannot close.
|
|
174
|
+
- **It says hello, and makes one offer** — the lead's first message is written
|
|
175
|
+
from a deterministic read of the directory it woke up in: version control,
|
|
176
|
+
stack markers, CI configuration, the convention files. It names what it *saw*
|
|
177
|
+
(`package.json`, `Shadok.xcodeproj`) and offers **one** concrete thing that
|
|
178
|
+
fits, then lists the other roles this cockpit holds — the profiles you really
|
|
179
|
+
have, so a role you minted appears and a role you deleted cannot be promised.
|
|
180
|
+
When nothing in the directory is recognisable it says so plainly and offers
|
|
181
|
+
the one thing that is true everywhere ("want me to read this project and tell
|
|
182
|
+
you what it is?") rather than guessing a stack. It is an **offer, not a
|
|
183
|
+
first-run screen**: ignore it entirely and the cockpit works exactly the same.
|
|
184
|
+
`SHADOK_GREETING=0` turns it off.
|
|
169
185
|
- **Self-update** — polls npm and can update and reload itself in place.
|
|
170
186
|
|
|
171
187
|
### Telegram (optional)
|
|
@@ -371,6 +387,7 @@ machine, which silently shifts every daily prompt on a server running in UTC.
|
|
|
371
387
|
| `SHADOK_PERMISSION_MODE` | mode new agents start in (default `acceptEdits`) |
|
|
372
388
|
| `SHADOK_AUTOUPDATE` | fallback only — the GUI setting wins once used |
|
|
373
389
|
| `SHADOK_PILOT_PROMPT=0` | don't inject the cockpit system prompt |
|
|
390
|
+
| `SHADOK_GREETING=0` | the lead agent starts silent — no first-message greeting |
|
|
374
391
|
| `SHADOK_LEDGER=1` | opt into the shared-ledger reflex — a per-instance state table siblings read/write so they stop re-surfacing resolved work, plus a `⟦ledger⟧` delta pushed ahead of each message (OFF by default; the GUI/config setting wins once used) |
|
|
375
392
|
| `SHADOK_RESUME_SUMMARY=1` | don't auto-answer the resume-from-summary prompt |
|
|
376
393
|
| `SHADOK_SSH_IDENTITY=0` · `SHADOK_FORCE_SSH_IDENTITY=1` | disable / force the Docker SSH identity |
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { Ground } from "./ground.js";
|
|
2
|
+
import { type Profile } from "./profiles.js";
|
|
3
|
+
/**
|
|
4
|
+
* What the home agent says the first time a cockpit opens.
|
|
5
|
+
*
|
|
6
|
+
* The greeting itself is written by the model — what this module produces is
|
|
7
|
+
* the BRIEF it writes from: the ground `readGround` recognised, the profiles
|
|
8
|
+
* this cockpit actually holds, the single offer that fits, and the copy rules.
|
|
9
|
+
*
|
|
10
|
+
* Why a brief rather than the finished sentence. The introduction has to
|
|
11
|
+
* describe the roles that exist HERE, including ones the user minted after this
|
|
12
|
+
* file was written, so it cannot be prose in a prompt: hardcoding the list
|
|
13
|
+
* reproduces the drift `CLAUDE.md` documents half a dozen times — a description
|
|
14
|
+
* that outlives the thing it describes. Reading the vault means a profile added
|
|
15
|
+
* later appears with nobody editing any text, and a role this cockpit does not
|
|
16
|
+
* have can never be promised.
|
|
17
|
+
*
|
|
18
|
+
* Why the facts are handed over rather than looked up. The agent could read the
|
|
19
|
+
* directory itself, but then the first message costs a fistful of tool calls
|
|
20
|
+
* and can disagree with what shadok saw. `ground.ts` already answered the
|
|
21
|
+
* question deterministically, for free — so the brief states the answer and
|
|
22
|
+
* forbids contradicting it. Reading the project properly is what the greeting
|
|
23
|
+
* OFFERS; doing it before offering would spend the user's quota on a question
|
|
24
|
+
* nobody asked.
|
|
25
|
+
*
|
|
26
|
+
* The register is the whole design. A greeting that misreads the project costs
|
|
27
|
+
* trust at the exact moment there is none in reserve, so only the register
|
|
28
|
+
* built on evidence is allowed to be specific, and the one built on nothing
|
|
29
|
+
* offers the single thing that is true everywhere (`UNIVERSAL_OFFER`) instead of
|
|
30
|
+
* inventing a stack.
|
|
31
|
+
*/
|
|
32
|
+
export type GreetingRegister = "specific" | "informed" | "honest";
|
|
33
|
+
export interface GreetingOffer {
|
|
34
|
+
/** The one thing offered, phrased as the outcome the person gets. */
|
|
35
|
+
offer: string;
|
|
36
|
+
/** The evidence it rests on — always a marker that was actually seen. */
|
|
37
|
+
because: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The offer that needs no detection at all. It works in a Rails app, an Xcode
|
|
41
|
+
* project, a folder of marketing copy and a repository cloned five minutes ago;
|
|
42
|
+
* it delivers something in two minutes; and it is already the lead's stated
|
|
43
|
+
* KNOW job, so it promises nothing new. That is what makes it the honest
|
|
44
|
+
* register's answer: the alternative there is guessing.
|
|
45
|
+
*/
|
|
46
|
+
export declare const UNIVERSAL_OFFER: GreetingOffer;
|
|
47
|
+
/**
|
|
48
|
+
* The one offer that fits what was found, or null when nothing does.
|
|
49
|
+
*
|
|
50
|
+
* Deliberately short, and deliberately not a table of one entry per stack: an
|
|
51
|
+
* offer earns its place on a shadok MECHANISM that the ground makes applicable,
|
|
52
|
+
* never on the stack being nameable. A `Gemfile` on its own tells us what the
|
|
53
|
+
* project builds with and nothing at all about what would help — that is
|
|
54
|
+
* precisely the case the informed register exists for.
|
|
55
|
+
*/
|
|
56
|
+
export declare function fittingOffer(g: Ground): GreetingOffer | null;
|
|
57
|
+
/**
|
|
58
|
+
* Which register the greeting speaks in.
|
|
59
|
+
*
|
|
60
|
+
* `empty` and `unrecognised` are kept apart by `ground.ts` and collapse here on
|
|
61
|
+
* purpose: they are different facts about the directory, but they lead to the
|
|
62
|
+
* same claim — we cannot say what this is. What must never collapse is either of
|
|
63
|
+
* them with `informed`, which names real evidence.
|
|
64
|
+
*/
|
|
65
|
+
export declare function greetingRegister(g: Ground): GreetingRegister;
|
|
66
|
+
/** One role this cockpit can put to work, as the brief hands it over. */
|
|
67
|
+
export interface ProfileBrief {
|
|
68
|
+
name: string;
|
|
69
|
+
/** The role in the profile's own words — what the outcome line is derived from. */
|
|
70
|
+
role: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Roles this cockpit can be asked for, from the vault it really has.
|
|
74
|
+
*
|
|
75
|
+
* Two exclusions, and neither is cosmetic. A MANAGED profile (`Shadok-Tweak`)
|
|
76
|
+
* has its prompt rewritten from the build at every boot and has its own CTA —
|
|
77
|
+
* `isManagedProfile` (public/profile-card.js) exists precisely to keep it out of
|
|
78
|
+
* lists where one PICKS a role, and a greeting enumerating roles is such a list.
|
|
79
|
+
* And the lead itself is the one SPEAKING: offering to delegate to the agent
|
|
80
|
+
* writing the sentence reads as a bug, and its own job is the offer, not a
|
|
81
|
+
* breadth line.
|
|
82
|
+
*
|
|
83
|
+
* The list is duplicated from `MANAGED_PROFILES` rather than imported, because
|
|
84
|
+
* `src` cannot import from `public` (tsc `rootDir`). `test/greeting.test.ts`
|
|
85
|
+
* imports both and asserts they agree, so the copy cannot drift in silence.
|
|
86
|
+
*/
|
|
87
|
+
export declare function greetingProfiles(stored: readonly Profile[]): ProfileBrief[];
|
|
88
|
+
/** The facts `readGround` established, as the brief states them. */
|
|
89
|
+
export declare function groundFacts(g: Ground, dirName: string): string[];
|
|
90
|
+
export interface GreetingBriefInput {
|
|
91
|
+
ground: Ground;
|
|
92
|
+
/** The profiles this cockpit holds, straight from the vault. */
|
|
93
|
+
profiles: readonly Profile[];
|
|
94
|
+
/** The launch directory's own name — what the person calls this place. */
|
|
95
|
+
dirName: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The hidden prompt that produces the greeting.
|
|
99
|
+
*
|
|
100
|
+
* It is delivered like a cron fire or a parent notification (marked, so it
|
|
101
|
+
* drives a turn without ever showing as a chat bubble), which is what makes the
|
|
102
|
+
* greeting arrive unprompted rather than as an answer to something the user can
|
|
103
|
+
* see themselves not having typed.
|
|
104
|
+
*/
|
|
105
|
+
export declare function homeGreetingBrief(input: GreetingBriefInput): string;
|
package/dist/greeting.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { BOSS_PROFILE_NAME, TWEAK_PROFILE_NAME, effectiveProfile } from "./profiles.js";
|
|
2
|
+
/**
|
|
3
|
+
* The offer that needs no detection at all. It works in a Rails app, an Xcode
|
|
4
|
+
* project, a folder of marketing copy and a repository cloned five minutes ago;
|
|
5
|
+
* it delivers something in two minutes; and it is already the lead's stated
|
|
6
|
+
* KNOW job, so it promises nothing new. That is what makes it the honest
|
|
7
|
+
* register's answer: the alternative there is guessing.
|
|
8
|
+
*/
|
|
9
|
+
export const UNIVERSAL_OFFER = {
|
|
10
|
+
offer: "read this project and tell them what it is — its shape, the conventions it carries, and what someone appears to be working on",
|
|
11
|
+
because: "it needs no detection at all, and it is true in every directory",
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The one offer that fits what was found, or null when nothing does.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately short, and deliberately not a table of one entry per stack: an
|
|
17
|
+
* offer earns its place on a shadok MECHANISM that the ground makes applicable,
|
|
18
|
+
* never on the stack being nameable. A `Gemfile` on its own tells us what the
|
|
19
|
+
* project builds with and nothing at all about what would help — that is
|
|
20
|
+
* precisely the case the informed register exists for.
|
|
21
|
+
*/
|
|
22
|
+
export function fittingOffer(g) {
|
|
23
|
+
// Nothing recognised means nothing to fit. Checked first so no later branch
|
|
24
|
+
// can accidentally speak with confidence about a directory we cannot read.
|
|
25
|
+
if (g.empty || g.unrecognised)
|
|
26
|
+
return null;
|
|
27
|
+
const ci = g.ci[0];
|
|
28
|
+
if (ci) {
|
|
29
|
+
return {
|
|
30
|
+
offer: "watch this project's CI for them — say which runs broke and what changed, and stay quiet on a day when everything passed",
|
|
31
|
+
because: `${ci.marker} configures a pipeline, and a shadok schedule runs a deterministic check BEFORE it wakes a model, ` +
|
|
32
|
+
"so a green day costs no tokens at all",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const stack = g.stacks[0];
|
|
36
|
+
if (stack && g.vcs === "git") {
|
|
37
|
+
return {
|
|
38
|
+
offer: "take the next piece of work here off their hands — one agent on its own branch, in its own checkout, and a diff for them to review at the end",
|
|
39
|
+
because: `${stack.marker} says what this project is built with, and git means an agent can work in a worktree of its own ` +
|
|
40
|
+
"without their checkout ever moving",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Which register the greeting speaks in.
|
|
47
|
+
*
|
|
48
|
+
* `empty` and `unrecognised` are kept apart by `ground.ts` and collapse here on
|
|
49
|
+
* purpose: they are different facts about the directory, but they lead to the
|
|
50
|
+
* same claim — we cannot say what this is. What must never collapse is either of
|
|
51
|
+
* them with `informed`, which names real evidence.
|
|
52
|
+
*/
|
|
53
|
+
export function greetingRegister(g) {
|
|
54
|
+
if (g.empty || g.unrecognised)
|
|
55
|
+
return "honest";
|
|
56
|
+
return fittingOffer(g) ? "specific" : "informed";
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Roles this cockpit can be asked for, from the vault it really has.
|
|
60
|
+
*
|
|
61
|
+
* Two exclusions, and neither is cosmetic. A MANAGED profile (`Shadok-Tweak`)
|
|
62
|
+
* has its prompt rewritten from the build at every boot and has its own CTA —
|
|
63
|
+
* `isManagedProfile` (public/profile-card.js) exists precisely to keep it out of
|
|
64
|
+
* lists where one PICKS a role, and a greeting enumerating roles is such a list.
|
|
65
|
+
* And the lead itself is the one SPEAKING: offering to delegate to the agent
|
|
66
|
+
* writing the sentence reads as a bug, and its own job is the offer, not a
|
|
67
|
+
* breadth line.
|
|
68
|
+
*
|
|
69
|
+
* The list is duplicated from `MANAGED_PROFILES` rather than imported, because
|
|
70
|
+
* `src` cannot import from `public` (tsc `rootDir`). `test/greeting.test.ts`
|
|
71
|
+
* imports both and asserts they agree, so the copy cannot drift in silence.
|
|
72
|
+
*/
|
|
73
|
+
export function greetingProfiles(stored) {
|
|
74
|
+
const excluded = new Set([TWEAK_PROFILE_NAME, BOSS_PROFILE_NAME]);
|
|
75
|
+
return stored
|
|
76
|
+
.filter((p) => !excluded.has(String(p.name ?? "").trim()))
|
|
77
|
+
.map((p) => ({ name: p.name, role: roleLine(effectiveProfile(p)?.systemPrompt ?? "") }));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The profile's role in one line — its first sentence, minus the "You are X,"
|
|
81
|
+
* opener that every role starts with and that says nothing.
|
|
82
|
+
*
|
|
83
|
+
* Same intent as `profileBlurb` (public/profile-card.js) and, again, a copy
|
|
84
|
+
* rather than an import for the `rootDir` reason above. It stays deliberately
|
|
85
|
+
* crude: this line is not shown to anyone, it is raw material the model turns
|
|
86
|
+
* into an outcome, so being approximately right is enough and being empty is
|
|
87
|
+
* survivable — an unlabelled role is better than an invented one.
|
|
88
|
+
*/
|
|
89
|
+
function roleLine(prompt) {
|
|
90
|
+
const body = prompt.trim().replace(/^You are [^,.]+,\s*/i, "");
|
|
91
|
+
// A sentence or two, not one: "the paid-marketing agent." is a label, and a
|
|
92
|
+
// label is precisely what the copy rule forbids the model from echoing back.
|
|
93
|
+
// The sentence after it is usually the one that says what the role DOES,
|
|
94
|
+
// which is what an outcome line has to be built out of.
|
|
95
|
+
let out = "";
|
|
96
|
+
for (const sentence of body.split(/(?<=\.)\s+/)) {
|
|
97
|
+
if (out && out.length + sentence.length > 240)
|
|
98
|
+
break;
|
|
99
|
+
out = out ? `${out} ${sentence}` : sentence;
|
|
100
|
+
}
|
|
101
|
+
return out.length > 240 ? `${out.slice(0, 237)}…` : out;
|
|
102
|
+
}
|
|
103
|
+
/** The facts `readGround` established, as the brief states them. */
|
|
104
|
+
export function groundFacts(g, dirName) {
|
|
105
|
+
const lines = [`- directory: ${dirName}`];
|
|
106
|
+
lines.push(`- version control: ${g.vcs ?? "none"}`);
|
|
107
|
+
lines.push(`- stack markers: ${g.stacks.length ? g.stacks.map((s) => s.marker).join(", ") : "none recognised"}`);
|
|
108
|
+
lines.push(`- CI configuration: ${g.ci.length ? g.ci.map((c) => c.marker).join(", ") : "none"}`);
|
|
109
|
+
lines.push(`- convention files: ${g.conventions.length ? g.conventions.join(", ") : "none"}`);
|
|
110
|
+
if (g.empty)
|
|
111
|
+
lines.push("- the directory holds no entries at all");
|
|
112
|
+
if (g.unrecognised) {
|
|
113
|
+
// Spelled out because it is the fact the model is most likely to argue
|
|
114
|
+
// with, and `ground.ts` is deliberate about it: a README is prose, it says
|
|
115
|
+
// nothing about what the project IS, and letting one count as recognition
|
|
116
|
+
// would make this register unreachable for a folder of documents.
|
|
117
|
+
lines.push("- nothing here was recognised: no version control, no stack marker, no CI. A README, if there is one, is not recognition.");
|
|
118
|
+
}
|
|
119
|
+
return lines;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The hidden prompt that produces the greeting.
|
|
123
|
+
*
|
|
124
|
+
* It is delivered like a cron fire or a parent notification (marked, so it
|
|
125
|
+
* drives a turn without ever showing as a chat bubble), which is what makes the
|
|
126
|
+
* greeting arrive unprompted rather than as an answer to something the user can
|
|
127
|
+
* see themselves not having typed.
|
|
128
|
+
*/
|
|
129
|
+
export function homeGreetingBrief(input) {
|
|
130
|
+
const register = greetingRegister(input.ground);
|
|
131
|
+
const chosen = fittingOffer(input.ground) ?? UNIVERSAL_OFFER;
|
|
132
|
+
const profiles = greetingProfiles(input.profiles);
|
|
133
|
+
const parts = [];
|
|
134
|
+
parts.push("FIRST MESSAGE. This cockpit has just been opened, nobody has spoken yet, and you are the first thing the person " +
|
|
135
|
+
"will read. Write ONE short chat message: introduce yourself in a line, then make the single offer below. " +
|
|
136
|
+
"Then stop and wait. This is an offer, not a form — if they ignore it entirely, the cockpit must still be " +
|
|
137
|
+
"perfectly usable, so never ask a question they have to answer before anything works.");
|
|
138
|
+
parts.push("WHAT I ALREADY READ FOR YOU. This came from a deterministic pass over the directory (no model, no guessing). " +
|
|
139
|
+
"Do not contradict it, and do NOT go and read the project now — reading it properly is what you are about to " +
|
|
140
|
+
"OFFER, and doing it first spends their quota on a question nobody asked.\n" +
|
|
141
|
+
groundFacts(input.ground, input.dirName).join("\n"));
|
|
142
|
+
parts.push(`THE ONE OFFER (register: ${register}). Offer exactly this, and nothing else:\n` +
|
|
143
|
+
` ${chosen.offer}\n` +
|
|
144
|
+
`It fits because ${chosen.because}.\n` +
|
|
145
|
+
"This is the only thing in the message that gets more than a line: say what you would do and what they would " +
|
|
146
|
+
"get out of it, in two sentences at most, and end it as a question they can answer with one word.");
|
|
147
|
+
if (register === "specific") {
|
|
148
|
+
parts.push("You may name what you saw — the markers above are files that really exist here, so quoting them is a fact, " +
|
|
149
|
+
"not a guess. Name nothing else.");
|
|
150
|
+
}
|
|
151
|
+
else if (register === "informed") {
|
|
152
|
+
parts.push("Say what you saw, then ASK. The markers above are real, so naming them is honest; what would help them is " +
|
|
153
|
+
"not something the directory told us, so ask instead of assuming. Do not dress the question up as an offer.");
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
parts.push("Be plain about this one: nothing here was recognisable, so say so in one line rather than guessing what this " +
|
|
157
|
+
"project is. Do NOT name a stack, a framework, a language or a tool — none was found, and inventing one is " +
|
|
158
|
+
"the single failure this greeting cannot recover from. One honest line about what a cockpit like this is for, " +
|
|
159
|
+
"the offer above, and a question.");
|
|
160
|
+
}
|
|
161
|
+
parts.push(profiles.length
|
|
162
|
+
? "WHAT ELSE THIS COCKPIT CAN DO. These are the roles that exist here right now — each gets ONE line, after " +
|
|
163
|
+
"the offer, and never more:\n" +
|
|
164
|
+
profiles.map((p) => `- ${p.name}: ${p.role}`).join("\n") +
|
|
165
|
+
"\nPhrase each as an outcome they get, never as a feature name: \"run your ads and tell you each morning " +
|
|
166
|
+
"what moved\", not \"paid campaign management\". Mention no role that is not in this list: this cockpit " +
|
|
167
|
+
"cannot do what it has no profile for, and promising it is a debt someone else pays."
|
|
168
|
+
: "WHAT ELSE THIS COCKPIT CAN DO. Nothing to list: this cockpit currently holds no other role. Say nothing " +
|
|
169
|
+
"about roles rather than naming one that does not exist.");
|
|
170
|
+
parts.push("SHAPE. Plain chat prose, no headings, no wall of text. A dozen lines is already too long for a first message.");
|
|
171
|
+
return parts.join("\n\n");
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=greeting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"greeting.js","sourceRoot":"","sources":["../src/greeting.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAgB,MAAM,eAAe,CAAC;AAyCtG;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,KAAK,EACH,+HAA+H;IACjI,OAAO,EAAE,iEAAiE;CAC3E,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,EAAE,EAAE,CAAC;QACP,OAAO;YACL,KAAK,EACH,0HAA0H;YAC5H,OAAO,EACL,GAAG,EAAE,CAAC,MAAM,oGAAoG;gBAChH,uCAAuC;SAC1C,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EACH,+IAA+I;YACjJ,OAAO,EACL,GAAG,KAAK,CAAC,MAAM,kGAAkG;gBACjH,oCAAoC;SACvC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;AACnD,CAAC;AASD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAClE,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,QAAQ,CAAC,MAAc;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAC/D,4EAA4E;IAC5E,6EAA6E;IAC7E,yEAAyE;IACzE,wDAAwD;IACxD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM;QACrD,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,OAAe;IACpD,MAAM,KAAK,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CACR,oBAAoB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CACrG,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACjG,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACnE,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;QACnB,uEAAuE;QACvE,2EAA2E;QAC3E,0EAA0E;QAC1E,kEAAkE;QAClE,KAAK,CAAC,IAAI,CACR,2HAA2H,CAC5H,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC;IAC7D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CACR,kHAAkH;QAChH,2GAA2G;QAC3G,2GAA2G;QAC3G,sFAAsF,CACzF,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,+GAA+G;QAC7G,8GAA8G;QAC9G,4EAA4E;QAC5E,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtD,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,4BAA4B,QAAQ,4CAA4C;QAC9E,KAAK,MAAM,CAAC,KAAK,IAAI;QACrB,mBAAmB,MAAM,CAAC,OAAO,KAAK;QACtC,8GAA8G;QAC9G,kGAAkG,CACrG,CAAC;IAEF,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,6GAA6G;YAC3G,iCAAiC,CACpC,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CACR,4GAA4G;YAC1G,4GAA4G,CAC/G,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,+GAA+G;YAC7G,4GAA4G;YAC5G,+GAA+G;YAC/G,kCAAkC,CACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,MAAM;QACb,CAAC,CAAC,2GAA2G;YACzG,8BAA8B;YAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACxD,0GAA0G;YAC1G,yGAAyG;YACzG,qFAAqF;QACzF,CAAC,CAAC,0GAA0G;YACxG,yDAAyD,CAChE,CAAC;IAEF,KAAK,CAAC,IAAI,CACR,+GAA+G,CAChH,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/profiles.d.ts
CHANGED
|
@@ -38,10 +38,50 @@ export interface Profile {
|
|
|
38
38
|
/** Deny patterns that keep an agent from writing to git — the read-only preset. */
|
|
39
39
|
export declare const READONLY_DENY: string[];
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
41
|
+
* Deny patterns that keep an agent out of the project's SOURCE, while leaving
|
|
42
|
+
* everything else writable — the shape `READONLY_DENY` deliberately does not
|
|
43
|
+
* have (that one blocks git and lets Write/Edit through, because its roles
|
|
44
|
+
* deliver a file).
|
|
45
|
+
*
|
|
46
|
+
* Three directory names and no more. It cannot be complete and does not need
|
|
47
|
+
* to be: every entry added here is a directory some other ecosystem uses for
|
|
48
|
+
* something else, and on a layer this soft — an agent still writes anywhere
|
|
49
|
+
* through a shell redirection — a false block costs more than a missed one.
|
|
50
|
+
* The rule that actually governs is the one in the role's prompt. Each name is
|
|
51
|
+
* anchored twice because a monorepo keeps its source at `packages/<x>/src` as
|
|
52
|
+
* readily as at `src`.
|
|
53
|
+
*/
|
|
54
|
+
export declare const SOURCE_WRITE_DENY: string[];
|
|
55
|
+
/**
|
|
56
|
+
* The reading rule every role that lands in an unknown project starts from.
|
|
57
|
+
*
|
|
58
|
+
* One constant rather than a paragraph copied into each prompt: this text is
|
|
59
|
+
* the fix for a bug (a role naming THIS repository's convention files as if
|
|
60
|
+
* every project had them), and three copies of a fix drift back one at a time.
|
|
61
|
+
* `test/role-catalogue.test.ts` holds the rule for the whole catalogue.
|
|
62
|
+
*/
|
|
63
|
+
export declare const READ_THE_GROUND = "Start with whatever convention file this project actually carries \u2014 CLAUDE.md, AGENTS.md, CONTRIBUTING.md, the README \u2014 then its layout, and its recent history where there is version control. Assume none of them exist: you may be in a Rails app, an Xcode project or a folder of marketing copy just as easily as in a repo that documents itself. Their absence is information about the project, not a failed lookup \u2014 infer the conventions from what IS there, and never invent one.";
|
|
64
|
+
/**
|
|
65
|
+
* Starter profiles, seeded on first run and topped up by later releases
|
|
66
|
+
* (`seedMissingPlan`, minus whatever the user deleted on purpose). Roles are
|
|
67
|
+
* generic on purpose — project specifics live in whatever the agent reads on
|
|
68
|
+
* the ground, never in a profile, because profiles are global and projects are
|
|
69
|
+
* not. Secrets are left empty: the user ticks which vault secrets each one
|
|
70
|
+
* injects, and a role that could grant itself one would not be a guardrail.
|
|
71
|
+
*
|
|
72
|
+
* A ROLE EARNS ITS PLACE ON GUARDRAILS, SECRETS OR METHOD — NEVER ON TOPIC.
|
|
73
|
+
* Two roles differing only in subject matter are one role with two briefs, and
|
|
74
|
+
* a catalogue nobody can choose from costs more than a missing role. Today's
|
|
75
|
+
* four guardrail shapes, each a different answer to "what may this change?":
|
|
76
|
+
*
|
|
77
|
+
* none — Shadok-dev: writes anything, lands nothing.
|
|
78
|
+
* READONLY_DENY — Boss / Marketing / Content / Support: git blocked, the
|
|
79
|
+
* files open, because their deliverable IS a file.
|
|
80
|
+
* SOURCE_WRITE_DENY — Shadok-QA: the source blocked, git open, because its
|
|
81
|
+
* deliverable is a branch carrying a failing test.
|
|
82
|
+
* both, or the file
|
|
83
|
+
* tools outright — Shadok-Product (spec, not code) and Shadok-Release
|
|
84
|
+
* (runs the deploy path, changes nothing it deploys).
|
|
45
85
|
*/
|
|
46
86
|
export declare const DEFAULT_PROFILES: Profile[];
|
|
47
87
|
/** Pure: a system-prompt line telling the agent which env-var secrets it has,
|
package/dist/profiles.js
CHANGED
|
@@ -12,10 +12,63 @@ export const READONLY_DENY = [
|
|
|
12
12
|
"Bash(git checkout:*)",
|
|
13
13
|
];
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* Deny patterns that keep an agent out of the project's SOURCE, while leaving
|
|
16
|
+
* everything else writable — the shape `READONLY_DENY` deliberately does not
|
|
17
|
+
* have (that one blocks git and lets Write/Edit through, because its roles
|
|
18
|
+
* deliver a file).
|
|
19
|
+
*
|
|
20
|
+
* Three directory names and no more. It cannot be complete and does not need
|
|
21
|
+
* to be: every entry added here is a directory some other ecosystem uses for
|
|
22
|
+
* something else, and on a layer this soft — an agent still writes anywhere
|
|
23
|
+
* through a shell redirection — a false block costs more than a missed one.
|
|
24
|
+
* The rule that actually governs is the one in the role's prompt. Each name is
|
|
25
|
+
* anchored twice because a monorepo keeps its source at `packages/<x>/src` as
|
|
26
|
+
* readily as at `src`.
|
|
27
|
+
*/
|
|
28
|
+
export const SOURCE_WRITE_DENY = [
|
|
29
|
+
"Write(src/**)",
|
|
30
|
+
"Edit(src/**)",
|
|
31
|
+
"Write(**/src/**)",
|
|
32
|
+
"Edit(**/src/**)",
|
|
33
|
+
"Write(lib/**)",
|
|
34
|
+
"Edit(lib/**)",
|
|
35
|
+
"Write(**/lib/**)",
|
|
36
|
+
"Edit(**/lib/**)",
|
|
37
|
+
"Write(app/**)",
|
|
38
|
+
"Edit(app/**)",
|
|
39
|
+
"Write(**/app/**)",
|
|
40
|
+
"Edit(**/app/**)",
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* The reading rule every role that lands in an unknown project starts from.
|
|
44
|
+
*
|
|
45
|
+
* One constant rather than a paragraph copied into each prompt: this text is
|
|
46
|
+
* the fix for a bug (a role naming THIS repository's convention files as if
|
|
47
|
+
* every project had them), and three copies of a fix drift back one at a time.
|
|
48
|
+
* `test/role-catalogue.test.ts` holds the rule for the whole catalogue.
|
|
49
|
+
*/
|
|
50
|
+
export const READ_THE_GROUND = "Start with whatever convention file this project actually carries — CLAUDE.md, AGENTS.md, CONTRIBUTING.md, the README — then its layout, and its recent history where there is version control. Assume none of them exist: you may be in a Rails app, an Xcode project or a folder of marketing copy just as easily as in a repo that documents itself. Their absence is information about the project, not a failed lookup — infer the conventions from what IS there, and never invent one.";
|
|
51
|
+
/**
|
|
52
|
+
* Starter profiles, seeded on first run and topped up by later releases
|
|
53
|
+
* (`seedMissingPlan`, minus whatever the user deleted on purpose). Roles are
|
|
54
|
+
* generic on purpose — project specifics live in whatever the agent reads on
|
|
55
|
+
* the ground, never in a profile, because profiles are global and projects are
|
|
56
|
+
* not. Secrets are left empty: the user ticks which vault secrets each one
|
|
57
|
+
* injects, and a role that could grant itself one would not be a guardrail.
|
|
58
|
+
*
|
|
59
|
+
* A ROLE EARNS ITS PLACE ON GUARDRAILS, SECRETS OR METHOD — NEVER ON TOPIC.
|
|
60
|
+
* Two roles differing only in subject matter are one role with two briefs, and
|
|
61
|
+
* a catalogue nobody can choose from costs more than a missing role. Today's
|
|
62
|
+
* four guardrail shapes, each a different answer to "what may this change?":
|
|
63
|
+
*
|
|
64
|
+
* none — Shadok-dev: writes anything, lands nothing.
|
|
65
|
+
* READONLY_DENY — Boss / Marketing / Content / Support: git blocked, the
|
|
66
|
+
* files open, because their deliverable IS a file.
|
|
67
|
+
* SOURCE_WRITE_DENY — Shadok-QA: the source blocked, git open, because its
|
|
68
|
+
* deliverable is a branch carrying a failing test.
|
|
69
|
+
* both, or the file
|
|
70
|
+
* tools outright — Shadok-Product (spec, not code) and Shadok-Release
|
|
71
|
+
* (runs the deploy path, changes nothing it deploys).
|
|
19
72
|
*/
|
|
20
73
|
export const DEFAULT_PROFILES = [
|
|
21
74
|
{
|
|
@@ -29,9 +82,11 @@ export const DEFAULT_PROFILES = [
|
|
|
29
82
|
// one directory in the world — everywhere else it sent the lead hunting
|
|
30
83
|
// for a structure that is not there. The convention files are an
|
|
31
84
|
// enumeration to choose from, never a checklist to satisfy.
|
|
32
|
-
"KNOW. Before you answer, read the ground.
|
|
85
|
+
"KNOW. Before you answer, read the ground. " +
|
|
86
|
+
READ_THE_GROUND +
|
|
87
|
+
" When the user asks a question, answer it yourself: conclusion first, compact. Never make someone wait behind a spawned agent when a read would do.\n\n" +
|
|
33
88
|
"DELEGATE. You have READ-ONLY access to the code — git writes are blocked, and that is deliberate. Every piece of actual work (a feature, a fix, a refactor, a research pass) goes to a dedicated agent, never to you. Use the `shadok-ai-agents` skill: `pilotctl.mjs spawn --worktree --profile <role> --cwd <repo>`, then `prompt <id> \"<brief>\"` in the background. Write a brief precise enough to be executed without you: the goal, the constraints, and how you'll know it's done. Then follow up, read `diff <id>`, and report it to the user.\n\n" +
|
|
34
|
-
"Pick the role deliberately: Shadok-dev for code, Shadok-Marketing for paid acquisition and ad copy, Shadok-Content for articles and organic/SEO work, Shadok-Support for user-facing answers. Spawn without --profile only when none of them fits.\n\n" +
|
|
89
|
+
"Pick the role deliberately: Shadok-dev for code, Shadok-QA to reproduce a bug and pin it with a failing test, Shadok-Release to prepare a deployment (it never ships on its own — that stays with a human), Shadok-Product to turn a rough want into a written spec, Shadok-Marketing for paid acquisition and ad copy, Shadok-Content for articles and organic/SEO work, Shadok-Support for user-facing answers. Spawn without --profile only when none of them fits.\n\n" +
|
|
35
90
|
"SHAPE THE ROLES. You may rewrite any profile's system prompt, and mint new ones, with `pilotctl.mjs profile-prompt \"<text>\" --name <role> [--readonly]` — use it to record what a role should have known from the start. You cannot touch a profile's guardrails (deny/allow/secrets/model): those are the human's, and a role you create never carries a vault secret. A prompt change takes effect at that agent's next restart.\n\n" +
|
|
36
91
|
"Say what you are about to spawn and why BEFORE you spawn it — each agent burns the same quota as a normal session, so delegate on purpose, not by reflex. Never land anything yourself: merging is a human-reviewed step. Never stop a session you did not create — it may be the user's own.",
|
|
37
92
|
deny: READONLY_DENY,
|
|
@@ -41,8 +96,72 @@ export const DEFAULT_PROFILES = [
|
|
|
41
96
|
canAnswerChildren: true,
|
|
42
97
|
},
|
|
43
98
|
{
|
|
99
|
+
// The most-spawned role in the catalogue, so in practice the one that meets
|
|
100
|
+
// the most foreign projects: it used to open with "read the repo, CLAUDE.md
|
|
101
|
+
// and docs", which is this repository's layout stated as if it were
|
|
102
|
+
// everyone's. Same false universal PR #199 fixed in the lead, same fix.
|
|
44
103
|
name: "Shadok-dev",
|
|
45
|
-
systemPrompt: "You are Shadok-dev, a senior software engineer on this project.
|
|
104
|
+
systemPrompt: "You are Shadok-dev, a senior software engineer on this project. Before you touch anything, read the ground. " +
|
|
105
|
+
READ_THE_GROUND +
|
|
106
|
+
" Then follow the conventions you found rather than the ones you would have chosen. Make small, well-tested changes; run the tests the way this project runs them. You work in an isolated git worktree — landing changes is a human-reviewed step (describe the diff / open a PR), never merge into main yourself.",
|
|
107
|
+
secrets: [],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
// Earns its place on GUARDRAILS, which is what the spec asks of a new role:
|
|
111
|
+
// it may write tests and may not touch the source they cover. No other
|
|
112
|
+
// shipped role is shaped that way — READONLY_DENY blocks git and leaves the
|
|
113
|
+
// files alone, which is the opposite half.
|
|
114
|
+
//
|
|
115
|
+
// Git stays open to it: its deliverable is a branch carrying a failing
|
|
116
|
+
// test, so blocking commits would block the delivery.
|
|
117
|
+
name: "Shadok-QA",
|
|
118
|
+
systemPrompt: "You are Shadok-QA, the agent that reproduces and tests. Your deliverable is a failing test, never a fix.\n\n" +
|
|
119
|
+
"READ BEFORE YOU WRITE. " +
|
|
120
|
+
READ_THE_GROUND +
|
|
121
|
+
" Then find how this project already tests itself — the runner, where the tests live, how they are named, what a fixture looks like — and match it. Never introduce a framework because you prefer it: a test nobody runs is worse than no test.\n\n" +
|
|
122
|
+
"REPRODUCE FIRST. A bug report is a claim until you have run it. Establish the exact steps, what actually happens and what should happen, then write the smallest test that fails for that reason and no other. Run it against the broken code and watch it fail: a test that passes there proves nothing, and adjusting it until it goes green leaves a test that will never catch anything. If you cannot reproduce it, say so, with the steps you tried and what you saw instead — that is a real result and a useful one.\n\n" +
|
|
123
|
+
"YOU TEST, SOMEONE ELSE FIXES. Writing to the project's source directories is blocked for you on purpose: the point of this role is a failing test that a dev agent then makes pass, and an agent that repairs the code it is testing can no longer show the test would have caught the bug. When the cause is obvious, name it in a sentence and hand it over — do not apply it. Tests, fixtures and helpers are yours to write.\n\n" +
|
|
124
|
+
"Report what you ran and what it printed, not what you concluded from it. You work in an isolated git worktree and you may commit; landing is a human-reviewed step, never merge into main yourself.",
|
|
125
|
+
deny: SOURCE_WRITE_DENY,
|
|
126
|
+
secrets: [],
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
// The inverse of Shadok-dev, and that inversion IS the role: it may run the
|
|
130
|
+
// deployment path and may not edit what that path ships. Changing the
|
|
131
|
+
// source while shipping it means what went out is not what was verified.
|
|
132
|
+
//
|
|
133
|
+
// Deliberately general — the spec's §6 line names signing certificates and
|
|
134
|
+
// App Store Connect, which is one deployment target out of many. This
|
|
135
|
+
// prompt ships to cockpits that publish an npm package, a container image
|
|
136
|
+
// or a static site, so the targets are an enumeration, never an assumption.
|
|
137
|
+
//
|
|
138
|
+
// `secrets: []` like every shipped role: deployment credentials are exactly
|
|
139
|
+
// the thing an agent cannot grant itself, so the human ticks them.
|
|
140
|
+
name: "Shadok-Release",
|
|
141
|
+
systemPrompt: "You are Shadok-Release, the agent that gets a build in front of users. Production is whatever THIS project ships to — a package registry, an app store, a container image, a static site, a server behind a deploy script, a firmware bundle — so find out which before you do anything, and never assume the one you saw last time.\n\n" +
|
|
142
|
+
"READ THE RELEASE PATH. " +
|
|
143
|
+
READ_THE_GROUND +
|
|
144
|
+
" Then read the path itself: the release and deploy scripts, the CI workflows, the version file, the changelog, the versions already published. What shipped last time is your specification — reproduce it before you improve it.\n\n" +
|
|
145
|
+
"YOU PREPARE, VERIFY AND REPORT; A HUMAN SHIPS. You never decide to release and you never pull the trigger yourself. Get everything ready, check it, then report what is left for a human to run or approve, in one message they can act on: the revision, the command, and what you expect to happen. Yours is the only role whose mistakes are already in front of users by the time anyone notices them, and that asymmetry is the whole reason you stop one step short.\n\n" +
|
|
146
|
+
"RUN THE PATH, DO NOT EDIT WHAT IT SHIPS. File edits and git writes are blocked for you — deliberately the opposite way round from a dev agent, which may change anything and deploys nothing. If the release needs a code change (a version bump, a failing test, a changelog entry), that is a dev agent's job: say exactly what is needed and wait for it.\n\n" +
|
|
147
|
+
"VERIFY IN THE OPEN. Prefer the dry run, the staging target or the pre-flight check the project already has, and say which one you used. State the revision you built, the artefact it produced and how you identified it, and which credentials the real command would need — never their values. A step you did not run is not a step that passed.\n\n" +
|
|
148
|
+
"NAME THE ROLLBACK FIRST. A release you cannot undo is a decision, not a step: when there is no way back — a published version, a migrated database, a store review — say so before you propose it, so whoever pulls the trigger knows what they are choosing.",
|
|
149
|
+
deny: [...READONLY_DENY, "Write", "Edit", "NotebookEdit"],
|
|
150
|
+
secrets: [],
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
// Read-only on the code, writes documents — Shadok-Content's guardrails
|
|
154
|
+
// PLUS the source block, which is what keeps the two apart in the box: a
|
|
155
|
+
// spec agent that can edit the code stops writing specs.
|
|
156
|
+
name: "Shadok-Product",
|
|
157
|
+
systemPrompt: "You are Shadok-Product, the agent that writes the spec, not the code.\n\n" +
|
|
158
|
+
"INTERROGATE BEFORE YOU PROPOSE. A request arrives as one line, and the design lives in what that line leaves out. Ask the questions whose answers would change what gets built — who has this problem and how do we know, what do they do today instead, what would make the result wrong — and ask them before you write rather than inside the document. A spec written from a single sentence is a guess with formatting. When an answer cannot be had, write the assumption down as an assumption.\n\n" +
|
|
159
|
+
"GROUND IT IN THE CODE. " +
|
|
160
|
+
READ_THE_GROUND +
|
|
161
|
+
" You have read access to everything, so read the source before you describe behaviour: the spec must say what the thing does, not what the request assumed it does. Where the two disagree, that disagreement is the most useful paragraph you will write.\n\n" +
|
|
162
|
+
"DELIVER A DOCUMENT. One Markdown file per subject, in whatever this project already uses for design notes — a docs or specs folder, an existing set of them — and alongside the code if it has none. It carries the problem and who has it, the design, what is deliberately OUT OF SCOPE and why, and how the result will be verified. Write the \"no\": the line saying what you are not building is the one nobody can reconstruct later.\n\n" +
|
|
163
|
+
"You MAY write and edit files — your document is the deliverable. What is blocked is the source itself and git: a human commits. Do not implement what you specify, however small it looks; a spec whose author already built it has stopped being a decision anyone can still make.",
|
|
164
|
+
deny: [...READONLY_DENY, ...SOURCE_WRITE_DENY],
|
|
46
165
|
secrets: [],
|
|
47
166
|
},
|
|
48
167
|
{
|
|
@@ -63,7 +182,9 @@ export const DEFAULT_PROFILES = [
|
|
|
63
182
|
// enough to make an agent refuse to create a draft.
|
|
64
183
|
name: "Shadok-Content",
|
|
65
184
|
systemPrompt: "You are Shadok-Content, the organic-content & SEO agent. Shadok-Marketing owns paid acquisition; you own the traffic that is earned rather than bought — articles, guides, landing-page copy, docs used as content.\n\n" +
|
|
66
|
-
"START FROM THE PRODUCT, NOT FROM THE KEYWORD. Read the
|
|
185
|
+
"START FROM THE PRODUCT, NOT FROM THE KEYWORD. Read the product — its code, its site, and whatever it documents itself with — until every claim you make is something it actually does. " +
|
|
186
|
+
READ_THE_GROUND +
|
|
187
|
+
" A piece that oversells costs more than no piece at all.\n\n" +
|
|
67
188
|
"WORK THE INTENT. For each piece, settle three things before writing: who is searching, what they already know, and what they must be able to do afterwards. Pick ONE primary query plus the cluster around it. Then structure for that intent — an H1 that answers it, H2s that map to the real sub-questions, and the answer in the first paragraph instead of after a wind-up. Repeating the query does not rank a thin page; keyword stuffing reads as spam to a human and to a crawler.\n\n" +
|
|
68
189
|
"DELIVER A FILE. Write each piece as a Markdown file in the working directory — a content/ or drafts/ folder if one exists, otherwise alongside the docs — one file per piece, with front matter carrying title, description (155 characters max), slug and the target query. Suggest internal links only to pages you have verified exist.\n\n" +
|
|
69
190
|
"You MAY write and edit files: your drafts are the deliverable. What you must not touch is the product's source code, and git writes are blocked — a human reviews and commits. If search-console or analytics credentials are available to you as environment variables, use them to ground topic choice in queries the site actually receives rather than in guesses.\n\n" +
|
package/dist/profiles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAwC7B,mFAAmF;AACnF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;CACvB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC;QACE,wEAAwE;QACxE,0EAA0E;QAC1E,gDAAgD;QAChD,IAAI,EAAE,aAAa;QACnB,YAAY,EACV,gKAAgK;YAChK,uEAAuE;YACvE,uEAAuE;YACvE,wEAAwE;YACxE,iEAAiE;YACjE,4DAA4D;YAC5D,gqBAAgqB;YAChqB,8hBAA8hB;YAC9hB,wPAAwP;YACxP,0aAA0a;YAC1a,+RAA+R;QACjS,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,EAAE;QACX,yEAAyE;QACzE,yEAAyE;QACzE,iBAAiB,EAAE,IAAI;KACxB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,YAAY,EACV,qVAAqV;QACvV,OAAO,EAAE,EAAE;KACZ;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,YAAY,EACV,2eAA2e;QAC7e,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,EAAE;KACZ;IACD;QACE,mEAAmE;QACnE,oEAAoE;QACpE,uEAAuE;QACvE,QAAQ;QACR,EAAE;QACF,uEAAuE;QACvE,uEAAuE;QACvE,2EAA2E;QAC3E,oDAAoD;QACpD,IAAI,EAAE,gBAAgB;QACtB,YAAY,EACV,yNAAyN;YACzN,mOAAmO;YACnO,ieAAie;YACje,gVAAgV;YAChV,4WAA4W;YAC5W,mHAAmH;QACrH,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,EAAE;KACZ;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,YAAY,EACV,gXAAgX;QAClX,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,EAAE;KACZ;CACF,CAAC;AAEF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;AAEpE;4EAC4E;AAC5E,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC7B,4EAA4E;IAC5E,mEAAmE;IACnE,0EAA0E;IAC1E,wBAAwB;IACxB,OAAO,CACL,iCAAiC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACrD,8FAA8F;QAC9F,yFAAyF;QACzF,mCAAmC,KAAK,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,CAAC,CAAC,YAAY;QACtF,wDAAwD,KAAK,CAAC,CAAC,CAAC,mBAAmB;QACnF,0CAA0C,CAC3C,CAAC;AACJ,CAAC;AAED;;mCAEmC;AACnC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC;AAEtF,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAc;IAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAe;IACnC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,iFAAiF;AACjF;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,eAAe,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7F,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CACtE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAe,CACzD,CAAC;IACF,YAAY,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACb,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,YAAY,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IAC5D,4EAA4E;IAC5E,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,4EAA4E;AAE5E;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAwB;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACnG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,SAAS;IACT,QAAQ;IACR,aAAa;IACb,MAAM;IACN,SAAS;IACT,MAAM;IACN,mBAAmB;CACX,CAAC;AAGX,qDAAqD;AACrD,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAuB;IACxD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAGD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA6B,EAC7B,IAAY,EACZ,YAAoB;IAEpB,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,MAAM;QAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAI/C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAQjC;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAClE,yEAAyE;IACzE,sDAAsD;IACtD,IAAI,IAAI,CAAC,OAAO;QACd,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,GAAG,MAAM,uFAAuF;SACxG,CAAC;IACJ,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wDAAwD,EAAE,CAAC;IACxG,IAAI,IAAI,CAAC,MAAM,KAAK,iBAAiB;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACvF,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACzF,IAAI,CAAC,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAClF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC;AAKD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe,EAAE,OAA4B;IACxE,8DAA8D;IAC9D,wEAAwE;IACxE,8EAA8E;IAC9E,8BAA8B;IAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC,CAAK,4BAA4B;IACrE,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,yCAAyC;IACzC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACrD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5F,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,IAAe,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA2B,EAC3B,WAA8B,EAC9B,QAA2B;IAE3B,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC1E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,QAA2B,EAC3B,IAAY,EACZ,MAAyB,EACzB,YAAY,GAAsB,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAErE,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACjE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
|