@vincemakes/kiso-task-ext 0.14.0 → 0.15.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.
Files changed (2) hide show
  1. package/dist/kiso-task.mjs +33 -0
  2. package/package.json +2 -2
@@ -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.14.0",
3
+ "version": "0.15.0",
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.14.0",
26
+ "@vincemakes/kiso-core": "0.15.0",
27
27
  "@types/node": "^26.1.2",
28
28
  "typescript": "^5.7.2",
29
29
  "vitest": "^3.0.0"