@agentwhy/cli 0.3.0 → 0.3.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.
Files changed (33) hide show
  1. package/dist/adapter/codex/contract/assumptions.js +4 -4
  2. package/dist/adapter/codex/contract/deliveries.js +12 -0
  3. package/dist/adapter/codex/contract/messages.js +8 -1
  4. package/dist/adapter/codex/events/cell-commands.js +191 -0
  5. package/dist/adapter/codex/events/delivered-output.js +30 -0
  6. package/dist/adapter/codex/events/rollout-scan.js +99 -7
  7. package/dist/core/access/command-line.js +4 -1
  8. package/dist/core/access/listing.js +10 -3
  9. package/dist/core/access/protected-access.js +94 -1
  10. package/dist/core/access/recorded-effect.js +22 -1
  11. package/dist/report/build-report.js +125 -19
  12. package/dist/report/render/report-page/file-story.js +33 -2
  13. package/dist/report/render/report-page/files-view.js +176 -55
  14. package/dist/report/render/report-page/files.js +51 -8
  15. package/dist/report/render/report-page/fix-wizard-script.js +17 -7
  16. package/dist/report/render/report-page/fix-wizard.js +4 -1
  17. package/dist/report/render/report-page/helpers.js +2 -1
  18. package/dist/report/render/report-page/report-page-renderer.js +51 -12
  19. package/dist/report/render/report-page/story-window.js +33 -12
  20. package/dist/report/render/report-page/to-do-view.js +42 -10
  21. package/dist/report/render/ui/app-sidebar.js +31 -2
  22. package/dist/report/render/ui/confirm-dialog.js +69 -4
  23. package/dist/report/render/ui/words/app-words.js +6 -0
  24. package/dist/report/render/ui/words/report-words.js +114 -12
  25. package/dist/report/render/ui/words/settings-words.js +12 -9
  26. package/dist/report/start/conversations/calendar-view.js +1 -1
  27. package/dist/report/start/conversations/conversation-columns.js +6 -4
  28. package/dist/report/start/conversations/period-section.js +11 -10
  29. package/dist/report/start/conversations/periods.js +7 -1
  30. package/dist/report/start/render/session-status.js +14 -9
  31. package/dist/report/start/session-start.js +6 -3
  32. package/dist/report/start/settings/alerts-tab.js +2 -1
  33. package/package.json +1 -1
@@ -14,19 +14,24 @@ export function statusOf(entry) {
14
14
  const { tally, incomplete } = entry.report;
15
15
  if (tally.contentsSeen > 0)
16
16
  return 'seen';
17
- // F17, `2026-09-27-what-codex-wrote.md` X10: a record with gaps cannot say nothing needs doing, so short of a read it is
18
- // not known - its name seen stays in its report, which leads with the gap too. Found on a Codex record, which always has
19
- // one: a conversation that listed `.env` was folded under "nothing private to fix". `codex-blocks-too` CK12, decided by
20
- // the maintainer on 2026-09-30: an attempt agentwhy stopped is a fact in its own words, so where one was stopped and no
21
- // file was reached nor attempted to no known end, the row says Stopped; the gap stays in the report.
22
- if (incomplete)
23
- return tally.refusedAttempts > 0 && tally.filesReached === 0 && tally.unknownAttempts === 0 ? 'blocked' : 'unknown';
17
+ // `codex-blocks-too` CK12, amended 2026-10-05 by the maintainer: an attempt agentwhy stopped is a fact in its own
18
+ // words, and outranks a name seen - the agent found the file, was stopped from opening it, and the rule held. Never
19
+ // where an attempt has no known end: then what happened to it is not known.
20
+ if (tally.refusedAttempts > 0 && tally.unknownAttempts === 0)
21
+ return 'blocked';
22
+ // F17, X10: an attempt with no known end, on a record with gaps, leaves what the agent saw not known, whatever names
23
+ // it saw beside it - and so does a file's text a process printed that no agent is shown to have received (X14).
24
+ if (incomplete && (tally.unknownAttempts > 0 || (tally.printedUnseen ?? 0) > 0))
25
+ return 'unknown';
26
+ // A gap does not unmake what the record did establish: a name seen is said, as the report's headline says it
27
+ // (amended 2026-10-05 - every Codex record has a gap, and each reach of theirs short of a read was hidden behind it).
24
28
  if (tally.filesReached > 0 && tally.onlyThroughResult === tally.filesReached)
25
29
  return 'result';
26
30
  if (tally.filesReached > 0)
27
31
  return 'named';
28
- if (tally.refusedAttempts > 0)
29
- return 'blocked';
32
+ // F17: short of a reach, a record with gaps cannot say nothing needs doing.
33
+ if (incomplete)
34
+ return 'unknown';
30
35
  return 'clean';
31
36
  }
32
37
  /**
@@ -910,7 +910,7 @@ function entryOf(name, title, session, report) {
910
910
  * call named it, it only appeared in a result, or its outcome is not recorded. The same four the row's badge
911
911
  * climbs, so a row and the files under it never disagree.
912
912
  */
913
- function filesOf(actions) {
913
+ export function filesOf(actions) {
914
914
  const strongest = new Map();
915
915
  const add = (path, kind) => {
916
916
  if (!strongest.has(path))
@@ -922,10 +922,13 @@ function filesOf(actions) {
922
922
  add(route.path, 'named');
923
923
  for (const path of actions.onlyInResults)
924
924
  add(path, 'result');
925
- for (const path of actions.unknown)
926
- add(path, 'unknown');
925
+ // F57a: a file the record shows was read, and that the person chose Track for, is told whatever else was tried on it.
926
+ // `actionsOf` keeps a told path off every other list but `unknown`, so read after it, a search that matched nothing
927
+ // made a tracked file read through `head` an unknown one, and its row asked for a fix (found 2026-10-05).
927
928
  for (const path of actions.told ?? [])
928
929
  add(path, 'told');
930
+ for (const path of actions.unknown)
931
+ add(path, 'unknown');
929
932
  return [...strongest.values()];
930
933
  }
931
934
  /** A policy as one comparable value: what it protects, how, and its exceptions (F57). */
@@ -40,6 +40,7 @@ export function alertsTab(view) {
40
40
  row({
41
41
  tone: 'mint',
42
42
  key: 'stopped',
43
+ says: 'line',
43
44
  locked: view.stopped.locked,
44
45
  state: optional(view.stopped.on, view.stopped.locked),
45
46
  control: view.stopped.locked ? lockedSwitch('stopped', turnOn) : toggleSwitch({
@@ -100,7 +101,7 @@ function row(spec) {
100
101
  ? tag(inLanguages((t) => t('set.card.read.badge')), 'mint', 'badge')
101
102
  : tag(inLanguages((t) => t('set.card.optional')), 'grey', 'badge')) + '</div>' +
102
103
  '<p class="set-msg-why">' + word('when') + '</p>' +
103
- chatExample({ tone: spec.tone, ai: inLanguages((t) => t('set.chat.ai')), answer: word('answer') }) +
104
+ chatExample({ tone: spec.tone, ai: inLanguages((t) => t(spec.says === 'line' ? 'set.chat.line' : 'set.chat.ai')), answer: word('answer') }) +
104
105
  (spec.state === undefined ? '' : stateLine(spec.state)) +
105
106
  '<p class="set-say" data-set-say hidden></p>' +
106
107
  '</div>' + spec.control + '</article>';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentwhy/cli",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Reconstructs from transcripts why an AI agent reached for protected data",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",