@plurnk/plurnk-meta 1.16.5 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.defaults +4 -16
- package/CORPUS.md +25 -9
- package/POLICY.md +0 -4
- package/README.md +1 -3
- package/SPEC.md +7 -7
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/docs/worker.md +133 -38
- package/package.json +8 -1
- package/skills/plurnk/SKILL.md +21 -0
- package/docs/git.md +0 -60
package/.env.defaults
CHANGED
|
@@ -1,19 +1,7 @@
|
|
|
1
|
-
# @plurnk/plurnk-meta —
|
|
2
|
-
# Reader-declares ({§operator-config-env-defaults}): this package's code reads these knobs.
|
|
3
|
-
# PREFIX BEND (owner-approved): the knob keeps its subject-named PLURNK_PLUGINS_ prefix —
|
|
4
|
-
# it gates plugins and that is the honest operator-facing name; one-owner-per-key holds.
|
|
1
|
+
# @plurnk/plurnk-meta — package discovery and product orientation.
|
|
5
2
|
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
# discoverable, but this decides installed = TRUSTED — once, at the host, not
|
|
9
|
-
# re-answered per family.
|
|
10
|
-
# =0 / empty / unset → OFF: every installed plugin loads (no regression).
|
|
11
|
-
# A value → ON: @plurnk/* is always trusted, plus a comma-separated allowlist of
|
|
12
|
-
# additionally-trusted packages (anything else discovered is skipped with a
|
|
13
|
-
# telemetry note, never a crash). Use 1 (a value naming no real package) for
|
|
14
|
-
# "on, zero third-party". Example: =acme-execs-cobol,@firewolf/firepad
|
|
3
|
+
# Plugin trust: 0/empty/unset = all installed packages; 1 = @plurnk/* only;
|
|
4
|
+
# comma-separated package names = @plurnk/* plus those packages. Also gates their defaults.
|
|
15
5
|
PLURNK_PLUGINS_TRUSTED_ONLY=0
|
|
16
|
-
|
|
17
|
-
# Whole-product orientation deadline in seconds. This includes exhaustive semantic
|
|
18
|
-
# preparation of the workspace's admitted project repository before the model is called.
|
|
6
|
+
# Whole-product orientation deadline, seconds; includes admitted-project search preparation.
|
|
19
7
|
PLURNK_ACCEPTANCE_TIMEOUT=3600
|
package/CORPUS.md
CHANGED
|
@@ -11,15 +11,20 @@ Authored defaults published by `@plurnk/plurnk-meta` and consumed by
|
|
|
11
11
|
| `POLICY.md` | Read before the first-run seed of the user-owned XDG config `AGENTS.md`. |
|
|
12
12
|
| `recap.md` | Read for an optional Recap rendered last when its content is nonempty. |
|
|
13
13
|
| `docs/worker.md` | Read when registered built-in pull docs are materialized. |
|
|
14
|
+
| `skills/plurnk/SKILL.md` | Standard skill entry; Core composes its package-owned and generated resources. |
|
|
14
15
|
|
|
15
|
-
Core materializes eligible pull docs at
|
|
16
|
-
exposes them through
|
|
16
|
+
Core materializes eligible scheme and runtime pull docs at
|
|
17
|
+
`worker:///_plurnk/plurnk/<name>.md` and exposes them through turn-0 FIND surveys. Merely
|
|
17
18
|
placing a file in `docs/` does not register a scheme or make speculative
|
|
18
19
|
teaching current. Every listed source is a required package member; a missing
|
|
19
20
|
or failed read surfaces at the admission boundary rather than silently reducing
|
|
20
21
|
the corpus. The intentionally empty `recap.md` is a dormant source, not a missing
|
|
21
22
|
one.
|
|
22
23
|
|
|
24
|
+
Plurnk's own reference is catalogued at `skill://plurnk/SKILL.md` alongside
|
|
25
|
+
installed skills. Chapters and the complete generated defaults catalog are
|
|
26
|
+
ordinary pull resources, not additional startup packet sections ({§plurnk-skill}).
|
|
27
|
+
|
|
23
28
|
## The teaching split
|
|
24
29
|
|
|
25
30
|
**Contracts teach the language; docs teach the world.** The contracts parser and
|
|
@@ -35,10 +40,21 @@ rather than carrying copies in core. Model-facing teaching changes are verified
|
|
|
35
40
|
through the composed product gates and tracked against the meta owner in the
|
|
36
41
|
monorepo forge.
|
|
37
42
|
|
|
38
|
-
## Teaching
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
## Teaching review
|
|
44
|
+
|
|
45
|
+
- Keep startup orientation lean; put subsystem mechanics in pull references.
|
|
46
|
+
A recovery warning belongs at the state that makes it relevant, not in every packet.
|
|
47
|
+
- Use concrete, executable examples. Distribute them across useful operations
|
|
48
|
+
rather than accidentally teaching one pattern as the only workflow.
|
|
49
|
+
- Show temporal behavior with legal turns under {§op-execution-order} and
|
|
50
|
+
{§send}; describe the contract, not a model's historical workaround.
|
|
51
|
+
- Evaluate packet bytes, reasoning, operation results, and self-audit evidence
|
|
52
|
+
together. Distinguish a teaching gap from a runtime defect before prescribing
|
|
53
|
+
more teaching. Compare model behavior when the change is behavioral; do not
|
|
54
|
+
promote one small probe into a universal rule.
|
|
55
|
+
- Preserve model-owned context management. Runtime configuration and operator
|
|
56
|
+
policy can tune different workloads without broadening the default teaching.
|
|
57
|
+
|
|
58
|
+
Probe history and unresolved experiments belong in forge issues, not current
|
|
59
|
+
doctrine. {§teaching-corpus} owns source membership; {§recap} owns the optional
|
|
60
|
+
footer. Neither creates a second admission rule or release gate.
|
package/POLICY.md
CHANGED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
YOU SHOULD assign bounded, independently completable subtasks to WORKers.
|
|
2
|
-
YOU SHOULD format user-facing responses in Markdown, using Mermaid, tables, lists, or prose as the content warrants.
|
|
3
|
-
YOU SHOULD verify theories against real reproductions.
|
|
4
|
-
YOU SHOULD verify solutions with relevant tests, including cases beyond examples and happy paths.
|
package/README.md
CHANGED
|
@@ -12,9 +12,7 @@ The plurnk metaproject layer, published — what the family shares that no singl
|
|
|
12
12
|
- `Meta.packageDirs(nodeModulesDir)` — scope-agnostic, symlink-aware enumeration across Node's ancestor resolution chain as `{ dir, name }` candidates; the nearest package name wins. Ordering and filtering are the caller's policy.
|
|
13
13
|
- `Meta.nearestNodeModules(fromDir)` — walk up to the nearest `node_modules` holding the ecosystem (witness: `@plurnk` scope); `null` when absent.
|
|
14
14
|
|
|
15
|
-
**The teaching corpus**: authored policy,
|
|
16
|
-
|
|
17
|
-
**Family tooling** grows here (scaffolders, meta bins) — the published surface of the metaproject's management layer.
|
|
15
|
+
**The teaching corpus**: authored policy, an optional Recap, the Plurnk skill entry, and built-in scheme references resolved from this installed package. Meta owns the source bytes and membership; core owns admission, resource composition, and projection. See [`CORPUS.md`](./CORPUS.md) and {§teaching-corpus}.
|
|
18
16
|
|
|
19
17
|
[`DOGFOOD.md`](./DOGFOOD.md) defines the whole-product, outside-client acceptance gate for daily-driver and release readiness.
|
|
20
18
|
|
package/SPEC.md
CHANGED
|
@@ -16,6 +16,7 @@ sources into a consuming package would create a second teaching owner.
|
|
|
16
16
|
| `POLICY.md` | Required | First-run default operating policy | Policy bootstrap {§policy-sections} |
|
|
17
17
|
| `recap.md` | Required | Optional default operational Recap | Per-packet user-slot footer {§recap} |
|
|
18
18
|
| `docs/worker.md` | Required | Deep reference prose for the reserved worker scheme | Pull-doc materialization {§schemes-directory} |
|
|
19
|
+
| `skills/plurnk/SKILL.md` | Required | Standard Plurnk skill entry and chapter directory | Service-provided skill {§plurnk-skill} |
|
|
19
20
|
|
|
20
21
|
Required is a package-membership statement, not unconditional packet
|
|
21
22
|
projection. Each source is read only at its consuming boundary; absence or an
|
|
@@ -32,14 +33,13 @@ unregistered names do not ship as speculative teaching. Manifest `documentation`
|
|
|
32
33
|
optional: an absent field contributes no pull doc, while a present field is the
|
|
33
34
|
fallback only when meta owns no source for that scheme name.
|
|
34
35
|
|
|
35
|
-
## §
|
|
36
|
+
## §skills-installation-boundary Skill composition and installation
|
|
36
37
|
|
|
37
|
-
Meta
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
user-global roots.
|
|
38
|
+
Meta authors the standard Plurnk `SKILL.md`; Core composes its resource tree
|
|
39
|
+
from package-owned references and generated resources ({§plurnk-skill}). Skill
|
|
40
|
+
discovery and enablement use the same Worker family as installed skills
|
|
41
|
+
({§skills-functionality}). Neither package copies skills into universal roots
|
|
42
|
+
or invokes an installer merely to expose the service's own reference material.
|
|
43
43
|
|
|
44
44
|
## §plugin-discovery Installed capability discovery
|
|
45
45
|
|
package/dist/index.d.ts
CHANGED
|
@@ -20,14 +20,12 @@ export interface PluginAttributionSource {
|
|
|
20
20
|
export declare const TEACHING_CORPUS: Readonly<{
|
|
21
21
|
readonly policy: "POLICY.md";
|
|
22
22
|
readonly recap: "recap.md";
|
|
23
|
+
readonly skill: "skills/plurnk/SKILL.md";
|
|
23
24
|
readonly schemeDocs: Readonly<{
|
|
24
25
|
readonly worker: "docs/worker.md";
|
|
25
26
|
}>;
|
|
26
|
-
readonly skillDocs: Readonly<{
|
|
27
|
-
readonly git: "docs/git.md";
|
|
28
|
-
}>;
|
|
29
27
|
}>;
|
|
30
|
-
export type TeachingCorpusSource = typeof TEACHING_CORPUS.policy | typeof TEACHING_CORPUS.recap |
|
|
28
|
+
export type TeachingCorpusSource = typeof TEACHING_CORPUS.policy | typeof TEACHING_CORPUS.recap | typeof TEACHING_CORPUS.skill | (typeof TEACHING_CORPUS.schemeDocs)[keyof typeof TEACHING_CORPUS.schemeDocs];
|
|
31
29
|
export default class Meta {
|
|
32
30
|
#private;
|
|
33
31
|
static declaresKind(manifest: unknown, kind: PluginKind): boolean;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,mBAAmB,GAAG,QAAQ,CAAC;AAItG,MAAM,MAAM,4BAA4B,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,SAAS,MAAM,EAAE,CAAC;AAClD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAEzE,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,CAAC,CAAC,OAAO,EAAE,wBAAwB,GAAG,4BAA4B,GAAG,IAAI,GAAG,SAAS,CAAC;CACrG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,mBAAmB,GAAG,QAAQ,CAAC;AAItG,MAAM,MAAM,4BAA4B,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,SAAS,MAAM,EAAE,CAAC;AAClD,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAEzE,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACpC,YAAY,CAAC,CAAC,OAAO,EAAE,wBAAwB,GAAG,4BAA4B,GAAG,IAAI,GAAG,SAAS,CAAC;CACrG;AAQD,eAAO,MAAM,eAAe;qBAChB,WAAW;oBACZ,UAAU;oBACV,wBAAwB;;yBARvB,gBAAgB;;EAWjB,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAC1B,OAAO,eAAe,CAAC,MAAM,GAC7B,OAAO,eAAe,CAAC,KAAK,GAC5B,OAAO,eAAe,CAAC,KAAK,GAC5B,CAAC,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,UAAU,CAAC,CAAC;AAMnF,MAAM,CAAC,OAAO,OAAO,IAAI;;IACrB,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAGhE;IAKD,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,OAAO,CAKpG;IAED,MAAM,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAiBhF;IAKD,MAAM,CAAC,kBAAkB,CACrB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,wBAAwB,EACjC,WAAW,EAAE,MAAM,GACpB,iBAAiB,CAcnB;IAED,MAAM,CAAC,mBAAmB,CAAC,GAAG,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,iBAAiB,CAIpF;IAkCD,OAAa,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyB5E;IAED,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASxD;CACJ"}
|
package/dist/index.js
CHANGED
|
@@ -24,15 +24,11 @@ const SCHEME_TEACHING = Object.freeze({
|
|
|
24
24
|
});
|
|
25
25
|
// {§teaching-corpus} — the authored package membership is one exported fact;
|
|
26
26
|
// consumers decide when and where each required source is projected.
|
|
27
|
-
// {§git-skill} — the one bundled skill document, surfaced by the service where it applies.
|
|
28
|
-
const SKILL_TEACHING = Object.freeze({
|
|
29
|
-
git: "docs/git.md",
|
|
30
|
-
});
|
|
31
27
|
export const TEACHING_CORPUS = Object.freeze({
|
|
32
28
|
policy: "POLICY.md",
|
|
33
29
|
recap: "recap.md",
|
|
30
|
+
skill: "skills/plurnk/SKILL.md",
|
|
34
31
|
schemeDocs: SCHEME_TEACHING,
|
|
35
|
-
skillDocs: SKILL_TEACHING,
|
|
36
32
|
});
|
|
37
33
|
const RESERVED_ATTRIBUTION_PREFIX = "@plurnk/";
|
|
38
34
|
const EMPTY_ATTRIBUTION = Object.freeze([]);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,kFAAkF;AAClF,+EAA+E;AAC/E,4BAA4B;AAC5B,4EAA4E;AAC5E,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,6EAA6E;AAC7E,2CAA2C;AAC3C,8EAA8E;AAC9E,iFAAiF;AACjF,4EAA4E;AAC5E,kFAAkF;AAClF,mFAAmF;AACnF,+DAA+D;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AA4B7B,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,gBAAgB;CAClB,CAAC,CAAC;AAEZ,6EAA6E;AAC7E,qEAAqE;AACrE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/docs/worker.md
CHANGED
|
@@ -2,45 +2,140 @@
|
|
|
2
2
|
|
|
3
3
|
## Summary
|
|
4
4
|
|
|
5
|
-
Coordinate workers
|
|
6
|
-
|
|
7
|
-
Workers inhabit one workspace.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
5
|
+
Coordinate workers, request isolated BARE inference, and manage workspace entries.
|
|
6
|
+
|
|
7
|
+
Workers inhabit one workspace. The authority selects a worker; a path selects
|
|
8
|
+
an entry rather than controlling that worker.
|
|
9
|
+
|
|
10
|
+
| Address | Meaning | Model access |
|
|
11
|
+
| --- | --- | --- |
|
|
12
|
+
| `worker://reviewer` | Named worker | WORK/FORK create; SEND messages; READ collects; KILL terminates. |
|
|
13
|
+
| `worker://reviewer/notes.md` | Named scratch entry | Read and write from any worker in the workspace. |
|
|
14
|
+
| `worker:///notes.md` | Shared commons entry | Read and write. |
|
|
15
|
+
|
|
16
|
+
The packet names your worker, its parent (`null` at a root), and the loop and turn you are producing under `## Worker`, below the log. Addresses are literal and keep
|
|
17
|
+
the same meaning when passed to another worker. All scratch belongs to the
|
|
18
|
+
workspace; its namespace does not require a namesake worker. Generated
|
|
19
|
+
references live under `worker:///_plurnk/`; reference
|
|
20
|
+
refreshes may replace those generated documents. EDIT creates or changes an
|
|
21
|
+
entry, never a worker. An unscoped EDIT creates the entry from its body.
|
|
22
|
+
|
|
23
|
+
````EDIT (worker://reviewer/scratch/greet.mjs) <!-- create the entry from the body -->
|
|
24
|
+
export const greet = (name) => `hello ${name}`;
|
|
25
|
+
|
|
26
|
+
console.log(greet("world"));
|
|
27
|
+
````
|
|
28
|
+
|
|
29
|
+
Control addresses contain only scheme and authority: no trailing slash,
|
|
30
|
+
userinfo, port, query, fragment, or `[metadata]` modifier.
|
|
31
|
+
|
|
32
|
+
An entry whose source has a readable projection (HTML, a notebook) carries it
|
|
33
|
+
beside the source as `#readable`, text/markdown, in its own line coordinates;
|
|
34
|
+
the default channel stays the source. Patterns match the channel they address:
|
|
35
|
+
`page.html` matches the markup, `page.html#readable` the Markdown. The
|
|
36
|
+
projection follows every source write and is never written itself.
|
|
37
|
+
|
|
38
|
+
## Turn sources
|
|
39
|
+
|
|
40
|
+
| Address | Read-only source in your worker's history |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| `ops:///<loop>/<turn>` | The exact submitted program, including interstitial text. |
|
|
43
|
+
| `reasoning:///<loop>/<turn>` | Original provider reasoning when exposed, or a harness turn's authored rationale. |
|
|
44
|
+
|
|
45
|
+
READ brings the selected source into your log; KILL of that READ curates only
|
|
46
|
+
its log projection, never the original evidence. No later reasoning is added
|
|
47
|
+
automatically after initialization's example READ.
|
|
48
|
+
|
|
49
|
+
A READ can retain your current turn's reasoning: the source exists when your
|
|
50
|
+
OPs execute. The packet's `## Worker` block names the coordinate you are
|
|
51
|
+
producing. For example, on `"loop":1,"turn":3`:
|
|
52
|
+
|
|
53
|
+
````READ (reasoning:///1/3) <1,-1>
|
|
54
|
+
````
|
|
55
|
+
|
|
56
|
+
The ordinary READ receipt appears in subsequent packets. A turn that produced
|
|
57
|
+
no reasoning reads empty; a turn that has not happened returns a missing-source
|
|
58
|
+
result. READ never requests inference.
|
|
59
|
+
|
|
60
|
+
## Delegation
|
|
61
|
+
|
|
62
|
+
**WORK to delegate, FORK to branch.** WORK starts a fresh log with your task
|
|
63
|
+
prompt; FORK copies your history and named scratch into its new name, then
|
|
64
|
+
diverges. Embedded addresses are preserved verbatim. Both share the workspace.
|
|
65
|
+
Omit the address to allocate a short worker name, reported in the receipt;
|
|
66
|
+
explicit names cannot replace an existing worker, even after it finishes.
|
|
67
|
+
A path outside the `worker://` scheme is the child's prompt resource, as for
|
|
68
|
+
BARE: `WORK (specs/feature.md)` reads the file whole as the task,
|
|
69
|
+
an inline body follows it after a blank line, and the child is auto-named.
|
|
70
|
+
Use SEND to give an existing worker a follow-up task.
|
|
71
|
+
|
|
72
|
+
Directed SEND accepts `<delay,interval>` in whole minutes to schedule its body
|
|
73
|
+
as a new task, rather than interrupting an unfinished task:
|
|
74
|
+
|
|
75
|
+
````SEND (worker://reviewer) <0,60>
|
|
76
|
+
Check for new messages and report relevant findings.
|
|
77
|
+
````
|
|
78
|
+
|
|
79
|
+
`<60>` runs once after an hour; `<0,60>` starts immediately and repeats hourly.
|
|
80
|
+
Delay is nonnegative; an interval is positive. Occurrences never overlap; missed
|
|
81
|
+
ticks coalesce without a backlog. Each occurrence uses the original instruction
|
|
82
|
+
and policy with fresh task limits. Success permits the next occurrence; an all-failed inventory or
|
|
83
|
+
an engine failure ends the recurrence. KILL cancels current and future tasks.
|
|
84
|
+
Queued future tasks remain live worker obligations, visible with their due times.
|
|
85
|
+
|
|
86
|
+
## BARE inference
|
|
87
|
+
|
|
88
|
+
BARE makes one isolated call to the child model, not a persistent worker.
|
|
89
|
+
It receives no parent history or tools. Give it a prompt resource, an inline
|
|
90
|
+
prompt, or both; resource text precedes an inline body with a blank line between.
|
|
91
|
+
|
|
92
|
+
````BARE (worker://reviewer/question.md)
|
|
93
|
+
````
|
|
94
|
+
````BARE
|
|
95
|
+
What is the capital of Germany?
|
|
96
|
+
````
|
|
97
|
+
|
|
98
|
+
The resource supplies its complete current READ text, not a preview. Neither
|
|
99
|
+
prompt form is truncated to fit; provider capacity still applies. A failed
|
|
100
|
+
source read returns its error without making an inference call.
|
|
101
|
+
Consecutive BARE calls run concurrently and settle before the turn continues.
|
|
102
|
+
Their answers are ordinary BARE receipts, visible in the next packet.
|
|
103
|
+
|
|
104
|
+
## Lifecycle
|
|
105
|
+
|
|
106
|
+
**Continue or wait.** TASK declares the current inventory. An `in_progress`
|
|
107
|
+
item keeps the loop working while children run; `waiting` joins their activity:
|
|
108
|
+
|
|
109
|
+
````WORK (worker://capital-checker)
|
|
31
110
|
Find the capital of France from a primary source
|
|
111
|
+
````
|
|
112
|
+
|
|
113
|
+
````TASK
|
|
114
|
+
[{"content":"Await capital-checker's answer.","status":"waiting"}]
|
|
115
|
+
````
|
|
116
|
+
|
|
117
|
+
TASK with waiting intent accepts `<timeout,poll>` in whole minutes. It continues the same loop;
|
|
118
|
+
neither a deadline nor a poll repeats a message or command.
|
|
119
|
+
|
|
120
|
+
| Scope | Wake condition |
|
|
121
|
+
| --- | --- |
|
|
122
|
+
| Omitted / `<-1>` | Existing work completes or a message arrives; inherit open streams' polling. |
|
|
123
|
+
| `<60>` | Also wake after at most 60 minutes, even without other work. |
|
|
124
|
+
| `<-1,60>` | Also wake after 60 minutes to observe; no wait deadline. |
|
|
125
|
+
| `<60,0>` | Deadline or an event; no periodic stream observation. |
|
|
32
126
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
127
|
+
A wake ends that wait. Submit another waiting inventory to wait again. Waking
|
|
128
|
+
retains the loop's prompts, turn allowance, and remaining execution time;
|
|
129
|
+
parked time does not consume execution time. An untimed wait without live work
|
|
130
|
+
continues. A terminal inventory with at least one completed item claims success;
|
|
131
|
+
a nonempty all-failed inventory concludes unsuccessfully.
|
|
36
132
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
133
|
+
Each child task's conclusion reaches its parent automatically as a log `SEND` from
|
|
134
|
+
`worker://capital-checker`, waking a waiting parent. Success includes the body;
|
|
135
|
+
failure preserves its status and Problem. `READ (worker://capital-checker)`
|
|
136
|
+
collects the same result explicitly. While the child is running it returns
|
|
137
|
+
`425`; the inventory still chooses whether to continue or wait.
|
|
138
|
+
A result does not imply that every task in that worker has finished.
|
|
42
139
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
Either `### SEND0 (WAIT)` to await them or `### KILL0 (worker://<name>)` the ones you no longer need.
|
|
46
|
-
A same-turn KILL followed by `### SEND0 (TERM)` concludes cleanly.
|
|
140
|
+
`KILL (worker://<name>)` cancels that worker and its descendants, including
|
|
141
|
+
queued work and unread messages. History remains readable; a later SEND can start new work.
|
package/package.json
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plurnk/plurnk-meta",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.0",
|
|
4
4
|
"description": "The plurnk metaproject layer, published: plugin-membership primitives (the ONE trust rule, scope-agnostic symlink-aware enumeration, deployment-root resolution), the project teaching corpus (personality, Recap, scheme docs), and the home for family tooling.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"plurnk",
|
|
7
|
+
"agent-skills",
|
|
8
|
+
"skill",
|
|
9
|
+
"documentation"
|
|
10
|
+
],
|
|
5
11
|
"license": "MIT",
|
|
6
12
|
"type": "module",
|
|
7
13
|
"engines": {
|
|
@@ -17,6 +23,7 @@
|
|
|
17
23
|
"POLICY.md",
|
|
18
24
|
"recap.md",
|
|
19
25
|
"docs/**/*",
|
|
26
|
+
"skills/**/*",
|
|
20
27
|
"DIVERGENCES.md"
|
|
21
28
|
],
|
|
22
29
|
"exports": {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plurnk
|
|
3
|
+
description: Configure Plurnk, select and tune models, and look up its worker and tool contracts.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plurnk
|
|
7
|
+
|
|
8
|
+
| Need | Reference |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| Configuration cascade, persistence, permissions, skills | [Configuration](references/configuration.md) |
|
|
11
|
+
| Model routes, reasoning, context, local endpoints | [Models](references/models.md) |
|
|
12
|
+
| Every installed package's settings and defaults | [Complete .env.defaults](.env.defaults) |
|
|
13
|
+
| Worker hierarchy, messaging, and delegation | [Worker reference](worker:///_plurnk/plurnk/worker.md) |
|
|
14
|
+
| Which project files you can see, and why a file is missing | [Membership](worker:///_plurnk/plurnk/members.md) |
|
|
15
|
+
| Agent Skills, MCP servers, and A2A agents: when to reach for one, how to add one | `worker:///_plurnk/plurnk/skills.md`, `mcp.md`, `agents.md` |
|
|
16
|
+
| Running code: the shell and each interpreter's body, stdin, arguments, exit status | `worker:///_plurnk/plurnk/sh.md`, `node.md`, `python3.md`, … |
|
|
17
|
+
| Enabled MCP server invocations and schemas | `worker:///_plurnk/tools/` |
|
|
18
|
+
| Built-in executors and scheme references | `worker:///_plurnk/plurnk/` |
|
|
19
|
+
|
|
20
|
+
READ the relevant reference; FIND can select paths and search their bodies.
|
|
21
|
+
Defaults describe available settings, not the operator's effective configuration.
|
package/docs/git.md
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# git — advanced repository usage
|
|
2
|
-
|
|
3
|
-
## Summary
|
|
4
|
-
|
|
5
|
-
Advanced git usage: commits, branches, worktrees, and delegation in the Plurnk environment.
|
|
6
|
-
|
|
7
|
-
Your workspace is a git working tree. Tracked files are the membership you READ, FIND, and
|
|
8
|
-
EDIT; the packet's `## Git Status` names the branch and counts staged, unstaged, and untracked
|
|
9
|
-
paths every turn. Routine work needs none of this document: edit, run the tests, commit. Read
|
|
10
|
-
on when the task spans branches, parallel workers, or history you did not write.
|
|
11
|
-
|
|
12
|
-
**Commits are the only shareable state.** Every worker sees the same working tree, so an
|
|
13
|
-
uncommitted change is visible to all of them and belongs to none of them. "Dirt" means
|
|
14
|
-
uncommitted changes to tracked content; an untracked file belongs to no branch at all. Commit
|
|
15
|
-
before you delegate, commit before you switch, and commit small: one intention per commit,
|
|
16
|
-
the subject a sentence that says what changed, never why the model felt like it.
|
|
17
|
-
|
|
18
|
-
**One branch per child, one child per checkout.** A branch-shaped subtask is an ordinary
|
|
19
|
-
WORK whose brief begins with the branch it owns:
|
|
20
|
-
|
|
21
|
-
```example
|
|
22
|
-
### EXEC0 <!-- park my own work before anyone switches -->
|
|
23
|
-
git add -A && git commit -q -m "wip: parser rewrite before delegating the lexer"
|
|
24
|
-
|
|
25
|
-
### WORK0 (worker://lexer)
|
|
26
|
-
On a new branch `feat/lexer` from the current HEAD: replace src/lexer.js with the
|
|
27
|
-
table-driven lexer described in docs/lexer.md, run `npm test`, commit on that branch,
|
|
28
|
-
then `git switch -` back to the branch you started on and report the commit hash.
|
|
29
|
-
|
|
30
|
-
### SEND0 (WAIT)
|
|
31
|
-
Awaiting lexer.
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Never let two children drive `git switch` in the same checkout at the same time: the second
|
|
35
|
-
switch strands the first child's edits on the wrong branch. Spawn branch-shaped children one at
|
|
36
|
-
a time, or give each its own worktree.
|
|
37
|
-
|
|
38
|
-
**Worktrees give parallel children their own checkout.** `git worktree add ../lexer-wt
|
|
39
|
-
feat/lexer` creates a second working tree on its own branch; a child told to work inside it can
|
|
40
|
-
switch, commit, and run tests without touching yours. Membership follows the worktree's tracked
|
|
41
|
-
files. Remove it with `git worktree remove ../lexer-wt` after the merge; a forced removal
|
|
42
|
-
discards uncommitted work there.
|
|
43
|
-
|
|
44
|
-
**The parent collects and merges deliberately.** When a child reports, READ its commit
|
|
45
|
-
(`git show --stat <hash>`) before merging. Merge with `git merge --no-ff feat/lexer` or
|
|
46
|
-
fast-forward when the history is linear; resolve conflicts yourself rather than asking the child
|
|
47
|
-
to redo the work blind. Delete the branch once merged.
|
|
48
|
-
|
|
49
|
-
**History you did not write is not yours to rewrite.** Never `git push --force`, rebase, or
|
|
50
|
-
amend commits that exist on a remote or in another worker's branch. Amend only your own
|
|
51
|
-
unpushed tip. Prefer a new commit that fixes over a rewrite that hides.
|
|
52
|
-
|
|
53
|
-
**Inspect before you act.** `git status --short`, `git diff --stat`, `git log --oneline -20`,
|
|
54
|
-
and `git blame -L <start>,<end> <path>` answer most questions about a tree in one EXEC each.
|
|
55
|
-
Read a file at another revision with `git show <ref>:<path>` rather than switching branches to
|
|
56
|
-
look at it.
|
|
57
|
-
|
|
58
|
-
**Stash is a last resort.** A stash is invisible to every other worker and to the packet's
|
|
59
|
-
git status. If work must be set aside, commit it as `wip:` on its branch and reset or revert
|
|
60
|
-
later; a commit can be seen, a stash is easily lost.
|