@vincemakes/kiso-task-ext 0.14.0 → 0.15.1
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/dist/kiso-task.mjs +33 -0
- package/package.json +2 -2
package/dist/kiso-task.mjs
CHANGED
|
@@ -81,11 +81,42 @@ export function taskEcho(items) {
|
|
|
81
81
|
export default function createTaskExtension() {
|
|
82
82
|
return {
|
|
83
83
|
name: "task",
|
|
84
|
+
// TT-1A ③ — the extension speaks for its OWN tool, and only its own:
|
|
85
|
+
// allow task_set, abstain on everything else. Proof A (authorization):
|
|
86
|
+
// task_set cannot change the external world — it parses and echoes a
|
|
87
|
+
// canonical list into the session's own log; auto-allowing it is
|
|
88
|
+
// sound, and the 0.14.0 dogfood showed the alternative (an
|
|
89
|
+
// all-abstain chain asks on EVERY update — the abstain verdict doing
|
|
90
|
+
// its job on a tool nobody had spoken for). The chain is
|
|
91
|
+
// deny > allow > ask (W21/R3), so this allow can never un-deny
|
|
92
|
+
// another speaker's deny.
|
|
93
|
+
approvals: [
|
|
94
|
+
{
|
|
95
|
+
decide: (call) =>
|
|
96
|
+
call.name === "task_set"
|
|
97
|
+
? { action: "allow", reason: "recording the plan in the session's own log changes nothing outside it" }
|
|
98
|
+
: { action: "abstain" },
|
|
99
|
+
},
|
|
100
|
+
],
|
|
84
101
|
tools: [
|
|
85
102
|
{
|
|
86
103
|
name: "task_set",
|
|
87
104
|
description:
|
|
88
105
|
"set the work plan as a whole-table replace: pass the COMPLETE current list (each item {text, status}) — at most one active. The result echoes the normalized list; it survives /compact and kill -9 (durable working memory).",
|
|
106
|
+
// TT-1A ① — a pure parse→echo may honestly declare idempotency:
|
|
107
|
+
// the same items in, the same echo out, byte for byte; without
|
|
108
|
+
// this the kernel's "side effects may have partially applied"
|
|
109
|
+
// note rides every invalid_input refusal — a false statement
|
|
110
|
+
// about a tool with no effects (the ask_user precedent).
|
|
111
|
+
idempotent: true,
|
|
112
|
+
// TT-1A ② — Proof B (scheduling): read-only of the world + free +
|
|
113
|
+
// local + no shared mutable state in the handler ⇒ every
|
|
114
|
+
// invocation may overlap every sibling; a TODO update stops
|
|
115
|
+
// blocking the FIFO queue. precommitSafe is deliberately ABSENT
|
|
116
|
+
// (the adjudicated rejection): the CLAIM must wait for Turn
|
|
117
|
+
// Commit — admissibility is a turn-validity property, not a tool
|
|
118
|
+
// property; speculative stays parked until a measured bottleneck.
|
|
119
|
+
effects: { concurrency: "shared" },
|
|
89
120
|
parameters: {
|
|
90
121
|
type: "object",
|
|
91
122
|
properties: {
|
|
@@ -98,11 +129,13 @@ export default function createTaskExtension() {
|
|
|
98
129
|
status: { type: "string", enum: STATUSES },
|
|
99
130
|
},
|
|
100
131
|
required: ["text", "status"],
|
|
132
|
+
additionalProperties: false,
|
|
101
133
|
},
|
|
102
134
|
maxItems: MAX_ITEMS,
|
|
103
135
|
},
|
|
104
136
|
},
|
|
105
137
|
required: ["items"],
|
|
138
|
+
additionalProperties: false,
|
|
106
139
|
},
|
|
107
140
|
execute: async (input) => {
|
|
108
141
|
const parsed = parseTaskSet(input);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vincemakes/kiso-task-ext",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"description": "kiso official task extension — long-horizon working memory (task_set), kernel untouched",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"test": "vitest run"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@vincemakes/kiso-core": "0.
|
|
26
|
+
"@vincemakes/kiso-core": "0.15.1",
|
|
27
27
|
"@types/node": "^26.1.2",
|
|
28
28
|
"typescript": "^5.7.2",
|
|
29
29
|
"vitest": "^3.0.0"
|