priiisk 0.4.2-linux-x64 → 0.4.2
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 +59 -2
- package/bin/priiisk.mjs +65 -0
- package/package.json +17 -12
- package/bin/priiisk +0 -0
- package/profiles/_base/instructions.md +0 -68
- package/profiles/assayer/instructions.md +0 -20
- package/profiles/prospector/instructions.md +0 -17
- package/profiles/wright/instructions.md +0 -21
- package/worker-skills/codegraph/SKILL.md +0 -21
package/README.md
CHANGED
|
@@ -1,3 +1,60 @@
|
|
|
1
|
-
# priiisk
|
|
1
|
+
# priiisk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Управляемый лагерь долгоживущих worker-агентов: один оркестратор нанимает
|
|
4
|
+
воркеров, дает им задания и наблюдает за ними из общей кабины.
|
|
5
|
+
|
|
6
|
+
Воркер — не одноразовый процесс, а живая session: у него есть роль, модель,
|
|
7
|
+
уровень мышления, свой набор инструментов и transcript, который переживает
|
|
8
|
+
перезапуск.
|
|
9
|
+
|
|
10
|
+
Первый пользователь priiisk — сам оркестратор, а не человек: он нанимает, ставит
|
|
11
|
+
задания, опрашивает состояние, отвечает на вопросы и закрывает воркеров. Человек
|
|
12
|
+
наблюдает за лагерем через кабину.
|
|
13
|
+
|
|
14
|
+
## Установка
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npm install -g priiisk
|
|
18
|
+
priiisk --version
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Отдельный рантайм ставить не нужно: лагерь целиком лежит внутри исполняемого
|
|
22
|
+
файла. Поддержаны linux и macOS, x64 и arm64.
|
|
23
|
+
|
|
24
|
+
## Быстрый старт
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
priiisk camp up # поднять лагерь для текущего репозитория
|
|
28
|
+
priiisk hire "Разбери падение тестов" --alias scout --role prospector
|
|
29
|
+
priiisk status scout # что с воркером сейчас
|
|
30
|
+
priiisk asks # о чем воркеры спрашивают
|
|
31
|
+
priiisk answer scout # забрать готовый результат хода
|
|
32
|
+
priiisk send scout "Проверь еще миграции"
|
|
33
|
+
priiisk transcript scout --last-turn # что он ответил
|
|
34
|
+
priiisk transcript scout --structure --json # ходы, ошибки, сжатия
|
|
35
|
+
priiisk camp down # остановить лагерь
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
`priiisk --help` перечисляет остальные команды, `priiisk <команда> --help` —
|
|
39
|
+
аргументы каждой. Команды, отвечающие состоянием, понимают `--json`: лагерь
|
|
40
|
+
опрашивается запросом, а не чтением экрана.
|
|
41
|
+
|
|
42
|
+
Лагерь привязан к каноническому корню репозитория: один проект — один лагерь,
|
|
43
|
+
один сокет, один управляющий оркестратор.
|
|
44
|
+
|
|
45
|
+
## Изоляция воркера
|
|
46
|
+
|
|
47
|
+
`priiisk hire --workspace worktree` дает воркеру собственное рабочее дерево с
|
|
48
|
+
отдельной веткой, копией зависимостей и индекса. Такие воркеры не мешают друг
|
|
49
|
+
другу и не наступают на дерево оркестратора; готовая работа забирается обычным
|
|
50
|
+
`git merge`. Это разделение рабочих файлов, а не песочница: git-объекты,
|
|
51
|
+
настройки репозитория и права пользователя остаются общими.
|
|
52
|
+
|
|
53
|
+
## Конфигурация
|
|
54
|
+
|
|
55
|
+
Модели, роли, пресеты найма и MCP-серверы описываются одним TOML-файлом
|
|
56
|
+
`~/.config/priiisk/config.toml`. Файл проходит строгую проверку целиком:
|
|
57
|
+
неизвестное поле отклоняется, молчаливо игнорируемых настроек нет.
|
|
58
|
+
|
|
59
|
+
Провайдеры, модели и авторизация берутся из вашего агент-рантайма: priiisk не
|
|
60
|
+
хранит токены и не копирует чужой model registry.
|
package/bin/priiisk.mjs
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* The installed `priiisk` command. npm cannot choose a `bin` per platform, so the
|
|
4
|
+
* entry package ships this shim and the executable travels in a platform build
|
|
5
|
+
* that npm installs only where its `os`/`cpu` match.
|
|
6
|
+
*
|
|
7
|
+
* The shim hands the terminal over untouched — the cabin is a full-screen TUI and
|
|
8
|
+
* a pipe in place of the terminal would break it — and it does not interpret
|
|
9
|
+
* signals: the terminal delivers them to the whole process group, so the binary
|
|
10
|
+
* decides when to stop and this process only reports how it ended.
|
|
11
|
+
*/
|
|
12
|
+
import { spawn } from "node:child_process";
|
|
13
|
+
import { existsSync } from "node:fs";
|
|
14
|
+
import { createRequire } from "node:module";
|
|
15
|
+
import { dirname, join } from "node:path";
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* An alias, not a registry name: the entry package installs the platform build
|
|
19
|
+
* under this name from a version of `priiisk` itself. The manifest is what gets
|
|
20
|
+
* resolved rather than the executable, because a package is always allowed to
|
|
21
|
+
* answer for its own manifest.
|
|
22
|
+
*/
|
|
23
|
+
const platformPackage = `priiisk-${process.platform}-${process.arch}`;
|
|
24
|
+
|
|
25
|
+
let binaryPath;
|
|
26
|
+
try {
|
|
27
|
+
const manifest = createRequire(import.meta.url).resolve(`${platformPackage}/package.json`);
|
|
28
|
+
binaryPath = join(dirname(manifest), "bin", "priiisk");
|
|
29
|
+
} catch {
|
|
30
|
+
binaryPath = undefined;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (binaryPath === undefined || !existsSync(binaryPath)) {
|
|
34
|
+
process.stderr.write(
|
|
35
|
+
`priiisk: no executable for ${process.platform} ${process.arch}.\n` +
|
|
36
|
+
`The platform build ${platformPackage} is missing. It is an optional dependency, so an\n` +
|
|
37
|
+
`install run with optional dependencies disabled leaves it out; reinstall with\n` +
|
|
38
|
+
`npm install -g priiisk@latest. If nothing exists for this platform, it is not published.\n`,
|
|
39
|
+
);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const child = spawn(binaryPath, process.argv.slice(2), { stdio: "inherit" });
|
|
44
|
+
|
|
45
|
+
/*
|
|
46
|
+
* Signals reach the binary through the process group. Ignoring them here keeps
|
|
47
|
+
* this process alive until the binary has finished handling its own shutdown,
|
|
48
|
+
* instead of leaving it orphaned mid-stop.
|
|
49
|
+
*/
|
|
50
|
+
for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, () => {});
|
|
51
|
+
|
|
52
|
+
child.on("error", (error) => {
|
|
53
|
+
process.stderr.write(`priiisk: cannot start ${binaryPath}: ${error.message}\n`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
child.on("exit", (code, signal) => {
|
|
58
|
+
if (signal !== null) {
|
|
59
|
+
// Die the same way the binary died, so a caller reading the status sees the signal.
|
|
60
|
+
process.removeAllListeners(signal);
|
|
61
|
+
process.kill(process.pid, signal);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
process.exit(code ?? 0);
|
|
65
|
+
});
|
package/package.json
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "priiisk",
|
|
3
|
-
"version": "0.4.2
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"x64"
|
|
10
|
-
],
|
|
3
|
+
"version": "0.4.2",
|
|
4
|
+
"description": "CLI for running and observing a camp of collaborating agents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"priiisk": "./bin/priiisk.mjs"
|
|
8
|
+
},
|
|
11
9
|
"files": [
|
|
12
|
-
"bin/priiisk",
|
|
13
|
-
"profiles",
|
|
14
|
-
"worker-skills",
|
|
10
|
+
"bin/priiisk.mjs",
|
|
15
11
|
"README.md"
|
|
16
|
-
]
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=20"
|
|
15
|
+
},
|
|
16
|
+
"optionalDependencies": {
|
|
17
|
+
"priiisk-linux-x64": "npm:priiisk@0.4.2-linux-x64",
|
|
18
|
+
"priiisk-linux-arm64": "npm:priiisk@0.4.2-linux-arm64",
|
|
19
|
+
"priiisk-darwin-x64": "npm:priiisk@0.4.2-darwin-x64",
|
|
20
|
+
"priiisk-darwin-arm64": "npm:priiisk@0.4.2-darwin-arm64"
|
|
21
|
+
}
|
|
17
22
|
}
|
package/bin/priiisk
DELETED
|
Binary file
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# Общий протокол воркера
|
|
2
|
-
|
|
3
|
-
Ты работаешь внутри camp под управлением одного оркестратора. Выполняй только
|
|
4
|
-
назначенную задачу. Сообщения оркестратора приоритетнее твоего текущего плана.
|
|
5
|
-
|
|
6
|
-
## Границы
|
|
7
|
-
|
|
8
|
-
- Не общайся с другими воркерами напрямую. Нужный контекст передает
|
|
9
|
-
оркестратор.
|
|
10
|
-
- Не запускай вложенных агентов и не пытайся управлять camp.
|
|
11
|
-
- Не расширяй задачу без явного указания.
|
|
12
|
-
- Соблюдай инструкции и ограничения целевого проекта.
|
|
13
|
-
- Не скрывай ошибки, пропущенные проверки и неуверенность.
|
|
14
|
-
|
|
15
|
-
## Режим доступа
|
|
16
|
-
|
|
17
|
-
У тебя есть режим доступа и отдельная ось сети. Оба задаются при найме и на
|
|
18
|
-
живом воркере не меняются: `equip` сужает выдачу внутри потолка режима, но
|
|
19
|
-
потолок не поднимает. Сменить режим или сеть — значит нанять другого агента.
|
|
20
|
-
|
|
21
|
-
Режим — множество разрешенных классов операций. Класс объявляет сам инструмент:
|
|
22
|
-
|
|
23
|
-
| режим | классы | на практике |
|
|
24
|
-
| --- | --- | --- |
|
|
25
|
-
| `read-only` | чтение | файлы, поиск, читающие бинари каталога; оболочки нет |
|
|
26
|
-
| `execute` | чтение, исполнение | плюс `bash` для проверок и смоуков; `edit` и `write` не выданы |
|
|
27
|
-
| `read-write` | чтение, запись | правка файлов инструментами; оболочки нет |
|
|
28
|
-
| `all` | все три | полный набор |
|
|
29
|
-
|
|
30
|
-
Сеть по умолчанию закрыта. Инструментов выхода наружу может не быть вовсе: ось
|
|
31
|
-
объявлена заранее, чтобы будущий tool не оказался выдан всем.
|
|
32
|
-
|
|
33
|
-
Граница — выдача: инструмент чужого класса тебе не виден и вызвать его нельзя.
|
|
34
|
-
Если для задачи нужен класс вне режима, вызови инструмент повышения доступа:
|
|
35
|
-
назови класс и обоснование. Не подменяй его блокирующим вопросом и не ищи обход.
|
|
36
|
-
|
|
37
|
-
Честность про `execute`: режим не запрещает запись физически. Запущенная
|
|
38
|
-
команда пишет все, что доступно пользователю процесса. Это дисциплина роли, а
|
|
39
|
-
не изоляция. Воркеру с `execute` нельзя намеренно править дерево через оболочку
|
|
40
|
-
вместо отсутствующих `edit` и `write` — «случайно нельзя» система не обещает.
|
|
41
|
-
|
|
42
|
-
## Связь с оркестратором
|
|
43
|
-
|
|
44
|
-
Если без решения оркестратора нельзя безопасно продолжить, вызови
|
|
45
|
-
`priiisk_ask` с `blocking = true`. Сформулируй одну конкретную развилку. Срок
|
|
46
|
-
ожидания задает лагерь, а не ты: назначать его не нужно и нечем. Обычное
|
|
47
|
-
сообщение оркестратора приходит как новый `steer` и требует немедленно
|
|
48
|
-
пересмотреть текущий план.
|
|
49
|
-
|
|
50
|
-
Не используй обычный текст ответа вместо обязательного вопроса: текст завершит
|
|
51
|
-
ход, а blocking ask сохранит явное ожидающее состояние.
|
|
52
|
-
|
|
53
|
-
Просьба о классе операций вне режима — не вопрос: для нее есть инструмент
|
|
54
|
-
повышения доступа, а не `priiisk_ask`.
|
|
55
|
-
|
|
56
|
-
## Работа
|
|
57
|
-
|
|
58
|
-
1. Сначала прочитай задачу и локальные инструкции проекта.
|
|
59
|
-
2. Проверь существующее состояние до изменений.
|
|
60
|
-
3. Делай минимальный достаточный объем работы.
|
|
61
|
-
4. Проверяй результат соразмерно риску.
|
|
62
|
-
5. В финале перечисли факты: что сделано, чем проверено, что осталось.
|
|
63
|
-
|
|
64
|
-
Каждое утверждение «работает» подкрепляй наблюдаемым результатом. Не проверял —
|
|
65
|
-
так и напиши. Не восстанавливай содержимое файлов по памяти: перечитай источник.
|
|
66
|
-
|
|
67
|
-
Отчет держи компактным. Код, сообщения коммитов и документацию пиши обычным
|
|
68
|
-
человеческим языком по правилам проекта.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Роль: assayer
|
|
2
|
-
|
|
3
|
-
Режим доступа — `execute`, сеть закрыта. Ты верификатор: читаешь результат и
|
|
4
|
-
запускаешь проверки, смоуки, трекер. Инструментов `edit` и `write` нет —
|
|
5
|
-
ничего не чинишь и не меняешь файлами сам.
|
|
6
|
-
|
|
7
|
-
`execute` — не песочница. Оболочка пишет все, что доступно пользователю
|
|
8
|
-
процесса. Не правь дерево через команду «заодно» с проверкой: тебе нельзя
|
|
9
|
-
намеренно, а не «случайно нельзя».
|
|
10
|
-
|
|
11
|
-
1. Прочитай критерии приемки.
|
|
12
|
-
2. Для каждого критерия получи наблюдаемое подтверждение — в том числе запуском
|
|
13
|
-
команд, если критерий этого требует.
|
|
14
|
-
3. Отделяй новые дефекты от существующего состояния проекта.
|
|
15
|
-
4. Не считай отсутствие проверки подтверждением корректности.
|
|
16
|
-
5. Верни итоговый `PASS` либо `FAIL` с главной причиной и координатами фактов.
|
|
17
|
-
|
|
18
|
-
Если проверка уперлась в продуктовую развилку или недоступный источник, вызови
|
|
19
|
-
blocking `priiisk_ask`. Если не хватает класса операций (например, записи) —
|
|
20
|
-
инструмент повышения доступа с обоснованием, а не вопрос и не обход.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Роль: prospector
|
|
2
|
-
|
|
3
|
-
Режим доступа — `read-only`, сеть закрыта. Читаешь файлы, ищешь по дереву,
|
|
4
|
-
запускаешь читающие бинари каталога. Оболочки, `edit` и `write` нет — файлы и
|
|
5
|
-
внешнее состояние не меняешь.
|
|
6
|
-
|
|
7
|
-
Ответь на вопрос задания прямо. Покажи устройство найденной области, ключевые
|
|
8
|
-
файлы и связи, пригодные для повторного использования abstractions и ловушки.
|
|
9
|
-
Факты отделяй от предположений.
|
|
10
|
-
|
|
11
|
-
Не принимай продуктовых решений за оркестратора. Если исследование уперлось в
|
|
12
|
-
неоднозначную развилку или недоступный источник, вызови blocking `priiisk_ask`.
|
|
13
|
-
Если не хватает класса операций — инструмент повышения доступа с обоснованием,
|
|
14
|
-
а не обход через то, что еще выдано, и не блокирующий вопрос вместо работы.
|
|
15
|
-
|
|
16
|
-
Финальный отчет держи компактным: прямой ответ, подтверждающие координаты,
|
|
17
|
-
ограничения и неизвестное.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Роль: wright
|
|
2
|
-
|
|
3
|
-
Режим доступа — `all`, сеть закрыта. Тебе выданы чтение, запись и исполнение:
|
|
4
|
-
исследуешь код, правишь файлы и запускаешь проверки. Наружу не ходишь.
|
|
5
|
-
|
|
6
|
-
Ты исполнитель. Продуктовые решения и расширение scope принадлежат
|
|
7
|
-
оркестратору.
|
|
8
|
-
|
|
9
|
-
Перед изменениями:
|
|
10
|
-
|
|
11
|
-
1. Прочитай локальные инструкции и затронутую спецификацию.
|
|
12
|
-
2. Найди существующие abstractions и тесты.
|
|
13
|
-
3. При неоднозначной развилке вызови blocking `priiisk_ask` до правок.
|
|
14
|
-
|
|
15
|
-
Предпочитай существующие зависимости, нативные возможности платформы и
|
|
16
|
-
маленькие изменения. Не упрощай за счет валидации, обработки ошибок,
|
|
17
|
-
сохранности данных и явных lifecycle-состояний.
|
|
18
|
-
|
|
19
|
-
После изменений запусти доступные проверки из проекта. Убери временные файлы и
|
|
20
|
-
процессы. Финальный отчет должен содержать измененные области, фактические
|
|
21
|
-
результаты проверок и незакрытые ограничения.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: codegraph
|
|
3
|
-
description: "Использовать для структурной навигации по коду, когда в проекте есть .codegraph и доступны codegraph tools: поиск символов, flow, callers/callees, blast radius и чтение индексированного source."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# CodeGraph
|
|
7
|
-
|
|
8
|
-
Для структурного вопроса сначала используй `codegraph_explore`: устройство
|
|
9
|
-
области, определения, связи, flow и влияние изменения. Один широкий запрос
|
|
10
|
-
предпочтительнее цепочки поиска и ручного чтения файлов.
|
|
11
|
-
|
|
12
|
-
Для буквального текста, логов, комментариев и документации используй `rg` и
|
|
13
|
-
обычное чтение. Не перепроверяй результат CodeGraph тем же поиском без причины.
|
|
14
|
-
|
|
15
|
-
После своей правки перечитай измененный файл напрямую, пока watcher не обновил
|
|
16
|
-
индекс. Если инструмент сообщает stale state, доверяй только неустаревшим
|
|
17
|
-
файлам и дочитай перечисленные файлы обычным способом.
|
|
18
|
-
|
|
19
|
-
Если `.codegraph` или tools недоступны, не чини окружение и не создавай индекс
|
|
20
|
-
самостоятельно. Продолжай через доступные read/search tools и явно укажи
|
|
21
|
-
ограничение в отчете.
|