@plurnk/plurnk-contracts 1.18.0 → 1.19.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 +11 -0
- package/README.md +2 -2
- package/SPEC.md +325 -265
- package/dist/conformance/agui-v1.json +3 -3
- package/dist/schema/ClientStatement.json +0 -10
- package/dist/schema/LoopPolicy.json +32 -3
- package/dist/schema/LoopPolicyRequest.json +16 -0
- package/dist/schema/McpConfigurationOverlay.json +1 -14
- package/dist/schema/PlurnkStatement.json +20 -31
- package/dist/schema/ProposalProjection.json +2 -2
- package/dist/schema/SkillDefinition.json +3 -3
- package/dist/schema/TextLineMarker.json +1 -1
- package/dist/src/ApplicationPort.d.ts +37 -10
- package/dist/src/ApplicationPort.d.ts.map +1 -1
- package/dist/src/LoopLifecycle.d.ts +5 -0
- package/dist/src/LoopLifecycle.d.ts.map +1 -1
- package/dist/src/LoopLifecycle.js +15 -0
- package/dist/src/LoopLifecycle.js.map +1 -1
- package/dist/src/MessageResource.d.ts +30 -0
- package/dist/src/MessageResource.d.ts.map +1 -0
- package/dist/src/MessageResource.js +2 -0
- package/dist/src/MessageResource.js.map +1 -0
- package/dist/src/PlurnkParseError.d.ts +1 -3
- package/dist/src/PlurnkParseError.d.ts.map +1 -1
- package/dist/src/PlurnkParseError.js +1 -4
- package/dist/src/PlurnkParseError.js.map +1 -1
- package/dist/src/Problems.d.ts +1 -0
- package/dist/src/Problems.d.ts.map +1 -1
- package/dist/src/Problems.js +19 -1
- package/dist/src/Problems.js.map +1 -1
- package/dist/src/TurnDisposition.d.ts +2 -3
- package/dist/src/TurnDisposition.d.ts.map +1 -1
- package/dist/src/TurnDisposition.js +4 -20
- package/dist/src/TurnDisposition.js.map +1 -1
- package/dist/src/Validator.d.ts +3 -3
- package/dist/src/Validator.d.ts.map +1 -1
- package/dist/src/Validator.js +14 -15
- package/dist/src/Validator.js.map +1 -1
- package/dist/src/index.d.ts +3 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/types.d.ts +5 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.generated.d.ts +32 -67
- package/dist/src/types.generated.d.ts.map +1 -1
- package/dist/src/types.js +12 -10
- package/dist/src/types.js.map +1 -1
- package/package.json +4 -3
- package/plurnk.md +39 -66
- package/dist/schema/AcpPlan.json +0 -63
- package/dist/schema/Plan.json +0 -65
- package/dist/src/AcpPlanValue.d.ts +0 -6
- package/dist/src/AcpPlanValue.d.ts.map +0 -1
- package/dist/src/AcpPlanValue.js +0 -36
- package/dist/src/AcpPlanValue.js.map +0 -1
- package/dist/src/PlanValue.d.ts +0 -9
- package/dist/src/PlanValue.d.ts.map +0 -1
- package/dist/src/PlanValue.js +0 -63
- package/dist/src/PlanValue.js.map +0 -1
package/dist/schema/Plan.json
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://schemas.plurnk.xyz/v0/Plan.json",
|
|
4
|
-
"$comment": "Plurnk's model-native Plan is a bare array of {content, status} task entries. ACP projection (separately owned by AcpPlan.json) supplies the required priority at the edge.",
|
|
5
|
-
"title": "Plan",
|
|
6
|
-
"description": "Plurnk's model-native task inventory.",
|
|
7
|
-
"type": "array",
|
|
8
|
-
"items": {
|
|
9
|
-
"$ref": "#/$defs/PlanEntry"
|
|
10
|
-
},
|
|
11
|
-
"$defs": {
|
|
12
|
-
"PlanEntry": {
|
|
13
|
-
"description": "One task or goal in the model's plan.",
|
|
14
|
-
"type": "object",
|
|
15
|
-
"properties": {
|
|
16
|
-
"content": {
|
|
17
|
-
"description": "Human-readable description of what this task aims to accomplish.",
|
|
18
|
-
"type": "string"
|
|
19
|
-
},
|
|
20
|
-
"status": {
|
|
21
|
-
"description": "The current execution status of this task.",
|
|
22
|
-
"$ref": "#/$defs/PlanEntryStatus"
|
|
23
|
-
},
|
|
24
|
-
"_meta": {
|
|
25
|
-
"description": "Opaque entry metadata preserved through standards projection.",
|
|
26
|
-
"type": [
|
|
27
|
-
"object",
|
|
28
|
-
"null"
|
|
29
|
-
],
|
|
30
|
-
"additionalProperties": true
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"required": [
|
|
34
|
-
"content",
|
|
35
|
-
"status"
|
|
36
|
-
],
|
|
37
|
-
"additionalProperties": false
|
|
38
|
-
},
|
|
39
|
-
"PlanEntryStatus": {
|
|
40
|
-
"description": "Model-native task states; ACP projection is separately owned.",
|
|
41
|
-
"oneOf": [
|
|
42
|
-
{
|
|
43
|
-
"type": "string",
|
|
44
|
-
"const": "todo"
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"type": "string",
|
|
48
|
-
"const": "in_progress"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"type": "string",
|
|
52
|
-
"const": "waiting"
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"type": "string",
|
|
56
|
-
"const": "completed"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"type": "string",
|
|
60
|
-
"const": "failed"
|
|
61
|
-
}
|
|
62
|
-
]
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AcpPlanValue.d.ts","sourceRoot":"","sources":["../../src/AcpPlanValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAK1C,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAsBtC;IAED,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK9C;CAEJ"}
|
package/dist/src/AcpPlanValue.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import PlanValue from "./PlanValue.js";
|
|
2
|
-
import Validator from "./Validator.js";
|
|
3
|
-
// {§plan-acp-projection}
|
|
4
|
-
export default class AcpPlanValue {
|
|
5
|
-
static project(value) {
|
|
6
|
-
const plan = PlanValue.assertCanonical(value);
|
|
7
|
-
const projected = {
|
|
8
|
-
entries: plan.map((entry) => {
|
|
9
|
-
const metadata = Object.fromEntries(Object.entries(entry._meta ?? {}).filter(([key]) => key !== "plurnk.xyz/status"));
|
|
10
|
-
const { _meta: _ignored, ...fields } = entry;
|
|
11
|
-
if (entry.status !== "waiting" && entry.status !== "failed")
|
|
12
|
-
return {
|
|
13
|
-
...fields,
|
|
14
|
-
status: entry.status === "todo" ? "pending" : entry.status,
|
|
15
|
-
priority: "medium",
|
|
16
|
-
...(Object.keys(metadata).length === 0 ? {} : { _meta: metadata }),
|
|
17
|
-
};
|
|
18
|
-
return {
|
|
19
|
-
...entry,
|
|
20
|
-
content: `${entry.status === "waiting" ? "Waiting" : "Failed"}: ${entry.content}`,
|
|
21
|
-
status: entry.status === "waiting" ? "in_progress" : "completed",
|
|
22
|
-
priority: "medium",
|
|
23
|
-
_meta: { ...metadata, "plurnk.xyz/status": entry.status },
|
|
24
|
-
};
|
|
25
|
-
}),
|
|
26
|
-
};
|
|
27
|
-
return AcpPlanValue.assertCanonical(projected);
|
|
28
|
-
}
|
|
29
|
-
static assertCanonical(value) {
|
|
30
|
-
if (!Validator.validateAcpPlan(value).valid) {
|
|
31
|
-
throw new TypeError("Expected a canonical ACP Plan.");
|
|
32
|
-
}
|
|
33
|
-
return value;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=AcpPlanValue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AcpPlanValue.js","sourceRoot":"","sources":["../../src/AcpPlanValue.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,yBAAyB;AACzB,MAAM,CAAC,OAAO,OAAO,YAAY;IAC7B,MAAM,CAAC,OAAO,CAAC,KAAc;QACzB,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG;YACd,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACtH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;gBAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,OAAO;wBAChE,GAAG,MAAM;wBACT,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;wBACnE,QAAQ,EAAE,QAAiB;wBAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;qBACrE,CAAC;gBACF,OAAO;oBACH,GAAG,KAAK;oBACR,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE;oBACjF,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAsB,CAAC,CAAC,CAAC,WAAoB;oBAClF,QAAQ,EAAE,QAAiB;oBAC3B,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,mBAAmB,EAAE,KAAK,CAAC,MAAM,EAAE;iBAC5D,CAAC;YACN,CAAC,CAAC;SACa,CAAC;QACpB,OAAO,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,KAAc;QACjC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,KAAgB,CAAC;IAC5B,CAAC;CAEJ"}
|
package/dist/src/PlanValue.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Plan } from "./types.ts";
|
|
2
|
-
export default class PlanValue {
|
|
3
|
-
#private;
|
|
4
|
-
static admit(raw: string, onWarning?: (detail: string) => void): Plan;
|
|
5
|
-
static assertCanonical(value: unknown): Plan;
|
|
6
|
-
static stringify(value: unknown): string;
|
|
7
|
-
static render(value: unknown): string;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=PlanValue.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PlanValue.d.ts","sourceRoot":"","sources":["../../src/PlanValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,MAAM,CAAC,OAAO,OAAO,SAAS;;IAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAcpE;IAED,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAK3C;IAED,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvC;IAMD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpC;CAsBJ"}
|
package/dist/src/PlanValue.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import Validator from "./Validator.js";
|
|
2
|
-
import { renderJsonResult } from "./JsonResult.js";
|
|
3
|
-
// One source-admission normalization for the model-native Plan. Exact submitted
|
|
4
|
-
// text remains owned by turnOps evidence; standards projection happens later.
|
|
5
|
-
export default class PlanValue {
|
|
6
|
-
static admit(raw, onWarning) {
|
|
7
|
-
if (raw.trim().length === 0)
|
|
8
|
-
return [];
|
|
9
|
-
let parsed;
|
|
10
|
-
try {
|
|
11
|
-
parsed = JSON.parse(raw);
|
|
12
|
-
}
|
|
13
|
-
catch (cause) {
|
|
14
|
-
if (!(cause instanceof SyntaxError))
|
|
15
|
-
throw cause;
|
|
16
|
-
onWarning?.("TASK body retained as one in_progress item: the body is not valid JSON.");
|
|
17
|
-
return PlanValue.#fallback(raw);
|
|
18
|
-
}
|
|
19
|
-
const normalized = PlanValue.#stripToSchema(parsed);
|
|
20
|
-
if (Validator.validatePlan(normalized).valid)
|
|
21
|
-
return normalized;
|
|
22
|
-
onWarning?.("TASK body retained as one in_progress item: the JSON does not match the task inventory schema.");
|
|
23
|
-
return PlanValue.#fallback(raw);
|
|
24
|
-
}
|
|
25
|
-
static assertCanonical(value) {
|
|
26
|
-
if (!Validator.validatePlan(value).valid) {
|
|
27
|
-
throw new TypeError("Expected a canonical Plurnk Plan.");
|
|
28
|
-
}
|
|
29
|
-
return value;
|
|
30
|
-
}
|
|
31
|
-
static stringify(value) {
|
|
32
|
-
return JSON.stringify(PlanValue.assertCanonical(value));
|
|
33
|
-
}
|
|
34
|
-
// Log-projection layout (#335, reworked #339): the shared
|
|
35
|
-
// {§json-result-rendering} spread — one valid JSON array, one entry per
|
|
36
|
-
// line, brackets riding the first and last lines. Scoped KILL reaches
|
|
37
|
-
// individual entries; the projected form re-admits as plain JSON.
|
|
38
|
-
static render(value) {
|
|
39
|
-
return renderJsonResult(PlanValue.assertCanonical(value));
|
|
40
|
-
}
|
|
41
|
-
static #fallback(content) {
|
|
42
|
-
return [{ content, status: "in_progress" }];
|
|
43
|
-
}
|
|
44
|
-
// The model-facing Plan carries no priority (struck 2026-08-24): admission
|
|
45
|
-
// strips unknown keys — the stale habit's log echo starves — while turnOps
|
|
46
|
-
// evidence keeps the exact submitted text. ACP's required priority is
|
|
47
|
-
// synthesized at the AcpPlanValue edge, never here.
|
|
48
|
-
static #stripToSchema(value) {
|
|
49
|
-
if (!Array.isArray(value))
|
|
50
|
-
return value;
|
|
51
|
-
return value.map((entry) => {
|
|
52
|
-
if (entry === null || typeof entry !== "object" || Array.isArray(entry))
|
|
53
|
-
return entry;
|
|
54
|
-
const record = entry;
|
|
55
|
-
return {
|
|
56
|
-
...(Object.hasOwn(record, "content") ? { content: record.content } : {}),
|
|
57
|
-
...(Object.hasOwn(record, "status") ? { status: record.status } : {}),
|
|
58
|
-
...(Object.hasOwn(record, "_meta") ? { _meta: record._meta } : {}),
|
|
59
|
-
};
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=PlanValue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PlanValue.js","sourceRoot":"","sources":["../../src/PlanValue.ts"],"names":[],"mappings":"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"}
|