kankaku-pi 1.1.0 → 1.3.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/README.md CHANGED
@@ -1043,24 +1043,27 @@ a background subagent that settles long after its orchestrator, and after
1043
1043
  the directory has otherwise gone quiet.
1044
1044
 
1045
1045
  **Assignment is create-only.** You (or whoever reassigns work in the hub's
1046
- web app) can move a task from one client/project to another directly in
1047
- PocketBase — for example, moving a "Sin determinar" row to its real
1048
- client once you have identified it. A later re-sync of that same task
1046
+ web app, or explicitly from the `kankaku` CLI's Tasks screen) can move a
1047
+ task from one client/project to another directly in PocketBase — for
1048
+ example, moving a "Sin determinar" row to its real client once you have
1049
+ identified it. A later re-sync of that same task
1049
1050
  **must never undo that**: on create kankaku sends the full row, including
1050
1051
  `client`/`project`/`task`/`legacy_client_label`; on every subsequent update
1051
1052
  it sends measurement fields only (`wall_ms`, `cost`, `status`, ...) and
1052
1053
  never touches assignment fields again. `task` (the linked `tasks` relation)
1053
1054
  is create-only for the exact same reason: reassigning which task a row
1054
- belongs to in the web app is never undone by a later sync. If you need
1055
- kankaku itself to change a task's assignment, do it in the web app, not by
1056
- re-syncing.
1055
+ belongs to in the web app is never undone by a later sync. Sync itself
1056
+ never changes an assignment, so to have kankaku change one, do it
1057
+ explicitly: in the web app, or from the `kankaku` CLI's Tasks screen
1058
+ (`m` for the selected task, `M` for every unassigned one in the view), not
1059
+ by re-syncing.
1057
1060
 
1058
1061
  **Historical ("Sin determinar") records.** A record with no `clientId`, or
1059
1062
  whose `clientId` no longer resolves in the catalog, is routed to the hub's
1060
1063
  "Sin determinar" (unassigned) client, carrying its old free-text `client`
1061
1064
  label (or `clientName`) forward as `legacy_client_label` — the exact
1062
1065
  mechanism that lets you bulk-reassign "everything that said `cjamar`" once,
1063
- in the web app, from the unassigned queue.
1066
+ in the web app, from the unassigned queue (or from the CLI's Tasks screen).
1064
1067
 
1065
1068
  **Agent and measurement quality.** Every `task_entries` row also carries
1066
1069
  who produced it and how well each figure was measured, so the hub can
@@ -209,6 +209,15 @@ export interface WorkRecordMetadata {
209
209
  plugin?: string;
210
210
  /** This integration's own version, from its `package.json`, read once. */
211
211
  pluginVersion?: string;
212
+ /**
213
+ * `true` when `usage.cost` is this record's proportional share of a session
214
+ * total rather than a measured difference (a headless Claude Code session
215
+ * that ran several prompts reports one cost for all of them). Local
216
+ * bookkeeping only: never sent to the hub and never part of the content
217
+ * hash. Optional and additive: `WORK_RECORD_SCHEMA` is unchanged, an older
218
+ * record without it validates, and readers that do not know it ignore it.
219
+ */
220
+ costAllocated?: true;
212
221
  }
213
222
  export type WorkRecord = WorkRecordCore & WorkRecordMetadata;
214
223
  export declare function emptyUsage(): UsageTotals;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kankaku-pi",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "pi extension that records agent work time per prompt, excluding waits for the user, with subagent linkage and task/session views",
5
5
  "license": "MIT",
6
6
  "author": "soyunninja",
@@ -218,6 +218,15 @@ export interface WorkRecordMetadata {
218
218
  plugin?: string;
219
219
  /** This integration's own version, from its `package.json`, read once. */
220
220
  pluginVersion?: string;
221
+ /**
222
+ * `true` when `usage.cost` is this record's proportional share of a session
223
+ * total rather than a measured difference (a headless Claude Code session
224
+ * that ran several prompts reports one cost for all of them). Local
225
+ * bookkeeping only: never sent to the hub and never part of the content
226
+ * hash. Optional and additive: `WORK_RECORD_SCHEMA` is unchanged, an older
227
+ * record without it validates, and readers that do not know it ignore it.
228
+ */
229
+ costAllocated?: true;
221
230
  }
222
231
 
223
232
  export type WorkRecord = WorkRecordCore & WorkRecordMetadata;